From db5b8ce30cb66c5ff502f8f416194d3803b5c910 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 | 4 ++++ tests/test_user_model.py | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/src/authentic2/custom_user/models.py b/src/authentic2/custom_user/models.py index 9452c161..89360b7c 100644 --- a/src/authentic2/custom_user/models.py +++ b/src/authentic2/custom_user/models.py @@ -19,6 +19,7 @@ from __future__ import unicode_literals import datetime import random +import secrets from django.db import models, transaction from django.utils import timezone @@ -371,6 +372,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(secrets.token_urlsafe()) + 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