
* events: add ASN Database reader Signed-off-by: Jens Langhammer <jens@goauthentik.io> * add tests Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix test config generator Signed-off-by: Jens Langhammer <jens@goauthentik.io> * de-duplicate code Signed-off-by: Jens Langhammer <jens@goauthentik.io> * add enrich_context Signed-off-by: Jens Langhammer <jens@goauthentik.io> * rename to context processors? Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix cache Signed-off-by: Jens Langhammer <jens@goauthentik.io> * use config deprecation system, update docs Signed-off-by: Jens Langhammer <jens@goauthentik.io> * update more docs and tests Signed-off-by: Jens Langhammer <jens@goauthentik.io> * add test asn db Signed-off-by: Jens Langhammer <jens@goauthentik.io> * re-build schema with latest versions Signed-off-by: Jens Langhammer <jens@goauthentik.io> --------- Signed-off-by: Jens Langhammer <jens@goauthentik.io>
70 lines
2.0 KiB
Python
70 lines
2.0 KiB
Python
"""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
|
|
|
|
from authentik.core.api.used_by import UsedByMixin
|
|
from authentik.policies.api.policies import PolicySerializer
|
|
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 + [
|
|
"check_ip",
|
|
"check_username",
|
|
"threshold",
|
|
]
|
|
|
|
|
|
class ReputationPolicyViewSet(UsedByMixin, ModelViewSet):
|
|
"""Reputation Policy Viewset"""
|
|
|
|
queryset = ReputationPolicy.objects.all()
|
|
serializer_class = ReputationPolicySerializer
|
|
filterset_fields = "__all__"
|
|
search_fields = ["name", "threshold"]
|
|
ordering = ["name"]
|
|
|
|
|
|
class ReputationSerializer(ModelSerializer):
|
|
"""Reputation Serializer"""
|
|
|
|
class Meta:
|
|
model = Reputation
|
|
fields = [
|
|
"pk",
|
|
"identifier",
|
|
"ip",
|
|
"ip_geo_data",
|
|
"ip_asn_data",
|
|
"score",
|
|
"updated",
|
|
]
|
|
|
|
|
|
class ReputationViewSet(
|
|
mixins.RetrieveModelMixin,
|
|
mixins.DestroyModelMixin,
|
|
UsedByMixin,
|
|
mixins.ListModelMixin,
|
|
GenericViewSet,
|
|
):
|
|
"""Reputation Viewset"""
|
|
|
|
queryset = Reputation.objects.all()
|
|
serializer_class = ReputationSerializer
|
|
search_fields = ["identifier", "ip", "score"]
|
|
filterset_fields = ["identifier", "ip", "score"]
|
|
ordering = ["ip"]
|