def destroy(self, request, pk, format=None): """ Delete object """ try: try: obj = self.model.objects.get(pk=pk) except ValueError: return Response( status=status.HTTP_400_BAD_REQUEST, data={"extra": "Invalid id"} ) except self.model.DoesNotExist: return Response(status=status.HTTP_204_NO_CONTENT) if check_permissions(request.user, obj, "d"): with reversion.create_revision(): if request.user: reversion.set_user(request.user) obj.delete() return Response(status=status.HTTP_204_NO_CONTENT) else: return Response(status=status.HTTP_403_FORBIDDEN) except ProtectedAction as exc: exc_message = f"{exc} - " + _( "Please contact {} to help with the deletion of this object" ).format(settings.DEFAULT_FROM_EMAIL) ticket_queue_deletion_prevented(request.user, exc.protected_object) return Response( status=status.HTTP_403_FORBIDDEN, data={"detail": exc_message} ) finally: self.get_serializer().finalize_delete(request)
def callback(request, **kwargs): org_id = request.POST.get("org_id", request.GET.get("org_id")) if not org_id: return JsonResponse({}, status=400) try: org = Organization.objects.get(id=org_id) if not check_permissions(request.user, org.grainy_namespace_manage, "u"): return JsonResponse({}, status=403) kwargs["org"] = org return fnc(request, **kwargs) except Organization.DoesNotExist: return JsonResponse( {"non_field_errors": [_("Invalid organization specified")]}, status=400 )
def view_import_net_ixf_postmortem(request, net_id): # check if request was blocked by rate limiting was_limited = getattr(request, "limited", False) if was_limited: return error_response( _("Please wait a bit before requesting " "another IX-F import postmortem."), status=400, ) # load net try: net = Network.objects.get(id=net_id, status="ok") except Network.DoesNotExist: return error_response(_("Network not found"), status=404) if not check_permissions(request.user, net, "u"): return error_response(_("Permission denied"), status=403) # make sure limit is within bounds and a valid number try: limit = int(request.GET.get("limit", 25)) except: limit = 25 errors = [] if limit < 1: limit = 1 elif limit > settings.IXF_POSTMORTEM_LIMIT: errors.append( _("Postmortem length cannot exceed {} entries").format( settings.IXF_POSTMORTEM_LIMIT)) post_mortem = ixf.PostMortem() log = post_mortem.generate(net.asn, limit=limit) return pretty_response({"data": log, "non_field_errors": errors})
def view_import_net_ixf_preview(request, net_id): # check if request was blocked by rate limiting was_limited = getattr(request, "limited", False) if was_limited: return error_response( _("Please wait a bit before requesting " "another ixf import preview."), status=400, ) try: net = Network.objects.get(id=net_id, status="ok") except Network.DoesNotExist: return error_response(_("Network not found"), status=404) if not check_permissions(request.user, net, "u"): return error_response(_("Permission denied"), status=403) total_log = {"data": [], "errors": []} for ixlan in net.ixlan_set_ixf_enabled: importer = ixf.Importer() importer.cache_only = True success = importer.update(ixlan, asn=net.asn, save=False) # strip suggestions log_data = [ i for i in importer.log["data"] if not "suggest-" in i["action"] ] total_log["data"].extend(log_data) total_log["errors"].extend([ f"{ixlan.ix.name}({ixlan.id}): {err}" for err in importer.log["errors"] ]) return pretty_response(total_log)
def view_import_ixlan_ixf_preview(request, ixlan_id): # check if request was blocked by rate limiting was_limited = getattr(request, "limited", False) if was_limited: return error_response( _("Please wait a bit before requesting " "another ixf import preview."), status=400, ) try: ixlan = IXLan.objects.get(id=ixlan_id) except IXLan.DoesNotExist: return error_response(_("Ixlan not found"), status=404) if not check_permissions(request.user, ixlan, "u"): return error_response(_("Permission denied"), status=403) importer = ixf.Importer() importer.update(ixlan, save=False) return pretty_response(importer.log)