mirror of https://gitlab.federez.net/re2o/re2o
1 changed files with 71 additions and 0 deletions
@ -0,0 +1,71 @@ |
|||
from django.core.management.base import BaseCommand |
|||
from users.models import User, School, Adherent, Club |
|||
from django.db.models import F, Value |
|||
from django.db.models.functions import Concat |
|||
|
|||
from re2o.login import hashNT, makeSecret |
|||
|
|||
import os, random, string |
|||
|
|||
class Command(BaseCommand): |
|||
help="Anonymize the data in the database in order to use them on critical servers (dev, personnal...). Every information will be overwritten using non-personnal informations. This script must follow any modification of the database." |
|||
|
|||
def handle(self, *args, **kwargs): |
|||
|
|||
total = Adherent.objects.count() |
|||
self.stdout.write("Starting anonymizing the {} users data.".format(total)) |
|||
|
|||
u = User.objects.all() |
|||
a = Adherent.objects.all() |
|||
c = Club.objects.all() |
|||
|
|||
self.stdout.write('Supression de l\'école...') |
|||
# Create a fake School to put everyone in it. |
|||
ecole = School(name="Ecole des Ninja") |
|||
ecole.save() |
|||
u.update(school=ecole) |
|||
self.stdout.write(self.style.SUCCESS('done ...')) |
|||
|
|||
self.stdout.write('Supression des chambres...') |
|||
a.update(room=None) |
|||
c.update(room=None) |
|||
self.stdout.write(self.style.SUCCESS('done ...')) |
|||
|
|||
self.stdout.write('Supression des mails...') |
|||
u.update(email='example@example.org', |
|||
local_email_redirect = False, |
|||
local_email_enabled=False) |
|||
self.stdout.write(self.style.SUCCESS('done ...')) |
|||
|
|||
self.stdout.write('Supression des noms, prenoms, pseudo, telephone, commentaire...') |
|||
a.update(name=Concat(Value('name of '), 'id')) |
|||
self.stdout.write(self.style.SUCCESS('done name')) |
|||
|
|||
a.update(surname=Concat(Value('surname of '), 'id')) |
|||
self.stdout.write(self.style.SUCCESS('done surname')) |
|||
|
|||
u.update(pseudo=F('id')) |
|||
self.stdout.write(self.style.SUCCESS('done pseudo')) |
|||
|
|||
a.update(telephone=Concat(Value('phone of '), 'id')) |
|||
self.stdout.write(self.style.SUCCESS('done phone')) |
|||
|
|||
a.update(comment=Concat(Value('commentaire of '), 'id')) |
|||
self.stdout.write(self.style.SUCCESS('done ...')) |
|||
|
|||
self.stdout.write('Unification du mot de passe...') |
|||
# Define the password |
|||
chars = string.ascii_letters + string.digits + '!@#$%^&*()' |
|||
taille = 20 |
|||
random.seed = (os.urandom(1024)) |
|||
password = "" |
|||
for i in range(taille): |
|||
password+=random.choice(chars) |
|||
|
|||
self.stdout.write(self.style.HTTP_NOT_MODIFIED('The password will be: {}'.format(password))) |
|||
|
|||
u.update(pwd_ntlm = hashNT(password)) |
|||
u.update(password = makeSecret(password)) |
|||
self.stdout.write(self.style.SUCCESS('done...')) |
|||
|
|||
self.stdout.write("Data anonymized!") |
|||
Loading…
Reference in new issue