123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- import django.core.exceptions
- from netfields import rest_framework as netfields_rf
- from rest_framework import serializers
- from desecapi.models import Token, TokenDomainPolicy
- class TokenSerializer(serializers.ModelSerializer):
- allowed_subnets = serializers.ListField(child=netfields_rf.CidrAddressField(), required=False)
- token = serializers.ReadOnlyField(source='plain')
- is_valid = serializers.ReadOnlyField()
- class Meta:
- model = Token
- fields = ('id', 'created', 'last_used', 'max_age', 'max_unused_period', 'name', 'perm_manage_tokens',
- 'allowed_subnets', 'is_valid', 'token',)
- read_only_fields = ('id', 'created', 'last_used', 'token')
- def __init__(self, *args, include_plain=False, **kwargs):
- self.include_plain = include_plain
- return super().__init__(*args, **kwargs)
- def get_fields(self):
- fields = super().get_fields()
- if not self.include_plain:
- fields.pop('token')
- return fields
- class DomainSlugRelatedField(serializers.SlugRelatedField):
- def get_queryset(self):
- return self.context['request'].user.domains
- class TokenDomainPolicySerializer(serializers.ModelSerializer):
- domain = DomainSlugRelatedField(allow_null=True, slug_field='name')
- class Meta:
- model = TokenDomainPolicy
- fields = ('domain', 'perm_dyndns', 'perm_rrsets',)
- def to_internal_value(self, data):
- return {**super().to_internal_value(data),
- 'token': self.context['request'].user.token_set.get(id=self.context['view'].kwargs['token_id'])}
- def save(self, **kwargs):
- try:
- return super().save(**kwargs)
- except django.core.exceptions.ValidationError as exc:
- raise serializers.ValidationError(exc.message_dict, code='precedence')
|