Refactored the create function
parent
3e46b439bf
commit
268bc70a1e
|
@ -45,6 +45,13 @@ class BaseWebhookApiViewSet(GenericViewSet):
|
||||||
except Project.DoesNotExist:
|
except Project.DoesNotExist:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def _get_payload(self, request):
|
||||||
|
try:
|
||||||
|
payload = json.loads(request.body.decode("utf-8"))
|
||||||
|
except ValueError:
|
||||||
|
raise exc.BadRequest(_("The payload is not a valid json"))
|
||||||
|
return payload
|
||||||
|
|
||||||
def _get_event_name(self, request):
|
def _get_event_name(self, request):
|
||||||
raise NotImplemented
|
raise NotImplemented
|
||||||
|
|
||||||
|
@ -58,10 +65,7 @@ class BaseWebhookApiViewSet(GenericViewSet):
|
||||||
|
|
||||||
event_name = self._get_event_name(request)
|
event_name = self._get_event_name(request)
|
||||||
|
|
||||||
try:
|
payload = self._get_payload(request)
|
||||||
payload = json.loads(request.body.decode("utf-8"))
|
|
||||||
except ValueError:
|
|
||||||
raise exc.BadRequest(_("The payload is not a valid json"))
|
|
||||||
|
|
||||||
event_hook_class = self.event_hook_classes.get(event_name, None)
|
event_hook_class = self.event_hook_classes.get(event_name, None)
|
||||||
if event_hook_class is not None:
|
if event_hook_class is not None:
|
||||||
|
|
|
@ -35,31 +35,14 @@ class BitBucketViewSet(BaseWebhookApiViewSet):
|
||||||
"push": event_hooks.PushEventHook,
|
"push": event_hooks.PushEventHook,
|
||||||
}
|
}
|
||||||
|
|
||||||
def create(self, request, *args, **kwargs):
|
def _get_payload(self, request):
|
||||||
project = self._get_project(request)
|
|
||||||
if not project:
|
|
||||||
raise exc.BadRequest(_("The project doesn't exist"))
|
|
||||||
|
|
||||||
if not self._validate_signature(project, request):
|
|
||||||
raise exc.BadRequest(_("Bad signature"))
|
|
||||||
|
|
||||||
event_name = self._get_event_name(request)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
body = parse_qs(request.body.decode("utf-8"), strict_parsing=True)
|
body = parse_qs(request.body.decode("utf-8"), strict_parsing=True)
|
||||||
payload = body["payload"]
|
payload = body["payload"]
|
||||||
except (ValueError, KeyError):
|
except (ValueError, KeyError):
|
||||||
raise exc.BadRequest(_("The payload is not a valid application/x-www-form-urlencoded"))
|
raise exc.BadRequest(_("The payload is not a valid application/x-www-form-urlencoded"))
|
||||||
|
|
||||||
event_hook_class = self.event_hook_classes.get(event_name, None)
|
return payload
|
||||||
if event_hook_class is not None:
|
|
||||||
event_hook = event_hook_class(project, payload)
|
|
||||||
try:
|
|
||||||
event_hook.process_event()
|
|
||||||
except ActionSyntaxException as e:
|
|
||||||
raise exc.BadRequest(e)
|
|
||||||
|
|
||||||
return Response({})
|
|
||||||
|
|
||||||
def _validate_signature(self, project, request):
|
def _validate_signature(self, project, request):
|
||||||
secret_key = request.GET.get("key", None)
|
secret_key = request.GET.get("key", None)
|
||||||
|
|
Loading…
Reference in New Issue