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"""
 | 
			
		||||
from django.utils.translation import gettext_lazy as _
 | 
			
		||||
from rest_framework import mixins
 | 
			
		||||
from rest_framework.exceptions import ValidationError
 | 
			
		||||
from rest_framework.serializers import ModelSerializer
 | 
			
		||||
from rest_framework.viewsets import GenericViewSet, ModelViewSet
 | 
			
		||||
 | 
			
		||||
@ -11,6 +13,11 @@ from authentik.policies.reputation.models import Reputation, ReputationPolicy
 | 
			
		||||
class ReputationPolicySerializer(PolicySerializer):
 | 
			
		||||
    """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:
 | 
			
		||||
        model = ReputationPolicy
 | 
			
		||||
        fields = PolicySerializer.Meta.fields + [
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,8 @@ from django.core.cache import cache
 | 
			
		||||
from django.test import RequestFactory, TestCase
 | 
			
		||||
 | 
			
		||||
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.tasks import save_reputation
 | 
			
		||||
from authentik.policies.types import PolicyRequest
 | 
			
		||||
@ -61,3 +63,8 @@ class TestReputationPolicy(TestCase):
 | 
			
		||||
            name="reputation-test", threshold=0
 | 
			
		||||
        )
 | 
			
		||||
        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
 | 
			
		||||
                                class="pf-c-switch__input"
 | 
			
		||||
                                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-icon">
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user