diff --git a/taiga/hooks/bitbucket/api.py b/taiga/hooks/bitbucket/api.py index d1674e45..c88ae779 100644 --- a/taiga/hooks/bitbucket/api.py +++ b/taiga/hooks/bitbucket/api.py @@ -30,6 +30,7 @@ from ..exceptions import ActionSyntaxException from urllib.parse import parse_qs from ipware.ip import get_real_ip + class BitBucketViewSet(BaseWebhookApiViewSet): event_hook_classes = { "push": event_hooks.PushEventHook, diff --git a/taiga/hooks/gitlab/api.py b/taiga/hooks/gitlab/api.py index 384f5daf..a271ff6b 100644 --- a/taiga/hooks/gitlab/api.py +++ b/taiga/hooks/gitlab/api.py @@ -16,6 +16,7 @@ from rest_framework.response import Response from django.utils.translation import ugettext_lazy as _ +from django.conf import settings from taiga.base.api.viewsets import GenericViewSet from taiga.base import exceptions as exc @@ -25,6 +26,8 @@ from taiga.hooks.api import BaseWebhookApiViewSet from . import event_hooks +from ipware.ip import get_real_ip + class GitLabViewSet(BaseWebhookApiViewSet): event_hook_classes = { @@ -48,9 +51,9 @@ class GitLabViewSet(BaseWebhookApiViewSet): if not project_secret: return False - valid_origin_ips = project.modules_config.config.get("bitbucket", {}).get("valid_origin_ips", settings.GITLAB_VALID_ORIGIN_IPS) + valid_origin_ips = project.modules_config.config.get("gitlab", {}).get("valid_origin_ips", settings.GITLAB_VALID_ORIGIN_IPS) origin_ip = get_real_ip(request) - if not origin_ip or not origin_ip in valid_origin_ips: + if not origin_ip or origin_ip not in valid_origin_ips: return False return project_secret == secret_key diff --git a/taiga/hooks/gitlab/services.py b/taiga/hooks/gitlab/services.py index 2ddd1937..2d99969a 100644 --- a/taiga/hooks/gitlab/services.py +++ b/taiga/hooks/gitlab/services.py @@ -17,6 +17,7 @@ import uuid from django.core.urlresolvers import reverse +from django.conf import settings from taiga.users.models import User from taiga.base.utils.urls import get_absolute_url @@ -28,7 +29,7 @@ def get_or_generate_config(project): g_config = project.modules_config.config["gitlab"] else: g_config = { - "secret": uuid.uuid4().hex + "secret": uuid.uuid4().hex, "valid_origin_ips": settings.GITLAB_VALID_ORIGIN_IPS, } diff --git a/tests/integration/test_hooks_gitlab.py b/tests/integration/test_hooks_gitlab.py index f8083676..e0c7b98a 100644 --- a/tests/integration/test_hooks_gitlab.py +++ b/tests/integration/test_hooks_gitlab.py @@ -42,14 +42,18 @@ def test_ok_signature(client): project=f.ProjectFactory() f.ProjectModulesConfigFactory(project=project, config={ "gitlab": { - "secret": "tpnIwJDz4e" + "secret": "tpnIwJDz4e", + "valid_origin_ips": ["111.111.111.111"], } }) url = reverse("gitlab-hook-list") url = "{}?project={}&key={}".format(url, project.id, "tpnIwJDz4e") data = {"test:": "data"} - response = client.post(url, json.dumps(data), content_type="application/json") + response = client.post(url, + json.dumps(data), + content_type="application/json", + REMOTE_ADDR="111.111.111.111") assert response.status_code == 200