Ejemplo n.º 1
0
def zone_write(request):
    if request.method == 'POST':
        dns_zone_id = request.data.get('dns_zone_id', 0)

        dns_reload = request.data.get('reload', 0)
        dns_reload = True if dns_reload else False

        dns_backup = request.data.get('backup', 0)
        dns_backup = True if dns_backup else False

        force = 1
        owner = 0
        if is_dba(request):
            owner = 3
            force = 0

        try:
            model = DnsZone.objects.get(id=dns_zone_id)
        except DnsZone.DoesNotExist:
            return Response('Zone文件不存在,可能已经删除',
                            status=status.HTTP_404_NOT_FOUND)

        zone = Zone(model)
        zone.owner = owner
        zone.user = request.user.username
        try:
            zone.validate(dns_reload, dns_backup, force=force)
        except ZoneException as e:
            response = Response(str(e),
                                status=status.HTTP_500_INTERNAL_SERVER_ERROR)
        else:
            response = Response('生效Zone文件成功', status=status.HTTP_200_OK)
        return response
Ejemplo n.º 2
0
 def get_queryset(self):
     queryset = self.queryset
     if is_dba(self.request):
         owner = 3  # dns_owner表:DB管理员owner字段值
         items = DnsOwner.objects.filter(owner=owner)
         zone_ids = set([item.dns_zone_id for item in items])
         queryset = queryset.filter(id__in=zone_ids)
     return queryset
Ejemplo n.º 3
0
    def get_queryset(self):
        queryset = self.queryset
        request = self.request

        dns_zone_id = request.GET.get('dns_zone_id', 0)

        owner = None
        if is_dba(request):  # DB管理员所属组
            owner = 3
        # owner = 3  # debug_fxc

        if owner:
            queryset = queryset.filter(owner=owner)
        queryset = queryset.filter(dns_zone_id=dns_zone_id)
        return queryset
Ejemplo n.º 4
0
def record_list(request):
    if request.method == 'GET':
        dns_zone_id = request.GET.get('dns_zone_id', 0)

        owner = None
        if is_dba(request):  # DB管理员所属组
            owner = 3
        # owner = 3  # debug
        search = request.GET.get('search', '').strip()

        try:
            model = DnsZone.objects.get(id=dns_zone_id)
        except DnsZone.DoesNotExist:
            return Response('Zone文件不存在', status=status.HTTP_404_NOT_FOUND)

        zone = Zone(model)
        if owner is not None:
            zone.owner = owner
            records = zone.get_records(search, whole=False)
        else:
            records = zone.get_records(search)

        id_ = request.GET.get('id', None)
        id_ = int(id_) if id_ and id_.isdigit() else None
        if id_ is not None:
            result = None
            for record in records:
                if record['id'] == id_:
                    result = record
                    break
            if result is not None:
                return Response(result, status=status.HTTP_200_OK)
            else:
                # 可能有问题!!!!!
                return Response('记录不存在,可能已被删除',
                                status=status.HTTP_404_NOT_FOUND)
        else:
            return Response({'count': len(records), 'results': records})
Ejemplo n.º 5
0
def history(request):
    if request.method == 'GET':
        req = request.REQUEST
        limit = req.get('limit', 10)
        zone_id = req.get('dns_zone_id', 0)

        owner = None
        if is_dba(request):
            owner = 3

        try:
            model = DnsZone.objects.get(id=zone_id)
        except DnsZone.DoesNotExist:
            return Response('Zone文件不存在,可能已经删除' + str(zone_id),
                            status=status.HTTP_404_NOT_FOUND)

        zone = Zone(model)
        if owner is None:
            items = zone.get_history(limit=limit)
        else:
            zone.owner = owner
            items = zone.get_history(limit=limit, whole=False)
        lists = []
        for item in items:
            old_data = item['old_data'] or {}
            new_data = item['new_data'] or {}
            old_domain = old_data.get('domain', '')
            old_ttl = old_data.get('ttl', '')
            old_rrtype = old_data.get('rrtype', '')
            old_rrdata = old_data.get('rrdata', '')
            new_domain = new_data.get('domain', '')
            new_ttl = new_data.get('ttl', '')
            new_rrtype = new_data.get('rrtype', '')
            new_rrdata = new_data.get('rrdata', '')
            diff = ''
            if old_domain != new_domain:
                diff += '域名: {0}\t=>\t{1}\n'.format(old_domain, new_domain)
            if old_ttl != new_ttl:
                diff += 'TTL: {0}\t=>\t{1}\n'.format(old_ttl, new_ttl)
            if old_rrtype != new_rrtype:
                diff += '类型: {0}\t=>\t{1}\n'.format(old_rrtype, new_rrtype)
            if old_rrdata != new_rrdata:
                diff += '值: {0}\t=>\t{1}\n'.format(old_rrdata, new_rrdata)
            lists.append({
                'id': item['id'],
                'dns_zone_id': item['dns_zone_id'],
                'dns_record_id': item['dns_record_id'],
                'old_domain': old_domain,
                'new_domain': new_domain,
                'action': item['action'],
                'username': item['username'],
                'ctime': item['ctime_date'],
                'stamp': stamp2str(item['ctime'], '%Y%m%d%H%M'),
                'diff': diff
            })

        return Response({
            'results': lists,
            'count': len(lists)
        },
                        status=status.HTTP_200_OK)