policies/reputation: require either check to be enabled (#6764)
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
This commit is contained in:
		@ -1,5 +1,7 @@
 | 
				
			|||||||
"""Reputation policy API Views"""
 | 
					"""Reputation policy API Views"""
 | 
				
			||||||
 | 
					from django.utils.translation import gettext_lazy as _
 | 
				
			||||||
from rest_framework import mixins
 | 
					from rest_framework import mixins
 | 
				
			||||||
 | 
					from rest_framework.exceptions import ValidationError
 | 
				
			||||||
from rest_framework.serializers import ModelSerializer
 | 
					from rest_framework.serializers import ModelSerializer
 | 
				
			||||||
from rest_framework.viewsets import GenericViewSet, ModelViewSet
 | 
					from rest_framework.viewsets import GenericViewSet, ModelViewSet
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -11,6 +13,11 @@ from authentik.policies.reputation.models import Reputation, ReputationPolicy
 | 
				
			|||||||
class ReputationPolicySerializer(PolicySerializer):
 | 
					class ReputationPolicySerializer(PolicySerializer):
 | 
				
			||||||
    """Reputation Policy Serializer"""
 | 
					    """Reputation Policy Serializer"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def validate(self, attrs: dict) -> dict:
 | 
				
			||||||
 | 
					        if not attrs.get("check_ip", False) and not attrs.get("check_username", False):
 | 
				
			||||||
 | 
					            raise ValidationError(_("Either IP or Username must be checked"))
 | 
				
			||||||
 | 
					        return super().validate(attrs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    class Meta:
 | 
					    class Meta:
 | 
				
			||||||
        model = ReputationPolicy
 | 
					        model = ReputationPolicy
 | 
				
			||||||
        fields = PolicySerializer.Meta.fields + [
 | 
					        fields = PolicySerializer.Meta.fields + [
 | 
				
			||||||
 | 
				
			|||||||
@ -3,6 +3,8 @@ from django.core.cache import cache
 | 
				
			|||||||
from django.test import RequestFactory, TestCase
 | 
					from django.test import RequestFactory, TestCase
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from authentik.core.models import User
 | 
					from authentik.core.models import User
 | 
				
			||||||
 | 
					from authentik.lib.generators import generate_id
 | 
				
			||||||
 | 
					from authentik.policies.reputation.api import ReputationPolicySerializer
 | 
				
			||||||
from authentik.policies.reputation.models import CACHE_KEY_PREFIX, Reputation, ReputationPolicy
 | 
					from authentik.policies.reputation.models import CACHE_KEY_PREFIX, Reputation, ReputationPolicy
 | 
				
			||||||
from authentik.policies.reputation.tasks import save_reputation
 | 
					from authentik.policies.reputation.tasks import save_reputation
 | 
				
			||||||
from authentik.policies.types import PolicyRequest
 | 
					from authentik.policies.types import PolicyRequest
 | 
				
			||||||
@ -61,3 +63,8 @@ class TestReputationPolicy(TestCase):
 | 
				
			|||||||
            name="reputation-test", threshold=0
 | 
					            name="reputation-test", threshold=0
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        self.assertTrue(policy.passes(request).passing)
 | 
					        self.assertTrue(policy.passes(request).passing)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_api(self):
 | 
				
			||||||
 | 
					        """Test API Validation"""
 | 
				
			||||||
 | 
					        no_toggle = ReputationPolicySerializer(data={"name": generate_id(), "threshold": -5})
 | 
				
			||||||
 | 
					        self.assertFalse(no_toggle.is_valid())
 | 
				
			||||||
 | 
				
			|||||||
@ -93,7 +93,7 @@ doesn't pass when either or both of the selected options are equal or above the
 | 
				
			|||||||
                            <input
 | 
					                            <input
 | 
				
			||||||
                                class="pf-c-switch__input"
 | 
					                                class="pf-c-switch__input"
 | 
				
			||||||
                                type="checkbox"
 | 
					                                type="checkbox"
 | 
				
			||||||
                                ?checked=${first(this.instance?.checkIp, false)}
 | 
					                                ?checked=${first(this.instance?.checkIp, true)}
 | 
				
			||||||
                            />
 | 
					                            />
 | 
				
			||||||
                            <span class="pf-c-switch__toggle">
 | 
					                            <span class="pf-c-switch__toggle">
 | 
				
			||||||
                                <span class="pf-c-switch__toggle-icon">
 | 
					                                <span class="pf-c-switch__toggle-icon">
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user