Skip to content

Commit e361ecf

Browse files
feat(api): add DomainSerial serializer and view
1 parent 8713a08 commit e361ecf

File tree

2 files changed

+52
-1
lines changed

2 files changed

+52
-1
lines changed

api/desecapi/serializers/domains.py

+22-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from rest_framework import serializers
44

55
from api import settings
6-
from desecapi.models import Domain, RR_SET_TYPES_AUTOMATIC
6+
from desecapi.models import Domain, DomainSerial, RR_SET_TYPES_AUTOMATIC
77
from desecapi.validators import ReadOnlyOnUpdateValidator
88

99
from .records import RRsetSerializer
@@ -170,3 +170,24 @@ def fqdn(idx):
170170
rrset_list_serializer.save()
171171

172172
return domain
173+
174+
175+
class DomainSerialSerializer(serializers.ModelSerializer):
176+
class Meta:
177+
model = DomainSerializer
178+
fields = (
179+
"created",
180+
"updated",
181+
"domain",
182+
"node",
183+
"serial",
184+
)
185+
read_only_fields = fields
186+
187+
def create(self, validated_data):
188+
# TODO
189+
self.domain.domainserial_set.bulk_create(
190+
[DomainSerial(domain=self.domain, node=node) for node in NODES],
191+
ignore_conflicts=True,
192+
)
193+
return None # TODO

api/desecapi/views/domains.py

+30
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,36 @@ def zonefile(self, request, name=None):
110110
return Response(prefix + instance.zonefile, content_type="text/dns")
111111

112112

113+
class DomainSerialViewSet(
114+
mixins.CreateModelMixin,
115+
mixins.ListModelMixin,
116+
viewsets.GenericViewSet,
117+
):
118+
serializer_class = DomainSerialSerializer
119+
lookup_field = "name"
120+
lookup_value_regex = r"[^/]+"
121+
permission_classes = [
122+
IsAuthenticated,
123+
permissions.MFARequiredIfEnabled,
124+
permissions.IsOwner,
125+
]
126+
127+
@property
128+
def throttle_scope(self):
129+
return (
130+
"dns_api_cheap"
131+
if self.request.method in SAFE_METHODS
132+
else "dns_api_per_domain_expensive"
133+
)
134+
135+
@property
136+
def domain(self):
137+
return self.get_object()
138+
139+
def get_queryset(self):
140+
return self.domain.domainserial_set.all() # TODO
141+
142+
113143
class SerialListView(APIView):
114144
permission_classes = (permissions.IsVPNClient,)
115145
throttle_classes = (

0 commit comments

Comments
 (0)