authentik.policies.reputation.tests
test reputation signals and policy
1"""test reputation signals and policy""" 2 3from django.test import RequestFactory, TestCase 4 5from authentik.core.models import User 6from authentik.lib.generators import generate_id 7from authentik.policies.reputation.api import ReputationPolicySerializer 8from authentik.policies.reputation.models import Reputation, ReputationPolicy 9from authentik.policies.reputation.signals import update_score 10from authentik.policies.types import PolicyRequest 11from authentik.stages.password import BACKEND_INBUILT 12from authentik.stages.password.stage import authenticate 13from authentik.tenants.models import DEFAULT_REPUTATION_LOWER_LIMIT, DEFAULT_REPUTATION_UPPER_LIMIT 14 15 16class TestReputationPolicy(TestCase): 17 """test reputation signals and policy""" 18 19 def setUp(self): 20 self.request_factory = RequestFactory() 21 self.request = self.request_factory.get("/") 22 self.ip = "127.0.0.1" 23 self.username = "username" 24 self.password = generate_id() 25 # We need a user for the one-to-one in userreputation 26 self.user = User.objects.create(username=self.username) 27 self.user.set_password(self.password) 28 self.backends = [BACKEND_INBUILT] 29 30 def test_ip_reputation(self): 31 """test IP reputation""" 32 # Trigger negative reputation 33 authenticate(self.request, self.backends, username=self.username, password=self.username) 34 self.assertEqual(Reputation.objects.get(ip=self.ip).score, -1) 35 36 def test_user_reputation(self): 37 """test User reputation""" 38 # Trigger negative reputation 39 authenticate(self.request, self.backends, username=self.username, password=self.username) 40 self.assertEqual(Reputation.objects.get(identifier=self.username).score, -1) 41 42 def test_update_reputation(self): 43 """test reputation update""" 44 Reputation.objects.create(identifier=self.username, ip=self.ip, score=4) 45 # Trigger negative reputation 46 authenticate(self.request, self.backends, username=self.username, password=self.username) 47 self.assertEqual(Reputation.objects.get(identifier=self.username).score, 3) 48 49 def test_reputation_lower_limit(self): 50 """test reputation lower limit""" 51 Reputation.objects.create(identifier=self.username, ip=self.ip) 52 update_score(self.request, identifier=self.username, amount=-1000) 53 self.assertEqual( 54 Reputation.objects.get(identifier=self.username).score, DEFAULT_REPUTATION_LOWER_LIMIT 55 ) 56 57 def test_reputation_upper_limit(self): 58 """test reputation upper limit""" 59 Reputation.objects.create(identifier=self.username, ip=self.ip) 60 update_score(self.request, identifier=self.username, amount=1000) 61 self.assertEqual( 62 Reputation.objects.get(identifier=self.username).score, DEFAULT_REPUTATION_UPPER_LIMIT 63 ) 64 65 def test_policy(self): 66 """Test Policy""" 67 request = PolicyRequest(user=self.user) 68 policy: ReputationPolicy = ReputationPolicy.objects.create( 69 name="reputation-test", threshold=0 70 ) 71 self.assertTrue(policy.passes(request).passing) 72 73 def test_api(self): 74 """Test API Validation""" 75 no_toggle = ReputationPolicySerializer(data={"name": generate_id(), "threshold": -5}) 76 self.assertFalse(no_toggle.is_valid())
class
TestReputationPolicy(django.test.testcases.TestCase):
17class TestReputationPolicy(TestCase): 18 """test reputation signals and policy""" 19 20 def setUp(self): 21 self.request_factory = RequestFactory() 22 self.request = self.request_factory.get("/") 23 self.ip = "127.0.0.1" 24 self.username = "username" 25 self.password = generate_id() 26 # We need a user for the one-to-one in userreputation 27 self.user = User.objects.create(username=self.username) 28 self.user.set_password(self.password) 29 self.backends = [BACKEND_INBUILT] 30 31 def test_ip_reputation(self): 32 """test IP reputation""" 33 # Trigger negative reputation 34 authenticate(self.request, self.backends, username=self.username, password=self.username) 35 self.assertEqual(Reputation.objects.get(ip=self.ip).score, -1) 36 37 def test_user_reputation(self): 38 """test User reputation""" 39 # Trigger negative reputation 40 authenticate(self.request, self.backends, username=self.username, password=self.username) 41 self.assertEqual(Reputation.objects.get(identifier=self.username).score, -1) 42 43 def test_update_reputation(self): 44 """test reputation update""" 45 Reputation.objects.create(identifier=self.username, ip=self.ip, score=4) 46 # Trigger negative reputation 47 authenticate(self.request, self.backends, username=self.username, password=self.username) 48 self.assertEqual(Reputation.objects.get(identifier=self.username).score, 3) 49 50 def test_reputation_lower_limit(self): 51 """test reputation lower limit""" 52 Reputation.objects.create(identifier=self.username, ip=self.ip) 53 update_score(self.request, identifier=self.username, amount=-1000) 54 self.assertEqual( 55 Reputation.objects.get(identifier=self.username).score, DEFAULT_REPUTATION_LOWER_LIMIT 56 ) 57 58 def test_reputation_upper_limit(self): 59 """test reputation upper limit""" 60 Reputation.objects.create(identifier=self.username, ip=self.ip) 61 update_score(self.request, identifier=self.username, amount=1000) 62 self.assertEqual( 63 Reputation.objects.get(identifier=self.username).score, DEFAULT_REPUTATION_UPPER_LIMIT 64 ) 65 66 def test_policy(self): 67 """Test Policy""" 68 request = PolicyRequest(user=self.user) 69 policy: ReputationPolicy = ReputationPolicy.objects.create( 70 name="reputation-test", threshold=0 71 ) 72 self.assertTrue(policy.passes(request).passing) 73 74 def test_api(self): 75 """Test API Validation""" 76 no_toggle = ReputationPolicySerializer(data={"name": generate_id(), "threshold": -5}) 77 self.assertFalse(no_toggle.is_valid())
test reputation signals and policy
def
setUp(self):
20 def setUp(self): 21 self.request_factory = RequestFactory() 22 self.request = self.request_factory.get("/") 23 self.ip = "127.0.0.1" 24 self.username = "username" 25 self.password = generate_id() 26 # We need a user for the one-to-one in userreputation 27 self.user = User.objects.create(username=self.username) 28 self.user.set_password(self.password) 29 self.backends = [BACKEND_INBUILT]
Hook method for setting up the test fixture before exercising it.
def
test_ip_reputation(self):
31 def test_ip_reputation(self): 32 """test IP reputation""" 33 # Trigger negative reputation 34 authenticate(self.request, self.backends, username=self.username, password=self.username) 35 self.assertEqual(Reputation.objects.get(ip=self.ip).score, -1)
test IP reputation
def
test_user_reputation(self):
37 def test_user_reputation(self): 38 """test User reputation""" 39 # Trigger negative reputation 40 authenticate(self.request, self.backends, username=self.username, password=self.username) 41 self.assertEqual(Reputation.objects.get(identifier=self.username).score, -1)
test User reputation
def
test_update_reputation(self):
43 def test_update_reputation(self): 44 """test reputation update""" 45 Reputation.objects.create(identifier=self.username, ip=self.ip, score=4) 46 # Trigger negative reputation 47 authenticate(self.request, self.backends, username=self.username, password=self.username) 48 self.assertEqual(Reputation.objects.get(identifier=self.username).score, 3)
test reputation update
def
test_reputation_lower_limit(self):
50 def test_reputation_lower_limit(self): 51 """test reputation lower limit""" 52 Reputation.objects.create(identifier=self.username, ip=self.ip) 53 update_score(self.request, identifier=self.username, amount=-1000) 54 self.assertEqual( 55 Reputation.objects.get(identifier=self.username).score, DEFAULT_REPUTATION_LOWER_LIMIT 56 )
test reputation lower limit
def
test_reputation_upper_limit(self):
58 def test_reputation_upper_limit(self): 59 """test reputation upper limit""" 60 Reputation.objects.create(identifier=self.username, ip=self.ip) 61 update_score(self.request, identifier=self.username, amount=1000) 62 self.assertEqual( 63 Reputation.objects.get(identifier=self.username).score, DEFAULT_REPUTATION_UPPER_LIMIT 64 )
test reputation upper limit