From 4185bd3588d23bd5d6ca326fbd6b0ccbbfabf9f5 Mon Sep 17 00:00:00 2001 From: Flavio Tarsetti <flavio.tarsetti@idiap.ch> Date: Mon, 4 May 2020 11:33:41 +0200 Subject: [PATCH] [utils/accounts][management][commands] add expired temporary urls cleanup Fixes #542 --- .../commands/clean_expired_temporary_urls.py | 81 +++++++++++++++++++ .../management/commands/daily_cron_actions.py | 5 +- 2 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 beat/web/accounts/management/commands/clean_expired_temporary_urls.py 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 000000000..5537aea54 --- /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 88d08e1d0..ad580f42c 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') -- GitLab