authentik.policies.password.tests.test_zxcvbn
Password Policy zxcvbn tests
1"""Password Policy zxcvbn tests""" 2 3from django.test import TestCase 4from guardian.shortcuts import get_anonymous_user 5 6from authentik.lib.generators import generate_key 7from authentik.policies.password.models import PasswordPolicy 8from authentik.policies.types import PolicyRequest, PolicyResult 9from authentik.stages.prompt.stage import PLAN_CONTEXT_PROMPT 10 11 12class TestPasswordPolicyZxcvbn(TestCase): 13 """Test Password Policy (zxcvbn)""" 14 15 def test_invalid(self): 16 """Test without password""" 17 policy = PasswordPolicy.objects.create( 18 check_zxcvbn=True, 19 check_static_rules=False, 20 name="test_invalid", 21 ) 22 request = PolicyRequest(get_anonymous_user()) 23 result: PolicyResult = policy.passes(request) 24 self.assertFalse(result.passing) 25 self.assertEqual(result.messages[0], "Password not set in context") 26 27 def test_false(self): 28 """Failing password case""" 29 policy = PasswordPolicy.objects.create( 30 check_zxcvbn=True, 31 check_static_rules=False, 32 zxcvbn_score_threshold=3, 33 name="test_false", 34 ) 35 request = PolicyRequest(get_anonymous_user()) 36 request.context[PLAN_CONTEXT_PROMPT] = {"password": "password"} # nosec 37 result: PolicyResult = policy.passes(request) 38 self.assertFalse(result.passing, result.messages) 39 self.assertEqual(result.messages[0], "Password is too weak.") 40 self.assertEqual(result.messages[1], "Add another word or two. Uncommon words are better.") 41 42 request.context[PLAN_CONTEXT_PROMPT] = {"password": "Awdccdw1234"} # nosec 43 result: PolicyResult = policy.passes(request) 44 self.assertFalse(result.passing, result.messages) 45 self.assertEqual(result.messages[0], "Password is too weak.") 46 self.assertEqual(len(result.messages), 1) 47 48 def test_true(self): 49 """Positive password case""" 50 policy = PasswordPolicy.objects.create( 51 check_zxcvbn=True, 52 check_static_rules=False, 53 name="test_true", 54 ) 55 request = PolicyRequest(get_anonymous_user()) 56 request.context[PLAN_CONTEXT_PROMPT] = {"password": generate_key()} 57 result: PolicyResult = policy.passes(request) 58 self.assertTrue(result.passing) 59 self.assertEqual(result.messages, tuple())
class
TestPasswordPolicyZxcvbn(django.test.testcases.TestCase):
13class TestPasswordPolicyZxcvbn(TestCase): 14 """Test Password Policy (zxcvbn)""" 15 16 def test_invalid(self): 17 """Test without password""" 18 policy = PasswordPolicy.objects.create( 19 check_zxcvbn=True, 20 check_static_rules=False, 21 name="test_invalid", 22 ) 23 request = PolicyRequest(get_anonymous_user()) 24 result: PolicyResult = policy.passes(request) 25 self.assertFalse(result.passing) 26 self.assertEqual(result.messages[0], "Password not set in context") 27 28 def test_false(self): 29 """Failing password case""" 30 policy = PasswordPolicy.objects.create( 31 check_zxcvbn=True, 32 check_static_rules=False, 33 zxcvbn_score_threshold=3, 34 name="test_false", 35 ) 36 request = PolicyRequest(get_anonymous_user()) 37 request.context[PLAN_CONTEXT_PROMPT] = {"password": "password"} # nosec 38 result: PolicyResult = policy.passes(request) 39 self.assertFalse(result.passing, result.messages) 40 self.assertEqual(result.messages[0], "Password is too weak.") 41 self.assertEqual(result.messages[1], "Add another word or two. Uncommon words are better.") 42 43 request.context[PLAN_CONTEXT_PROMPT] = {"password": "Awdccdw1234"} # nosec 44 result: PolicyResult = policy.passes(request) 45 self.assertFalse(result.passing, result.messages) 46 self.assertEqual(result.messages[0], "Password is too weak.") 47 self.assertEqual(len(result.messages), 1) 48 49 def test_true(self): 50 """Positive password case""" 51 policy = PasswordPolicy.objects.create( 52 check_zxcvbn=True, 53 check_static_rules=False, 54 name="test_true", 55 ) 56 request = PolicyRequest(get_anonymous_user()) 57 request.context[PLAN_CONTEXT_PROMPT] = {"password": generate_key()} 58 result: PolicyResult = policy.passes(request) 59 self.assertTrue(result.passing) 60 self.assertEqual(result.messages, tuple())
Test Password Policy (zxcvbn)
def
test_invalid(self):
16 def test_invalid(self): 17 """Test without password""" 18 policy = PasswordPolicy.objects.create( 19 check_zxcvbn=True, 20 check_static_rules=False, 21 name="test_invalid", 22 ) 23 request = PolicyRequest(get_anonymous_user()) 24 result: PolicyResult = policy.passes(request) 25 self.assertFalse(result.passing) 26 self.assertEqual(result.messages[0], "Password not set in context")
Test without password
def
test_false(self):
28 def test_false(self): 29 """Failing password case""" 30 policy = PasswordPolicy.objects.create( 31 check_zxcvbn=True, 32 check_static_rules=False, 33 zxcvbn_score_threshold=3, 34 name="test_false", 35 ) 36 request = PolicyRequest(get_anonymous_user()) 37 request.context[PLAN_CONTEXT_PROMPT] = {"password": "password"} # nosec 38 result: PolicyResult = policy.passes(request) 39 self.assertFalse(result.passing, result.messages) 40 self.assertEqual(result.messages[0], "Password is too weak.") 41 self.assertEqual(result.messages[1], "Add another word or two. Uncommon words are better.") 42 43 request.context[PLAN_CONTEXT_PROMPT] = {"password": "Awdccdw1234"} # nosec 44 result: PolicyResult = policy.passes(request) 45 self.assertFalse(result.passing, result.messages) 46 self.assertEqual(result.messages[0], "Password is too weak.") 47 self.assertEqual(len(result.messages), 1)
Failing password case
def
test_true(self):
49 def test_true(self): 50 """Positive password case""" 51 policy = PasswordPolicy.objects.create( 52 check_zxcvbn=True, 53 check_static_rules=False, 54 name="test_true", 55 ) 56 request = PolicyRequest(get_anonymous_user()) 57 request.context[PLAN_CONTEXT_PROMPT] = {"password": generate_key()} 58 result: PolicyResult = policy.passes(request) 59 self.assertTrue(result.passing) 60 self.assertEqual(result.messages, tuple())
Positive password case