From 4baf2971da0ebadbf3894a364cc02e3bc694fd70 Mon Sep 17 00:00:00 2001 From: Matthias Date: Fri, 19 Nov 2021 22:53:22 +0100 Subject: [PATCH] remove webhook apis --- InvenTree/common/api.py | 91 +---------------------------------------- 1 file changed, 1 insertion(+), 90 deletions(-) diff --git a/InvenTree/common/api.py b/InvenTree/common/api.py index f71bf5b958..6dd51bdff1 100644 --- a/InvenTree/common/api.py +++ b/InvenTree/common/api.py @@ -5,101 +5,13 @@ Provides a JSON API for common components. # -*- coding: utf-8 -*- from __future__ import unicode_literals -import json - -from django.http.response import HttpResponse -from django.utils.decorators import method_decorator -from django.urls import path -from django.views.decorators.csrf import csrf_exempt from django.conf.urls import url, include -from rest_framework.views import APIView -from rest_framework.exceptions import NotAcceptable, NotFound from django_filters.rest_framework import DjangoFilterBackend from rest_framework import filters, generics, permissions -from django_q.tasks import async_task import common.models import common.serializers -from InvenTree.helpers import inheritors - - -class CsrfExemptMixin(object): - """ - Exempts the view from CSRF requirements. - """ - - @method_decorator(csrf_exempt) - def dispatch(self, *args, **kwargs): - return super(CsrfExemptMixin, self).dispatch(*args, **kwargs) - - -class WebhookView(CsrfExemptMixin, APIView): - """ - Endpoint for receiving webhooks. - """ - authentication_classes = [] - permission_classes = [] - model_class = common.models.WebhookEndpoint - run_async = False - - def post(self, request, endpoint, *args, **kwargs): - # get webhook definition - self._get_webhook(endpoint, request, *args, **kwargs) - - # check headers - headers = request.headers - try: - payload = json.loads(request.body) - except json.decoder.JSONDecodeError as error: - raise NotAcceptable(error.msg) - - # validate - self.webhook.validate_token(payload, headers, request) - # process data - message = self.webhook.save_data(payload, headers, request) - if self.run_async: - async_task(self._process_payload, message.id) - else: - self._process_result( - self.webhook.process_payload(message, payload, headers), - message, - ) - - # return results - data = self.webhook.get_return(payload, headers, request) - return HttpResponse(data) - - def _process_payload(self, message_id): - message = common.models.WebhookMessage.objects.get(message_id=message_id) - self._process_result( - self.webhook.process_payload(message, message.body, message.header), - message, - ) - - def _process_result(self, result, message): - if result: - message.worked_on = result - message.save() - else: - message.delete() - - def _escalate_object(self, obj): - classes = inheritors(obj.__class__) - for cls in classes: - mdl_name = cls._meta.model_name - if hasattr(obj, mdl_name): - return getattr(obj, mdl_name) - return obj - - def _get_webhook(self, endpoint, request, *args, **kwargs): - try: - webhook = self.model_class.objects.get(endpoint_id=endpoint) - self.webhook = self._escalate_object(webhook) - self.webhook.init(request, *args, **kwargs) - return self.webhook.process_webhook() - except self.model_class.DoesNotExist: - raise NotFound() class SettingsList(generics.ListAPIView): @@ -219,7 +131,6 @@ class UserSettingsDetail(generics.RetrieveUpdateAPIView): common_api_urls = [ - path('webhook//', WebhookView.as_view(), name='api-webhook'), # User settings url(r'^user/', include([ @@ -237,6 +148,6 @@ common_api_urls = [ # Global Settings List url(r'^.*$', GlobalSettingsList.as_view(), name='api-global-setting-list'), - ])), + ])) ]