diff --git a/beat/web/accounts/management/commands/clean_expired_temporary_urls.py b/beat/web/accounts/management/commands/clean_expired_temporary_urls.py new file mode 100644 index 0000000000000000000000000000000000000000..5537aea5453973c4901c8f07e0580ca021104777 --- /dev/null +++ b/beat/web/accounts/management/commands/clean_expired_temporary_urls.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : +# encoding: utf-8 + +############################################################################### +# # +# Copyright (c) 2020 Idiap Research Institute, http://www.idiap.ch/ # +# Contact: beat.support@idiap.ch # +# # +# This file is part of the beat.web module of the BEAT platform. # +# # +# Commercial License Usage # +# Licensees holding valid commercial BEAT licenses may use this file in # +# accordance with the terms contained in a written agreement between you # +# and Idiap. For further information contact tto@idiap.ch # +# # +# Alternatively, this file may be used under the terms of the GNU Affero # +# Public License version 3 as published by the Free Software and appearing # +# in the file LICENSE.AGPL included in the packaging of this file. # +# The BEAT platform is distributed in the hope that it will be useful, but # +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # +# or FITNESS FOR A PARTICULAR PURPOSE. # +# # +# You should have received a copy of the GNU Affero Public License along # +# with the BEAT platform. If not, see http://www.gnu.org/licenses/. # +# # +############################################################################### + + +from django.core.management.base import BaseCommand + +import datetime +import sys + +from ...models import TemporaryUrl + + +class Command(BaseCommand): + + help = 'Clean expired temporary urls' + + def add_arguments(self, parser): + parser.add_argument('--noinput', action='store_false', dest='interactive', default=False, + help=('Tells Django to NOT prompt the user for input of any kind.')) + + + def handle(self, *args, **options): + + if options['interactive']: + try: + answer = self.get_input_data('Clean expired temporary url(s) that have not been used? (y/n)? ', 'y').lower() + except KeyboardInterrupt: + self.stderr.write("\nOperation canceled.") + sys.exit(1) + + if answer != 'y': + self.stdout.write('Clean expired temporary urls operation canceled') + sys.exit(1) + + temporary_urls = TemporaryUrl.objects.all() + count = 0 + for temporary_url in temporary_urls: + now = datetime.datetime.now() + if temporary_url.expires < now: + count+=1 + temporary_url.delete() + + self.stdout.write('{} Expired temporary url(s) successfully cleaned/'.format(count) + '{} Total temporary url(s) checked'.format(temporary_urls.count())) + + + def get_input_data(self, message, default=None): + """ + Override this method if you want to customize data inputs or + validation exceptions. + """ + raw_value = raw_input(message) + + if default and raw_value == '': + raw_value = default + + return raw_value diff --git a/beat/web/utils/management/commands/daily_cron_actions.py b/beat/web/utils/management/commands/daily_cron_actions.py index 88d08e1d02d394fa5375779154846e5a71215a6d..ad580f42cbe9ee6a7630e92f22eacdc054e589bc 100644 --- a/beat/web/utils/management/commands/daily_cron_actions.py +++ b/beat/web/utils/management/commands/daily_cron_actions.py @@ -46,7 +46,7 @@ class Command(BaseCommand): help = 'Daily CRON actions' def handle(self, *args, **options): - + # Send attestations cleanup warnings and cleanup attestations call_command('send_attestation_cleanup_warning') @@ -64,3 +64,6 @@ class Command(BaseCommand): # Yearly revalidation process with warnings, status change and blockage call_command('year_revalidation_users') + + # Clean expired temporary urls for account activation/re-activation + call_command('clean_expired_temporary_urls')