summaryrefslogtreecommitdiff
path: root/checklists/views.py
blob: b7fa6b0ae44b3d2e0140639f669152c3dcceb58d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
from django.contrib.auth.decorators import login_required, permission_required
from django.http import JsonResponse
from django.shortcuts import get_object_or_404, render
from django.views.decorators.cache import never_cache
from markdown import markdown

from releases.models import Release

from .models import (
    BugFixRelease,
    FeatureRelease,
    PreRelease,
    SecurityIssue,
    SecurityRelease,
)


@never_cache
def render_checklist(request, instance):
    raw_markdown = instance.render_to_string(request=request)
    markdown_content = markdown(
        raw_markdown,
        output_format="html",
        extensions=[
            "pymdownx.extra",
            "pymdownx.tasklist",
            "pymdownx.superfences",
            "pymdownx.magiclink",
            "markdown.extensions.fenced_code",
        ],
        extension_configs={
            "pymdownx.tasklist": {
                "custom_checkbox": True,
                "clickable_checkbox": True,
            },
        },
    )
    return render(
        request,
        "checklists/checklist_detail.html",
        {
            "instance": instance,
            "markdown": markdown_content,
            "raw_markdown": raw_markdown,
        },
    )


@never_cache
def release_checklist(request, version):
    release = get_object_or_404(Release, version=version)
    if release.is_pre_release:
        checklist_model = PreRelease
    elif release.is_dot_zero:
        checklist_model = FeatureRelease
    else:
        checklist_model = BugFixRelease
    instance = get_object_or_404(checklist_model, release__version=version)
    return render_checklist(request, instance)


@never_cache
@login_required
@permission_required(
    ["checklists.view_securityrelease", "checklists.view_securityissue"],
    raise_exception=True,
)
def securityrelease_checklist(request, pk):
    instance = get_object_or_404(SecurityRelease, pk=pk)
    return render_checklist(request, instance)


@never_cache
@login_required
@permission_required("checklists.view_securityissue", raise_exception=True)
def cve_json_record(request, cve_id):
    issue = get_object_or_404(SecurityIssue, cve_year_number=cve_id)
    response = JsonResponse(issue.cve_data)
    response["Content-Disposition"] = f'inline; filename="{cve_id}.json"'
    return response