mirror of
https://github.com/taigaio/taiga-back
synced 2025-10-06 00:02:52 +02:00
44 lines
1.4 KiB
Python
44 lines
1.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
#
|
|
# Copyright (c) 2021-present Kaleidos Ventures SL
|
|
|
|
from taiga.hooks.api import BaseWebhookApiViewSet
|
|
|
|
from . import event_hooks
|
|
|
|
import hmac
|
|
import hashlib
|
|
|
|
|
|
class GogsViewSet(BaseWebhookApiViewSet):
|
|
event_hook_classes = {
|
|
"push": event_hooks.PushEventHook
|
|
}
|
|
|
|
def _validate_signature(self, project, request):
|
|
if not hasattr(project, "modules_config"):
|
|
return False
|
|
|
|
if project.modules_config.config is None:
|
|
return False
|
|
|
|
secret = project.modules_config.config.get("gogs", {}).get("secret", None)
|
|
if secret is None:
|
|
return False
|
|
|
|
signature = request.headers.get("x-gogs-signature", None)
|
|
if not signature: # Old format signature support (before 0.11 version)
|
|
payload = self._get_payload(request)
|
|
return payload.get('secret', None) == secret
|
|
|
|
secret = project.modules_config.config.get("gogs", {}).get("secret", "")
|
|
secret = bytes(secret.encode("utf-8"))
|
|
mac = hmac.new(secret, msg=request.body, digestmod=hashlib.sha256)
|
|
return hmac.compare_digest(mac.hexdigest(), signature)
|
|
|
|
def _get_event_name(self, request):
|
|
return "push"
|