forked from ietf-tools/datatracker
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathviews.py
More file actions
110 lines (91 loc) · 3.39 KB
/
Copy pathviews.py
File metadata and controls
110 lines (91 loc) · 3.39 KB
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
# Copyright The IETF Trust 2013-2020, All Rights Reserved
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect
from ietf.group.models import Role
from ietf.message.models import AnnouncementFrom
from ietf.ietfauth.utils import has_role
from ietf.secr.announcement.forms import AnnounceForm
from ietf.secr.utils.decorators import check_for_cancel
from ietf.utils.mail import send_mail_text
from ietf.utils.response import permission_denied
# -------------------------------------------------
# Helper Functions
# -------------------------------------------------
def check_access(user):
"""
This function takes a Django User object and returns true if the user has access to
the Announcement app.
"""
if hasattr(user, "person"):
person = user.person
if has_role(user, "Secretariat"):
return True
for role in person.role_set.all():
if AnnouncementFrom.objects.filter(name=role.name, group=role.group):
return True
if Role.objects.filter(
name="chair",
group__acronym__startswith="nomcom",
group__state="active",
group__type="nomcom",
person=person,
):
return True
return False
# --------------------------------------------------
# STANDARD VIEW FUNCTIONS
# --------------------------------------------------
# this seems to cause some kind of circular problem
# @check_for_cancel(reverse('home'))
@login_required
@check_for_cancel("../")
def main(request):
"""
Main view for Announcement tool. Authrozied users can fill out email details: header, body, etc
and send.
"""
if not check_access(request.user):
permission_denied(
request,
"Restricted to: Secretariat, IAD, or chair of IETF, IAB, RSOC, RSE, IAOC, ISOC, NomCom.",
)
form = AnnounceForm(request.POST or None, user=request.user)
if form.is_valid():
# recast as hidden form for next page of process
form = AnnounceForm(request.POST, user=request.user, hidden=True)
if form.data["to"] == "Other...":
to = form.data["to_custom"]
else:
to = form.data["to"]
return render(
request,
"announcement/confirm.html",
{"message": form.data, "to": to, "form": form},
)
return render(request, "announcement/index.html", {"form": form})
@login_required
@check_for_cancel("../")
def confirm(request):
if not check_access(request.user):
permission_denied(
request,
"Restricted to: Secretariat, IAD, or chair of IETF, IAB, RSOC, RSE, IAOC, ISOC, NomCom.",
)
if request.method == "POST":
form = AnnounceForm(request.POST, user=request.user)
if request.method == "POST":
message = form.save(user=request.user, commit=True)
extra = {"Reply-To": message.get("reply_to")}
send_mail_text(
None,
message.to,
message.frm,
message.subject,
message.body,
cc=message.cc,
bcc=message.bcc,
extra=extra,
)
messages.success(request, "The announcement was sent.")
return redirect("ietf.secr.announcement.views.main")