Skip to content

Commit

Permalink
Merge pull request #486 from nextcloud/feature/30/email-before-accoun…
Browse files Browse the repository at this point in the history
…t-deletion

📬 Email before account deletion
  • Loading branch information
nickvergessen authored Nov 17, 2022
2 parents b85d3be + 069f7a5 commit 79d2f9e
Show file tree
Hide file tree
Showing 11 changed files with 2,658 additions and 232 deletions.
136 changes: 136 additions & 0 deletions .github/workflows/phpunit-sqlite.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
# This workflow is provided via the organization template repository
#
# https://github.com/nextcloud/.github
# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization

name: PHPUnit

on:
pull_request:
paths:
- '.github/workflows/**'
- 'appinfo/**'
- 'lib/**'
- 'templates/**'
- 'tests/**'
- 'vendor/**'
- 'vendor-bin/**'
- '.php-cs-fixer.dist.php'
- 'composer.json'
- 'composer.lock'

push:
branches:
- main
- master
- stable*

permissions:
contents: read

concurrency:
group: phpunit-sqlite-${{ github.head_ref || github.run_id }}
cancel-in-progress: true

env:
# Location of the phpunit.xml and phpunit.integration.xml files
PHPUNIT_CONFIG: ./tests/phpunit.xml
PHPUNIT_INTEGRATION_CONFIG: ./tests/phpunit.integration.xml

jobs:
phpunit-sqlite:
runs-on: ubuntu-latest

strategy:
matrix:
php-versions: ['7.4', '8.0', '8.1']
server-versions: ['master']

steps:
- name: Set app env
run: |
# Split and keep last
echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV
- name: Checkout server
uses: actions/checkout@v3
with:
submodules: true
repository: nextcloud/server
ref: ${{ matrix.server-versions }}

- name: Checkout app
uses: actions/checkout@v3
with:
path: apps/${{ env.APP_NAME }}

- name: Set up php ${{ matrix.php-versions }}
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
tools: phpunit
extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite
coverage: none

- name: Check composer file existence
id: check_composer
uses: andstor/file-existence-action@v2
with:
files: apps/${{ env.APP_NAME }}/composer.json

- name: Set up PHPUnit
# Only run if phpunit config file exists
if: steps.check_composer.outputs.files_exists == 'true'
working-directory: apps/${{ env.APP_NAME }}
run: composer i

- name: Set up Nextcloud
env:
DB_PORT: 4444
run: |
mkdir data
./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
./occ app:enable --force ${{ env.APP_NAME }}
- name: Check PHPUnit config file existence
id: check_phpunit
uses: andstor/file-existence-action@v2
with:
files: apps/${{ env.APP_NAME }}/${{ env.PHPUNIT_CONFIG }}

- name: PHPUnit
# Only run if phpunit config file exists
if: steps.check_phpunit.outputs.files_exists == 'true'
working-directory: apps/${{ env.APP_NAME }}
run: ./vendor/phpunit/phpunit/phpunit -c ${{ env.PHPUNIT_CONFIG }}

- name: Check PHPUnit integration config file existence
id: check_integration
uses: andstor/file-existence-action@v2
with:
files: apps/${{ env.APP_NAME }}/${{ env.PHPUNIT_INTEGRATION_CONFIG }}

- name: Run Nextcloud
# Only run if phpunit integration config file exists
if: steps.check_integration.outputs.files_exists == 'true'
run: php -S localhost:8080 &

- name: PHPUnit integration
# Only run if phpunit integration config file exists
if: steps.check_integration.outputs.files_exists == 'true'
working-directory: apps/${{ env.APP_NAME }}
run: ./vendor/phpunit/phpunit/phpunit -c ${{ env.PHPUNIT_INTEGRATION_CONFIG }}

summary:
permissions:
contents: none
runs-on: ubuntu-latest
needs: phpunit-sqlite

if: always()

name: phpunit-sqlite-summary

steps:
- name: Summary status
run: if ${{ needs.phpunit-sqlite.result != 'success' }}; then exit 1; fi
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
/build
/node_modules
/tests/.phpunit.result.cache
/vendor
34 changes: 26 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,39 @@ Accounts are deleted when they did not log in within the given number of days. T

![Screenshot of the admin settings](docs/screenshot.png)

## Accounts that never logged-in
## 🔐 Accounts that never logged-in

By default, accounts that have never logged in at all, will be spared from removal. To also take them into consideration, set the config flag accordingly:

`occ config:app:set user_retention keep_users_without_login --value=no`
```shell
occ config:app:set user_retention keep_users_without_login --value='no'
```

In this case the number of days will start counting from the day on which the account has been seen for the first time by the app (first run of the background job after the account was created).

### Example

Retention set to 30 days:

Account created | Account logged in | `keep_users_without_login` | Cleaned up after
---|---|---|---
7th June | 14th June | yes/default | 14th July
7th June | 14th June | no | 14th July
7th June | - | yes/default | -
7th June | - | no | 7th July
| Account created | Account logged in | `keep_users_without_login` | Cleaned up after |
|-----------------|-------------------|----------------------------|------------------|
| 7th June | 14th June | yes/default | 14th July |
| 7th June | 14th June | no | 14th July |
| 7th June | - | yes/default | - |
| 7th June | - | no | 7th July |

## 📬 Reminders

It is also possible to send an email reminder to accounts (when an email is configured).
To send a reminder **14 days after** the last activity:

```shell
occ config:app:set user_retention reminder_days --value='14'
```

You can also provide multiple reminder days as a comma separated list:
```shell
occ config:app:set user_retention reminder_days --value='14,21,28'
```

*Note:* There is no validation of the reminder days against the retention days.
30 changes: 18 additions & 12 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,20 @@
{
"name": "nextcloud/user_retention",
"description": "user_retention",
"license": "AGPL",
"config": {
"optimize-autoloader": true,
"classmap-authoritative": true
},
"require": {
},
"scripts": {
"lint": "find . -name \\*.php -not -path './vendor/*' -print0 | xargs -0 -n1 php -l"
}
"name": "nextcloud/user_retention",
"description": "user_retention",
"license": "AGPL",
"config": {
"optimize-autoloader": true,
"classmap-authoritative": true,
"platform": {
"php": "7.4"
},
"sort-packages": true
},
"scripts": {
"lint": "find . -name \\*.php -not -path './vendor/*' -print0 | xargs -0 -n1 php -l",
"test": "cd tests/ && phpunit -c phpunit.xml"
},
"require-dev": {
"phpunit/phpunit": "^9.5"
}
}
Loading

0 comments on commit 79d2f9e

Please sign in to comment.