Georgi Matev bf2f66398b
Prevent the static purge scripts running in combination without a user (#2832)
---

#### Does this PR need a docs update or release note?

- [ ]  Yes, it's included
- [ ] 🕐 Yes, but in a later PR
- [x]  No

#### Type of change

<!--- Please check the type of change your PR introduces: --->
- [ ] 🌻 Feature
- [x] 🐛 Bugfix
- [ ] 🗺️ Documentation
- [ ] 🤖 Test
- [ ] 💻 CI/Deployment
- [ ] 🧹 Tech Debt/Cleanup

#### Issue(s)

<!-- Can reference multiple issues. Use one of the following "magic words" - "closes, fixes" to auto-close the Github issue. -->
* #<issue>

#### Test Plan

<!-- How will this be tested prior to merging.-->
- [x] 💪 Manual
- [ ]  Unit test
- [ ] 💚 E2E
2023-03-17 00:07:34 +00:00

89 lines
3.7 KiB
YAML

name: Purge M365 User Data
# Hard deletion of an m365 user's data. Our CI processes create a lot
# of data churn (creation and immediate deletion) of files, the likes
# of which wouldn't otherwise be seen by users of the system. Standard
# APIs don't have the tooling to gut out all the cruft which we accrue
# in microsoft's hidden nooks and secret crannies. A manual, SOAPy
# exorcism is the only way.
#
# The script focuses on the cleaning up the following:
# * All folders, descending from the exchange root, of a given prefix.
# * All folders in PersonMetadata
# * All already soft-deleted items
# * All recoverable items in Audits
# * All recoverable items in Purges
inputs:
user:
description: User whose data is to be purged.
folder-prefix:
description: Name of the folder to be purged. If falsy, will purge the set of static, well known folders instead.
older-than:
description: Minimum-age of folders to be deleted.
azure-client-id:
description: Secret value of for AZURE_CLIENT_ID
azure-client-secret:
description: Secret value of for AZURE_CLIENT_SECRET
azure-tenant-id:
description: Secret value of for AZURE_TENANT_ID
m365-admin-user:
description: Secret value of for M365TENANT_ADMIN_USER
m365-admin-password:
description: Secret value of for M365TENANT_ADMIN_PASSWORD
runs:
using: composite
steps:
- name: Run the folder-matrix purge script set
if: ${{ inputs.folder-prefix != '' }}
shell: pwsh
working-directory: ./src/cmd/purge/scripts
env:
AZURE_CLIENT_ID: ${{ inputs.azure-client-id }}
AZURE_CLIENT_SECRET: ${{ inputs.azure-client-secret }}
AZURE_TENANT_ID: ${{ inputs.azure-tenant-id }}
run: |
./foldersAndItems.ps1 -WellKnownRoot root -User ${{ inputs.user }} -FolderPrefixPurge ${{ inputs.folder-prefix }} -FolderBeforePurge ${{ inputs.older-than }}
- name: Reset retention for all mailboxes to 0
if: ${{ inputs.folder-prefix == '' && inputs.user == '' }}
shell: pwsh
working-directory: ./src/cmd/purge/scripts
env:
M365TENANT_ADMIN_USER: ${{ inputs.m365-admin-user }}
M365TENANT_ADMIN_PASSWORD: ${{ inputs.m365-admin-password }}
run: |
./setRetention.ps1
- name: Run the static purge script set
if: ${{ inputs.folder-prefix == '' && inputs.user != '' }}
shell: pwsh
working-directory: ./src/cmd/purge/scripts
env:
AZURE_CLIENT_ID: ${{ inputs.azure-client-id }}
AZURE_CLIENT_SECRET: ${{ inputs.azure-client-secret }}
AZURE_TENANT_ID: ${{ inputs.azure-tenant-id }}
# powershell doesn't like multiline commands, each of these must be on a single line
run: |
./foldersAndItems.ps1 -WellKnownRoot root -User ${{ inputs.user }} -FolderNamePurge PersonMetadata
./foldersAndItems.ps1 -WellKnownRoot deleteditems -User ${{ inputs.user }}
./foldersAndItems.ps1 -WellKnownRoot recoverableitemsroot -User ${{ inputs.user }} -FolderNamePurge Audits
./foldersAndItems.ps1 -WellKnownRoot recoverableitemsroot -User ${{ inputs.user }} -FolderNamePurge Purges
./foldersAndItems.ps1 -WellKnownRoot recoverableitemsroot -User ${{ inputs.user }} -FolderNamePurge Deletions
- name: Run the old purge script to clear out onedrive buildup
working-directory: ./src
if: ${{ inputs.folder-prefix != '' }}
shell: sh
env:
AZURE_CLIENT_ID: ${{ inputs.azure-client-id }}
AZURE_CLIENT_SECRET: ${{ inputs.azure-client-secret }}
AZURE_TENANT_ID: ${{ inputs.azure-tenant-id }}
run: >
go run ./cmd/purge/purge.go onedrive
--user ${{ inputs.user }}
--prefix ${{ inputs.folder-prefix }}
--before ${{ inputs.older-than }}