From 306d04288f2f6c3f590f20960d0fe9f440441b44 Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Tue, 3 Nov 2020 21:45:51 +0100 Subject: [PATCH 1/3] misc: add User.set_random_password() (#47943) --- src/authentic2/custom_user/models.py | 5 +++++ tests/test_user_model.py | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/src/authentic2/custom_user/models.py b/src/authentic2/custom_user/models.py index 9452c161..279c78e6 100644 --- a/src/authentic2/custom_user/models.py +++ b/src/authentic2/custom_user/models.py @@ -17,7 +17,9 @@ from __future__ import unicode_literals +import base64 import datetime +import os import random from django.db import models, transaction @@ -371,6 +373,9 @@ class User(AbstractBaseUser, PermissionMixin): if save: self.save(update_fields=['email', 'email_verified', 'is_active', 'deleted']) + def set_random_password(self): + self.set_password(base64.b64encode(os.urandom(32))) + class DeletedUser(models.Model): deleted = models.DateTimeField( diff --git a/tests/test_user_model.py b/tests/test_user_model.py index 58a6f566..5179ae83 100644 --- a/tests/test_user_model.py +++ b/tests/test_user_model.py @@ -236,3 +236,11 @@ def test_attribute_values_order(db): val1, val2 = attribute_values[:2] assert val1.attribute.label == 'phone' assert val2.attribute.label == 'birthdate' + + +def test_set_random_password(): + user = User() + user.set_unusable_password() + assert not user.has_usable_password() + user.set_random_password() + assert user.has_usable_password() -- 2.29.1