예제 #1
0
    def update_record(self):
        if self.new_record == self.old_record:
            return

        if self.new_record['rtype'] == self.old_record['rtype'] and \
                self.new_record['name'] == self.old_record['name']:
            pdns().update_record(
                zone=self.zone_name,
                name=self.old_record['name'],
                rtype=self.old_record['rtype'],
                old_content=self.old_record['content'],
                new_ttl=self.new_record['ttl'],
                new_content=self.new_record['content'],
            )
            return

        try:
            self._delete(self.old_record)
        except PDNSError as e:
            self.add_error(None, _('Could not delete old record.') + ' ' + _('PowerDNS error: {}').format(e.message))
            return

        try:
            self._create(self.new_record)
        except PDNSError as e_new:
            self.add_error(None, _('Could not create new record.') + ' ' + _('PowerDNS error: {}').format(e_new.message))

            try:
                self._create(self.old_record)
            except PDNSError as e:
                self.add_error(None, _('Could not re-create old record; it may be missing now.') + ' ' + _('PowerDNS error: {}').format(e.message))
                return
예제 #2
0
 def delete_entity(self, rr):
     # permission check is done based on kwarg, so make sure we use the same for deletion.
     # even without this check the delete would eventually fail because the client tries
     # to delete "www.example.com." out of zone "example.org.", which only makes sense
     # for every special constellations (e.g. "customer.com.internal.proxy").
     if rr['zone'] != self.kwargs['zone']:
         raise SuspiciousOperation('zone name in kwargs does not match zone name in payload.')
     pdns().delete_record(rr['zone'], rr['name'], rr['rtype'], rr['content'])
예제 #3
0
 def create_record(self):
     try:
         pdns().create_record(
             zone=self.zone_name,
             name=self.cleaned_data['name'],
             rtype=self.cleaned_data['rtype'],
             ttl=self.cleaned_data['ttl'],
             content=self.cleaned_data['content'],
         )
     except PDNSError as e:
         self.add_error(None, _('PowerDNS error: {}').format(e.message))
예제 #4
0
파일: views.py 프로젝트: Nurtic-Vibe/dino
    def create_zone(self):
        try:
            pdns().create_zone(
                name=self.cleaned_data['name'],
                kind=settings.ZONE_DEFAULT_KIND,
                nameservers=settings.ZONE_DEFAULT_NAMESERVERS,
            )

            zone = Zone.objects.create(name=self.cleaned_data['name'])
            for tenant in self.cleaned_data['tenants']:
                tenant.zones.add(zone)
        except PDNSError as e:
            self.add_error(None, _('PowerDNS error: {}').format(e.message))
예제 #5
0
파일: views.py 프로젝트: Nurtic-Vibe/dino
    def filtered_records(self):
        q = self.request.GET.get('q')

        try:
            records = pdns().get_records(self.zone_name)
        except PDNSNotFoundException:
            raise Http404()

        if q:
            q = q.lower()
            is_apex_search = (q == '@')

            return [
                r for r in records
                if q.upper() == r['rtype'] or q in r['name'].lower() or (
                    is_apex_search and r['name'] == self.zone_name)
            ]
        else:
            return records
예제 #6
0
 def _refresh_zones(self):
     if not self._zones_refreshed:
         # TODO: doing this every time the list is loaded is a bad idea
         Zone.import_from_powerdns(pdns().get_zones())
         self._zones_refreshed = True
예제 #7
0
 def _delete(self, record):
     record = record.copy()
     record.pop('ttl', None)
     pdns().delete_record(zone=self.zone_name, **record)
예제 #8
0
 def _create(self, record):
     pdns().create_record(zone=self.zone_name, **record)
예제 #9
0
    def delete_entity(self, pk):
        if not self.request.user.has_perm(self.permission_required, pk):
            raise PermissionDenied()

        pdns().delete_zone(pk)
        Zone.objects.filter(name=pk).delete()