diff --git a/hc/front/tests/test_add_email.py b/hc/front/tests/test_add_email.py index e631ccd4..ee9b1ae4 100644 --- a/hc/front/tests/test_add_email.py +++ b/hc/front/tests/test_add_email.py @@ -8,7 +8,9 @@ from hc.test import BaseTestCase class AddEmailTestCase(BaseTestCase): - url = "/integrations/add_email/" + def setUp(self): + super(AddEmailTestCase, self).setUp() + self.url = "/projects/%s/add_email/" % self.project.code def test_instructions_work(self): self.client.login(username="alice@example.org", password="password") @@ -21,7 +23,7 @@ class AddEmailTestCase(BaseTestCase): self.client.login(username="alice@example.org", password="password") r = self.client.post(self.url, form) - self.assertRedirects(r, "/integrations/") + self.assertRedirects(r, "/projects/%s/integrations/" % self.project.code) c = Channel.objects.get() doc = json.loads(c.value) @@ -77,7 +79,7 @@ class AddEmailTestCase(BaseTestCase): self.client.login(username="alice@example.org", password="password") r = self.client.post(self.url, form) - self.assertRedirects(r, "/integrations/") + self.assertRedirects(r, "/projects/%s/integrations/" % self.project.code) c = Channel.objects.get() doc = json.loads(c.value) @@ -93,7 +95,7 @@ class AddEmailTestCase(BaseTestCase): self.client.login(username="alice@example.org", password="password") r = self.client.post(self.url, form) - self.assertRedirects(r, "/integrations/") + self.assertRedirects(r, "/projects/%s/integrations/" % self.project.code) c = Channel.objects.get() doc = json.loads(c.value) diff --git a/hc/front/urls.py b/hc/front/urls.py index ade96a74..a9379b82 100644 --- a/hc/front/urls.py +++ b/hc/front/urls.py @@ -24,7 +24,6 @@ check_urls = [ channel_urls = [ path("", views.channels, name="hc-channels"), - path("add_email/", views.add_email, name="hc-add-email"), path("add_webhook/", views.add_webhook, name="hc-add-webhook"), path("add_shell/", views.add_shell, name="hc-add-shell"), path("add_pd/", views.add_pd, name="hc-add-pd"), @@ -75,6 +74,8 @@ urlpatterns = [ path("projects//metrics/", views.metrics, name="hc-metrics",), path("checks//", include(check_urls)), path("integrations/", include(channel_urls)), + path("projects//integrations/", views.channels, name="hc-p-channels"), + path("projects//add_email/", views.add_email, name="hc-add-email"), path("docs/", views.serve_doc, name="hc-docs"), path("docs/api/", views.docs_api, name="hc-docs-api"), path("docs/cron/", views.docs_cron, name="hc-docs-cron"), diff --git a/hc/front/views.py b/hc/front/views.py index bb8b5690..962632fa 100644 --- a/hc/front/views.py +++ b/hc/front/views.py @@ -629,11 +629,14 @@ def badges(request, code): @login_required -def channels(request): - - if not request.project: - # This can happen when the user deletes their only project. - return redirect("hc-index") +def channels(request, code=None): + if code: + project = _get_project_for_user(request, code) + else: + project = request.project + if project is None: + # This can happen when the user deletes their only project. + return redirect("hc-index") if request.method == "POST": code = request.POST["channel"] @@ -641,7 +644,7 @@ def channels(request): channel = Channel.objects.get(code=code) except Channel.DoesNotExist: return HttpResponseBadRequest() - if channel.project_id != request.project.id: + if channel.project_id != project.id: return HttpResponseForbidden() new_checks = [] @@ -652,21 +655,21 @@ def channels(request): check = Check.objects.get(code=code) except Check.DoesNotExist: return HttpResponseBadRequest() - if check.project_id != request.project.id: + if check.project_id != project.id: return HttpResponseForbidden() new_checks.append(check) channel.checks.set(new_checks) return redirect("hc-channels") - channels = Channel.objects.filter(project=request.project) + channels = Channel.objects.filter(project=project) channels = channels.order_by("created") channels = channels.annotate(n_checks=Count("checks")) ctx = { "page": "channels", - "project": request.project, - "profile": request.project.owner_profile, + "project": project, + "profile": project.owner_profile, "channels": channels, "enable_pushbullet": settings.PUSHBULLET_CLIENT_ID is not None, "enable_pushover": settings.PUSHOVER_API_TOKEN is not None, @@ -803,11 +806,13 @@ def remove_channel(request, code): @login_required -def add_email(request): +def add_email(request, code): + project = _get_project_for_user(request, code) + if request.method == "POST": form = AddEmailForm(request.POST) if form.is_valid(): - channel = Channel(project=request.project, kind="email") + channel = Channel(project=project, kind="email") channel.value = json.dumps( { "value": form.cleaned_data["value"], @@ -832,13 +837,13 @@ def add_email(request): else: channel.send_verify_link() - return redirect("hc-channels") + return redirect("hc-p-channels", project.code) else: form = AddEmailForm() ctx = { "page": "channels", - "project": request.project, + "project": project, "use_verification": settings.EMAIL_USE_VERIFICATION, "form": form, } diff --git a/templates/base.html b/templates/base.html index 1b2df4c2..132b56b6 100644 --- a/templates/base.html +++ b/templates/base.html @@ -99,7 +99,7 @@ {% with b=project.have_channel_issues %}
  • - + Integrations {% if b %}{% endif %} diff --git a/templates/front/channels.html b/templates/front/channels.html index 3d38d6ac..425f4eab 100644 --- a/templates/front/channels.html +++ b/templates/front/channels.html @@ -179,7 +179,7 @@

    Email

    Get an email message when a check goes up or down.

    - Add Integration + Add Integration
  • diff --git a/templates/integrations/add_email.html b/templates/integrations/add_email.html index 27383dd9..e79f6857 100644 --- a/templates/integrations/add_email.html +++ b/templates/integrations/add_email.html @@ -20,7 +20,7 @@

    Integration Settings

    -
    + {% csrf_token %}