authentik.policies.reputation.api
Reputation policy API Views
1"""Reputation policy API Views""" 2 3from django.utils.translation import gettext_lazy as _ 4from django_filters.filters import BaseInFilter, CharFilter 5from django_filters.filterset import FilterSet 6from rest_framework import mixins 7from rest_framework.exceptions import ValidationError 8from rest_framework.viewsets import GenericViewSet, ModelViewSet 9 10from authentik.core.api.used_by import UsedByMixin 11from authentik.core.api.utils import ModelSerializer 12from authentik.policies.api.policies import PolicySerializer 13from authentik.policies.reputation.models import Reputation, ReputationPolicy 14 15 16class CharInFilter(BaseInFilter, CharFilter): 17 pass 18 19 20class ReputationPolicySerializer(PolicySerializer): 21 """Reputation Policy Serializer""" 22 23 def validate(self, attrs: dict) -> dict: 24 if not attrs.get("check_ip", False) and not attrs.get("check_username", False): 25 raise ValidationError(_("Either IP or Username must be checked")) 26 return super().validate(attrs) 27 28 class Meta: 29 model = ReputationPolicy 30 fields = PolicySerializer.Meta.fields + [ 31 "check_ip", 32 "check_username", 33 "threshold", 34 ] 35 36 37class ReputationPolicyViewSet(UsedByMixin, ModelViewSet): 38 """Reputation Policy Viewset""" 39 40 queryset = ReputationPolicy.objects.all() 41 serializer_class = ReputationPolicySerializer 42 filterset_fields = "__all__" 43 search_fields = ["name", "threshold"] 44 ordering = ["name"] 45 46 47class ReputationFilter(FilterSet): 48 """Filter for reputation""" 49 50 identifier_in = CharInFilter(field_name="identifier", lookup_expr="in") 51 52 class Meta: 53 model = Reputation 54 fields = ["identifier", "ip", "score"] 55 56 57class ReputationSerializer(ModelSerializer): 58 """Reputation Serializer""" 59 60 class Meta: 61 model = Reputation 62 fields = [ 63 "pk", 64 "identifier", 65 "ip", 66 "ip_geo_data", 67 "ip_asn_data", 68 "score", 69 "updated", 70 ] 71 72 73class ReputationViewSet( 74 mixins.RetrieveModelMixin, 75 mixins.DestroyModelMixin, 76 UsedByMixin, 77 mixins.ListModelMixin, 78 GenericViewSet, 79): 80 """Reputation Viewset""" 81 82 queryset = Reputation.objects.including_expired().all() 83 serializer_class = ReputationSerializer 84 search_fields = ["identifier", "ip", "score"] 85 filterset_class = ReputationFilter 86 ordering = ["ip"]
class
CharInFilter(django_filters.filters.BaseInFilter, django_filters.filters.CharFilter):
Base class for CSV type filters, such as IN and RANGE.
21class ReputationPolicySerializer(PolicySerializer): 22 """Reputation Policy Serializer""" 23 24 def validate(self, attrs: dict) -> dict: 25 if not attrs.get("check_ip", False) and not attrs.get("check_username", False): 26 raise ValidationError(_("Either IP or Username must be checked")) 27 return super().validate(attrs) 28 29 class Meta: 30 model = ReputationPolicy 31 fields = PolicySerializer.Meta.fields + [ 32 "check_ip", 33 "check_username", 34 "threshold", 35 ]
Reputation Policy Serializer
Inherited Members
class
ReputationPolicySerializer.Meta:
29 class Meta: 30 model = ReputationPolicy 31 fields = PolicySerializer.Meta.fields + [ 32 "check_ip", 33 "check_username", 34 "threshold", 35 ]
model =
<class 'authentik.policies.reputation.models.ReputationPolicy'>
class
ReputationPolicyViewSet(authentik.core.api.used_by.UsedByMixin, rest_framework.viewsets.ModelViewSet):
38class ReputationPolicyViewSet(UsedByMixin, ModelViewSet): 39 """Reputation Policy Viewset""" 40 41 queryset = ReputationPolicy.objects.all() 42 serializer_class = ReputationPolicySerializer 43 filterset_fields = "__all__" 44 search_fields = ["name", "threshold"] 45 ordering = ["name"]
Reputation Policy Viewset
serializer_class =
<class 'ReputationPolicySerializer'>
Inherited Members
class
ReputationFilter(django_filters.filterset.FilterSet):
48class ReputationFilter(FilterSet): 49 """Filter for reputation""" 50 51 identifier_in = CharInFilter(field_name="identifier", lookup_expr="in") 52 53 class Meta: 54 model = Reputation 55 fields = ["identifier", "ip", "score"]
Filter for reputation
declared_filters =
OrderedDict({'identifier_in': <CharInFilter object>})
base_filters =
OrderedDict({'identifier': <django_filters.filters.CharFilter object>, 'ip': <django_filters.filters.CharFilter object>, 'score': <django_filters.filters.NumberFilter object>, 'identifier_in': <CharInFilter object>})
class
ReputationFilter.Meta:
model =
<class 'authentik.policies.reputation.models.Reputation'>
58class ReputationSerializer(ModelSerializer): 59 """Reputation Serializer""" 60 61 class Meta: 62 model = Reputation 63 fields = [ 64 "pk", 65 "identifier", 66 "ip", 67 "ip_geo_data", 68 "ip_asn_data", 69 "score", 70 "updated", 71 ]
Reputation Serializer
Inherited Members
class
ReputationSerializer.Meta:
61 class Meta: 62 model = Reputation 63 fields = [ 64 "pk", 65 "identifier", 66 "ip", 67 "ip_geo_data", 68 "ip_asn_data", 69 "score", 70 "updated", 71 ]
model =
<class 'authentik.policies.reputation.models.Reputation'>
class
ReputationViewSet(rest_framework.mixins.RetrieveModelMixin, rest_framework.mixins.DestroyModelMixin, authentik.core.api.used_by.UsedByMixin, rest_framework.mixins.ListModelMixin, rest_framework.viewsets.GenericViewSet):
74class ReputationViewSet( 75 mixins.RetrieveModelMixin, 76 mixins.DestroyModelMixin, 77 UsedByMixin, 78 mixins.ListModelMixin, 79 GenericViewSet, 80): 81 """Reputation Viewset""" 82 83 queryset = Reputation.objects.including_expired().all() 84 serializer_class = ReputationSerializer 85 search_fields = ["identifier", "ip", "score"] 86 filterset_class = ReputationFilter 87 ordering = ["ip"]
Reputation Viewset
serializer_class =
<class 'ReputationSerializer'>
filterset_class =
<class 'ReputationFilter'>