From 81e90fa4302b0a0cd4bb1f7a14c86d5fe650f0c3 Mon Sep 17 00:00:00 2001 From: bleizi Date: Thu, 13 Jul 2023 21:53:54 +0200 Subject: [PATCH] add a flag to choose data to anonymize (all, wei, user visible) and verbosity --- management/commands/anonymize_data.py | 83 ++++++++++++++++++--------- 1 file changed, 55 insertions(+), 28 deletions(-) diff --git a/management/commands/anonymize_data.py b/management/commands/anonymize_data.py index e79c5b5..48c7f45 100644 --- a/management/commands/anonymize_data.py +++ b/management/commands/anonymize_data.py @@ -7,60 +7,87 @@ from django.db import connection class Command(BaseCommand): """ - Command to protect sensitive data during the beta phase, to prevent a right escalation. - Phone number, email address, postal address, first and last name are removed. + Command to protect sensitive data during the beta phase or after WEI. + Phone number, email address, postal address, first and last name, + IP addresses, health issues, gender and birth date are removed. """ def add_arguments(self, parser): parser.add_argument('--force', '-f', action='store_true', help="Actually anonymize data.") + parser.add_argument('--type', '-t', choices=["all", "wei", "user"], default="", + help='Select the type of data to anonyze (default None)') - def handle(self, *args, **kwargs): - if not kwargs['force']: - self.stderr.write("CAUTION: This is a dangerous script. This will reset all personal data with " - "sample data. Don't use this in production! If you know what you are doing, " + def handle(self, *args, **options): + if not options['force']: + if options['type'] == "all": + self.stderr.write("CAUTION: This is a dangerous script. This will reset ALL personal data with " + "sample data. Don't use in production! If you know what you are doing, please " + "add --force option.") + elif options['type'] == "wei": + self.stderr.write("CAUTION: This is a dangerous script. This will reset WEI personal data with " + "sample data. Use it in production only after WEI. If you know what you are doing," "please add --force option.") + elif options['type'] == "user": + self.stderr.write("CAUTION: This is a dangerous script. This will reset all personal data " + "visible by user (not admin or trez BDE) with sample data. Don't use in " + "production! If you know what you are doing, please add --force option.") + else: + self.stderr.write("CAUTION: This is a dangerous script. This will reset all personal data with " + "sample data. Don't use in production ('wei' can be use in production after " + "the WEI)! If you know what you are doing, please choose a type.") exit(1) cur = connection.cursor() - cur.execute("UPDATE member_profile SET " + if options['type'] in ("all","user"): + if options['verbosity'] != 0: + self.stdout.write("Anonymize profile, user club and guest data") + cur.execute("UPDATE member_profile SET " "phone_number = '0123456789', " "address = '4 avenue des Sciences, 91190 GIF-SUR-YVETTE';") - cur.execute("UPDATE auth_user SET " + cur.execute("UPDATE auth_user SET " "first_name = 'Anne', " "last_name = 'Onyme', " "email = 'anonymous@example.com';") - cur.execute("UPDATE member_club SET " + cur.execute("UPDATE member_club SET " "email = 'anonymous@example.com';") - cur.execute("UPDATE activity_guest SET " + cur.execute("UPDATE activity_guest SET " "first_name = 'Anne', " "last_name = 'Onyme';") - cur.execute("UPDATE treasury_invoice SET " - "name = 'Anne Onyme', " - "object = 'Rends nous riches', " - "description = 'Donne nous plein de sous', " - "address = '4 avenue des Sciences, 91190 GIF-SUR-YVETTE';") - cur.execute("UPDATE treasury_product SET " - "designation = 'un truc inutile';") - cur.execute("UPDATE note_specialtransaction SET " - "bank = 'le matelas', " - "first_name = 'Anne', " - "last_name = 'Onyme';") - cur.execute("UPDATE wei_weiregistration SET " + + if options['type'] in ("all","wei","user"): + if options['verbosity'] != 0: + self.stdout.write("Anonymize WEI data") + cur.execute("UPDATE wei_weiregistration SET " "birth_date = '1998-01-08', " "emergency_contact_name = 'Anne Onyme', " "emergency_contact_phone = '0123456789', " "gender = 'nonbinary', " "health_issues = 'Tout va bien';") - cur.execute("UPDATE logs_changelog SET " - "ip = '138.231.175.203', " + + if options['type'] == "all": + if options['verbosity'] != 0: + self.stdout.write("Anonymize invoice, special transaction, log, mailer and oauth data") + cur.execute("UPDATE treasury_invoice SET " + "name = 'Anne Onyme', " + "object = 'Rends nous riches', " + "description = 'Donne nous plein de sous', " + "address = '4 avenue des Sciences, 91190 GIF-SUR-YVETTE';") + cur.execute("UPDATE treasury_product SET " + "designation = 'un truc inutile';") + cur.execute("UPDATE note_specialtransaction SET " + "bank = 'le matelas', " + "first_name = 'Anne', " + "last_name = 'Onyme';") + cur.execute("UPDATE logs_changelog SET " + "ip = '127.0.0.1', " "data = 'new data', " "previous = 'old data';") - cur.execute("UPDATE mailer_messagelog SET" + cur.execute("UPDATE mailer_messagelog SET " "log_message = 'log message', " "message_data = 'message data';") - cur.execute("UPDATE mailer_dontsendentry SET" + cur.execute("UPDATE mailer_dontsendentry SET " "to_address = 'anonymous@example.com';") - cur.execute("UPDATE oauth2_provider_application SET" + cur.execute("UPDATE oauth2_provider_application SET " "name = 'external app', " - "redirect_urls = 'http://external.app', " + "redirect_uris = 'http://external.app', " "client_secret = 'abcdefghijklmnopqrstuvwxyz';") cur.close()