aboutsummaryrefslogtreecommitdiff
path: root/src/django_pgpmailman/views/list.py
blob: e5a7e8a3e867c4e41c86103033c10118ffc4ec35 (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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# -*- coding: utf-8 -*-
# Copyright (C) 2017 Jan Jancar
#
# This file is a part of the Django Mailman PGP plugin.
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation, either version 3 of the License, or (at your option)
# any later version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
# more details.
#
# You should have received a copy of the GNU General Public License along with
# this program.  If not, see <http://www.gnu.org/licenses/>.

from __future__ import absolute_import, unicode_literals

from django.contrib.auth.decorators import login_required
from django.core.files.base import ContentFile
from django.http import HttpResponse
from django.shortcuts import render
from django.utils.decorators import method_decorator
from django.views.generic import FormView
from six.moves.urllib.error import HTTPError

from django_pgpmailman.decorators import list_view
from django_pgpmailman.forms import (ListSignatureSettingsForm,
                                     ListEncryptionSettingsForm)
from django_pgpmailman.plugin import get_pgp_plugin


def pgp_list_index(request):
    return render(request,
                  'django_pgpmailman/index.html',
                  {'lists': get_pgp_plugin().lists})


@list_view
def pgp_list_summary(request, pgp_list):
    return render(request, 'django_pgpmailman/list/summary.html',
                  {'pgp_list': pgp_list})


# TODO: proper list owner auth
class ListSettings(FormView):
    properties = None

    def get_initial(self):
        result = {}
        for key in self.properties:
            result[key] = getattr(self.pgp_list, key, None)
        return result

    def get_context_data(self, **kwargs):
        data = super(ListSettings, self).get_context_data(
                **kwargs)
        data['pgp_list'] = self.pgp_list
        data['mlist'] = self.pgp_list.mlist
        return data

    @method_decorator(login_required)
    def dispatch(self, request, *args, **kwargs):
        self.pgp_list = get_pgp_plugin().get_list(kwargs['list_id'])
        return super(ListSettings, self).dispatch(request, *args, **kwargs)


class ListSignatureSettingsView(ListSettings):
    form_class = ListSignatureSettingsForm
    template_name = 'django_pgpmailman/list/signature_settings.html'
    properties = ('sign_outgoing', 'strip_original_sig', 'unsigned_msg_action',
                  'inline_pgp_action', 'expired_sig_action',
                  'revoked_sig_action', 'invalid_sig_action',
                  'duplicate_sig_action')

    def form_valid(self, form):
        try:

            pass
        except HTTPError as e:
            pass


class ListEncryptionSettingsView(ListSettings):
    form_class = ListEncryptionSettingsForm
    template_name = 'django_pgpmailman/list/encryption_settings.html'
    properties = ('nonencrypted_msg_action', 'encrypt_outgoing')

    def form_valid(self, form):
        try:

            pass
        except HTTPError as e:
            pass


# TODO: proper list owner auth
@login_required
@list_view
def pgp_list_key_management(request, pgp_list):
    return render(request, 'django_pgpmailman/list/key_management.html',
                  {'pgp_list': pgp_list})


# TODO: proper list owner auth
@login_required
@list_view
def pgp_list_signature_settings(request, pgp_list):
    return render(request, 'django_pgpmailman/list/signature_settings.html',
                  {'pgp_list': pgp_list})


@list_view
def pgp_list_pubkey(request, pgp_list):
    pubkey = pgp_list.pubkey
    pubkey_file = ContentFile(str(pubkey))
    response = HttpResponse(pubkey_file, 'application/pgp-keys')
    response['Content-Length'] = pubkey_file.size
    response[
        'Content-Disposition'] = 'attachment; filename="%s.asc"' % pgp_list.list_id
    return response