1"""GeoIP Policy API Views""" 2 3fromdjango_countriesimportcountries 4fromdjango_countries.serializer_fieldsimportCountryField 5fromdjango_countries.serializersimportCountryFieldMixin 6fromrest_frameworkimportserializers 7fromrest_framework.genericsimportListAPIView 8fromrest_framework.permissionsimportAllowAny 9fromrest_framework.viewsetsimportModelViewSet1011fromauthentik.core.api.used_byimportUsedByMixin12fromauthentik.policies.api.policiesimportPolicySerializer13fromauthentik.policies.geoip.modelsimportGeoIPPolicy14fromauthentik.policies.geoip.serializer_fieldsimportDetailedCountryField151617classDetailedCountrySerializer(serializers.Serializer):18code=CountryField()19name=serializers.CharField()202122classISO3166View(ListAPIView):23"""Get all countries in ISO-3166-1"""2425permission_classes=[AllowAny]26queryset=[{"code":code,"name":name}for(code,name)incountries]27serializer_class=DetailedCountrySerializer28filter_backends=[]29pagination_class=None303132classGeoIPPolicySerializer(CountryFieldMixin,PolicySerializer):33"""GeoIP Policy Serializer"""3435countries_obj=serializers.ListField(36child=DetailedCountryField(),source="countries",read_only=True37)3839classMeta:40model=GeoIPPolicy41fields=PolicySerializer.Meta.fields+[42"asns",43"countries",44"countries_obj",45"check_history_distance",46"history_max_distance_km",47"distance_tolerance_km",48"history_login_count",49"check_impossible_travel",50"impossible_tolerance_km",51]525354classGeoIPPolicyViewSet(UsedByMixin,ModelViewSet):55"""GeoIP Viewset"""5657queryset=GeoIPPolicy.objects.all()58serializer_class=GeoIPPolicySerializer59filterset_fields=["name"]60ordering=["name"]61search_fields=["name"]
The BaseSerializer class provides a minimal class which may be used
for writing custom serializer implementations.
Note that we strongly restrict the ordering of operations/properties
that may be used on the serializer in order to enforce correct usage.
In particular, if a data= argument is passed then:
.is_valid() - Available.
.initial_data - Available.
.validated_data - Only available after calling is_valid()
.errors - Only available after calling is_valid()
.data - Only available after calling is_valid()
If a data= argument is not passed then:
.is_valid() - Not available.
.initial_data - Not available.
.validated_data - Not available.
.errors - Not available.
.data - Available.
23classISO3166View(ListAPIView):24"""Get all countries in ISO-3166-1"""2526permission_classes=[AllowAny]27queryset=[{"code":code,"name":name}for(code,name)incountries]28serializer_class=DetailedCountrySerializer29filter_backends=[]30pagination_class=None