Changeset View
Changeset View
Standalone View
Standalone View
swh/web/add_forge_now/views.py
# Copyright (C) 2022 The Software Heritage developers | # Copyright (C) 2022 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU Affero General Public License version 3, or any later version | # License: GNU Affero General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
from typing import Any, Dict, List | from typing import Any, Dict, List | ||||
from django.conf import settings | |||||
from django.conf.urls import url | from django.conf.urls import url | ||||
from django.contrib.auth.decorators import user_passes_test | |||||
from django.core.paginator import Paginator | from django.core.paginator import Paginator | ||||
from django.db.models import Q | from django.db.models import Q | ||||
from django.http.request import HttpRequest | from django.http.request import HttpRequest | ||||
from django.http.response import HttpResponse, JsonResponse | from django.http.response import HttpResponse, JsonResponse | ||||
from django.shortcuts import render | from django.shortcuts import render | ||||
from swh.web.add_forge_now.models import Request as AddForgeRequest | from swh.web.add_forge_now.models import Request as AddForgeRequest | ||||
from swh.web.add_forge_now.models import RequestHistory | |||||
from swh.web.api.views.add_forge_now import ( | from swh.web.api.views.add_forge_now import ( | ||||
AddForgeNowRequestPublicSerializer, | AddForgeNowRequestPublicSerializer, | ||||
AddForgeNowRequestSerializer, | AddForgeNowRequestSerializer, | ||||
) | ) | ||||
from swh.web.common.utils import has_add_forge_now_permission | from swh.web.common.utils import has_add_forge_now_permission | ||||
def add_forge_request_list_datatables(request: HttpRequest) -> HttpResponse: | def add_forge_request_list_datatables(request: HttpRequest) -> HttpResponse: | ||||
▲ Show 20 Lines • Show All 85 Lines • ▼ Show 20 Lines | def create_request_help(request): | ||||
"""View to explain 'add_forge_now'.""" | """View to explain 'add_forge_now'.""" | ||||
return render( | return render( | ||||
request, | request, | ||||
"add_forge_now/help.html", | "add_forge_now/help.html", | ||||
) | ) | ||||
@user_passes_test( | |||||
has_add_forge_now_permission, | |||||
redirect_field_name="next_path", | |||||
login_url=settings.LOGIN_URL, | |||||
) | |||||
def create_request_message_source(request: HttpRequest, id: int) -> HttpResponse: | |||||
"""View to retrieve the message source for a given request history entry""" | |||||
try: | |||||
history_entry = RequestHistory.objects.select_related("request").get( | |||||
pk=id, message_source__isnull=False | |||||
) | |||||
assert history_entry.message_source is not None | |||||
except RequestHistory.DoesNotExist: | |||||
return HttpResponse(status=404) | |||||
response = HttpResponse( | |||||
bytes(history_entry.message_source), content_type="text/email" | |||||
) | |||||
filename = f"add-forge-now-{history_entry.request.forge_domain}-message{id}.eml" | |||||
response["Content-Disposition"] = f'attachment; filename="{filename}"' | |||||
return response | |||||
urlpatterns = [ | urlpatterns = [ | ||||
url( | url( | ||||
r"^add-forge/request/list/datatables/$", | r"^add-forge/request/list/datatables/$", | ||||
add_forge_request_list_datatables, | add_forge_request_list_datatables, | ||||
name="add-forge-request-list-datatables", | name="add-forge-request-list-datatables", | ||||
), | ), | ||||
url(r"^add-forge/request/create/$", create_request_create, name="forge-add-create"), | url(r"^add-forge/request/create/$", create_request_create, name="forge-add-create"), | ||||
url(r"^add-forge/request/list/$", create_request_list, name="forge-add-list"), | url(r"^add-forge/request/list/$", create_request_list, name="forge-add-list"), | ||||
url( | |||||
r"^add-forge/request/message-source/(?P<id>\d+)/$", | |||||
create_request_message_source, | |||||
name="forge-add-message-source", | |||||
), | |||||
url(r"^add-forge/request/help/$", create_request_help, name="forge-add-help"), | url(r"^add-forge/request/help/$", create_request_help, name="forge-add-help"), | ||||
] | ] |