Commit 49a73164 authored by Enrico Zini's avatar Enrico Zini
Browse files

vperms.perms -> visit_perms

parent 9bc9adf8
...@@ -94,13 +94,12 @@ class VisitPersonMixin(VisitorMixin): ...@@ -94,13 +94,12 @@ class VisitPersonMixin(VisitorMixin):
def check_permissions(self): def check_permissions(self):
super(VisitPersonMixin, self).check_permissions() super(VisitPersonMixin, self).check_permissions()
if self.require_visit_perms and self.require_visit_perms not in self.visit_perms.perms: if self.require_visit_perms and self.require_visit_perms not in self.visit_perms:
raise PermissionDenied raise PermissionDenied
def get_context_data(self, **kw): def get_context_data(self, **kw):
ctx = super(VisitPersonMixin, self).get_context_data(**kw) ctx = super(VisitPersonMixin, self).get_context_data(**kw)
ctx["person"] = self.person ctx["person"] = self.person
ctx["vperms"] = self.visit_perms
ctx["visit_perms"] = self.visit_perms ctx["visit_perms"] = self.visit_perms
return ctx return ctx
......
...@@ -32,12 +32,7 @@ class Permissions(set): ...@@ -32,12 +32,7 @@ class Permissions(set):
""" """
Set of strings, each string represent a permission Set of strings, each string represent a permission
""" """
@property pass
def perms(self):
"""
Compatibility property for old code doing if "foo" in vperms.perms
"""
return self
class VisitorPermissions(Permissions): class VisitorPermissions(Permissions):
......
...@@ -126,29 +126,29 @@ class TestVisitPersonNoProcess(OldProcessFixtureMixin, TestVisitPersonMixin, Tes ...@@ -126,29 +126,29 @@ class TestVisitPersonNoProcess(OldProcessFixtureMixin, TestVisitPersonMixin, Tes
other_visitors.add(None) other_visitors.add(None)
for visitor, expected_perms in perms.perms.items(): for visitor, expected_perms in perms.perms.items():
other_visitors.discard(visitor) other_visitors.discard(visitor)
vperms = self.persons[visited].permissions_of(self.persons[visitor]) visit_perms = self.persons[visited].permissions_of(self.persons[visitor])
self.assertPermsEqual( self.assertPermsEqual(
"{} visiting {}".format(visitor, visited), "permissions", "{} visiting {}".format(visitor, visited), "permissions",
expected_perms, vperms.perms) expected_perms, visit_perms)
for visitor in other_visitors: for visitor in other_visitors:
vperms = self.persons[visited].permissions_of(self.persons[visitor] if visitor else None) visit_perms = self.persons[visited].permissions_of(self.persons[visitor] if visitor else None)
self.assertPermsEqual( self.assertPermsEqual(
"{} visiting {}".format(visitor, visited), "permissions", "{} visiting {}".format(visitor, visited), "permissions",
[], vperms.perms) [], visit_perms)
other_visitors = set(self.persons.keys()) other_visitors = set(self.persons.keys())
other_visitors.add(None) other_visitors.add(None)
for visitor, expected_targets in perms.advs.items(): for visitor, expected_targets in perms.advs.items():
other_visitors.discard(visitor) other_visitors.discard(visitor)
vperms = self.persons[visited].permissions_of(self.persons[visitor]) visit_perms = self.persons[visited].permissions_of(self.persons[visitor])
self.assertPermsEqual( self.assertPermsEqual(
"{} advocating {}".format(visitor, visited), "target", "{} advocating {}".format(visitor, visited), "target",
expected_targets, vperms.advocate_targets) expected_targets, visit_perms.advocate_targets)
for visitor in other_visitors: for visitor in other_visitors:
vperms = self.persons[visited].permissions_of(self.persons[visitor] if visitor else None) visit_perms = self.persons[visited].permissions_of(self.persons[visitor] if visitor else None)
self.assertPermsEqual( self.assertPermsEqual(
"{} advocating {}".format(visitor, visited), "target", "{} advocating {}".format(visitor, visited), "target",
[], vperms.advocate_targets) [], visit_perms.advocate_targets)
class TestVisitApplicant(OldProcessFixtureMixin, TestVisitPersonMixin, TestCase): class TestVisitApplicant(OldProcessFixtureMixin, TestVisitPersonMixin, TestCase):
...@@ -157,29 +157,29 @@ class TestVisitApplicant(OldProcessFixtureMixin, TestVisitPersonMixin, TestCase) ...@@ -157,29 +157,29 @@ class TestVisitApplicant(OldProcessFixtureMixin, TestVisitPersonMixin, TestCase)
other_visitors.add(None) other_visitors.add(None)
for visitor, expected_perms in perms.perms.items(): for visitor, expected_perms in perms.perms.items():
other_visitors.discard(visitor) other_visitors.discard(visitor)
vperms = self.processes.app.permissions_of(self.persons[visitor]) visit_perms = self.processes.app.permissions_of(self.persons[visitor])
self.assertPermsEqual( self.assertPermsEqual(
"{} visiting app process".format(visitor), "permissions", "{} visiting app process".format(visitor), "permissions",
expected_perms, vperms.perms) expected_perms, visit_perms)
for visitor in other_visitors: for visitor in other_visitors:
vperms = self.processes.app.permissions_of(self.persons[visitor] if visitor else None) visit_perms = self.processes.app.permissions_of(self.persons[visitor] if visitor else None)
self.assertPermsEqual( self.assertPermsEqual(
"{} visiting app process".format(visitor), "permissions", "{} visiting app process".format(visitor), "permissions",
[], vperms.perms) [], visit_perms)
other_visitors = set(self.persons.keys()) other_visitors = set(self.persons.keys())
other_visitors.add(None) other_visitors.add(None)
for visitor, expected_targets in perms.advs.items(): for visitor, expected_targets in perms.advs.items():
other_visitors.discard(visitor) other_visitors.discard(visitor)
vperms = self.processes.app.permissions_of(self.persons[visitor]) visit_perms = self.processes.app.permissions_of(self.persons[visitor])
self.assertPermsEqual( self.assertPermsEqual(
"{} advocating app".format(visitor), "target", "{} advocating app".format(visitor), "target",
expected_targets, vperms.advocate_targets) expected_targets, visit_perms.advocate_targets)
for visitor in other_visitors: for visitor in other_visitors:
vperms = self.processes.app.permissions_of(self.persons[visitor] if visitor else None) visit_perms = self.processes.app.permissions_of(self.persons[visitor] if visitor else None)
self.assertPermsEqual( self.assertPermsEqual(
"{} advocating app".format(visitor), "target", "{} advocating app".format(visitor), "target",
[], vperms.advocate_targets) [], visit_perms.advocate_targets)
def assertApplicantPermsInitialProcess(self, expected): def assertApplicantPermsInitialProcess(self, expected):
for p in (const.PROGRESS_APP_NEW, const.PROGRESS_APP_RCVD, const.PROGRESS_APP_HOLD, const.PROGRESS_ADV_RCVD, const.PROGRESS_POLL_SENT): for p in (const.PROGRESS_APP_NEW, const.PROGRESS_APP_RCVD, const.PROGRESS_APP_HOLD, const.PROGRESS_ADV_RCVD, const.PROGRESS_POLL_SENT):
......
...@@ -46,9 +46,9 @@ ...@@ -46,9 +46,9 @@
<tr> <tr>
<td>{{fpr.fpr|fingerprint}}</td> <td>{{fpr.fpr|fingerprint}}</td>
<td> <td>
{% if "edit_statements" in vperms.perms %} {% if "edit_statements" in visit_perms %}
<a href="{% url 'fprs_agreement_edit' key=person.lookup_key fpr=fpr.fpr %}">{{fpr.agreement_status}}</a> <a href="{% url 'fprs_agreement_edit' key=person.lookup_key fpr=fpr.fpr %}">{{fpr.agreement_status}}</a>
{% elif "see_statements" in vperms.perms %} {% elif "see_statements" in visit_perms %}
<a href="{% url 'fprs_agreement_show' key=person.lookup_key fpr=fpr.fpr %}">{{fpr.agreement_status}}</a> <a href="{% url 'fprs_agreement_show' key=person.lookup_key fpr=fpr.fpr %}">{{fpr.agreement_status}}</a>
{% endif %} {% endif %}
</a> </a>
......
...@@ -106,7 +106,7 @@ ...@@ -106,7 +106,7 @@
<tr><th>FD comments</th><td>{{process.fd_comment}}</td></tr> <tr><th>FD comments</th><td>{{process.fd_comment}}</td></tr>
{% endif %} {% endif %}
{% if "view_mbox" in vperms.perms %} {% if "view_mbox" in visit_perms %}
<tr> <tr>
<th>Mail archive</th> <th>Mail archive</th>
<td> <td>
...@@ -139,7 +139,7 @@ ...@@ -139,7 +139,7 @@
</table> </table>
{% comment %} {% comment %}
{% if "edit_bio" in vperms.perms or "edit_ldap" in vperms.perms %} {% if "edit_bio" in visit_perms or "edit_ldap" in visit_perms %}
<a href="{% url 'restricted_person' key=person.lookup_key %}">Edit personal information</a> <a href="{% url 'restricted_person' key=person.lookup_key %}">Edit personal information</a>
{% endif %} {% endif %}
{% endcomment %} {% endcomment %}
......
...@@ -15,14 +15,14 @@ ...@@ -15,14 +15,14 @@
<td>{{s.uploaded_time|date:"Y-m-d"}}</td> <td>{{s.uploaded_time|date:"Y-m-d"}}</td>
<td> <td>
<a href="{% url 'process_statement_raw' pk=process.pk type=requirement.type st=s.pk %}">[view raw]</a> <a href="{% url 'process_statement_raw' pk=process.pk type=requirement.type st=s.pk %}">[view raw]</a>
{% if "edit_statements" in vperms.perms %} {% if "edit_statements" in visit_perms %}
<a href="{% url 'process_statement_delete' pk=process.pk type=requirement.type st=s.pk %}">[delete]</a> <a href="{% url 'process_statement_delete' pk=process.pk type=requirement.type st=s.pk %}">[delete]</a>
{% endif %} {% endif %}
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
{% if "edit_statements" in vperms.perms %} {% if "edit_statements" in visit_perms %}
<tfoot> <tfoot>
<tr> <tr>
<td colspan="3"> <td colspan="3">
......
...@@ -140,19 +140,19 @@ class TestVisitApplicant(ProcessFixtureMixin, TestCase): ...@@ -140,19 +140,19 @@ class TestVisitApplicant(ProcessFixtureMixin, TestCase):
def assertPerms(self, perms): def assertPerms(self, perms):
# Check advocacy targets # Check advocacy targets
for visitor in perms.advs.visitors: for visitor in perms.advs.visitors:
vperms = self.processes.app.permissions_of(self.persons[visitor]) visit_perms = self.processes.app.permissions_of(self.persons[visitor])
perms.advs.assertEqual(self, visitor, vperms.advocate_targets) perms.advs.assertEqual(self, visitor, visit_perms.advocate_targets)
for visitor in perms.advs.select_others(self.persons): for visitor in perms.advs.select_others(self.persons):
vperms = self.processes.app.permissions_of(self.persons[visitor] if visitor else None) visit_perms = self.processes.app.permissions_of(self.persons[visitor] if visitor else None)
perms.advs.assertEmpty(self, visitor, vperms.advocate_targets) perms.advs.assertEmpty(self, visitor, visit_perms.advocate_targets)
# Check process permissions # Check process permissions
for visitor in perms.proc.visitors: for visitor in perms.proc.visitors:
vperms = self.processes.app.permissions_of(self.persons[visitor]) visit_perms = self.processes.app.permissions_of(self.persons[visitor])
perms.proc.assertEqual(self, visitor, vperms.perms) perms.proc.assertEqual(self, visitor, visit_perms)
for visitor in perms.proc.select_others(self.persons): for visitor in perms.proc.select_others(self.persons):
vperms = self.processes.app.permissions_of(self.persons[visitor] if visitor else None) visit_perms = self.processes.app.permissions_of(self.persons[visitor] if visitor else None)
perms.advs.assertEmpty(self, visitor, vperms.perms) perms.advs.assertEmpty(self, visitor, visit_perms)
# Check requirements # Check requirements
for req in ("intent", "sc_dmup", "advocate", "keycheck", "am_ok"): for req in ("intent", "sc_dmup", "advocate", "keycheck", "am_ok"):
...@@ -162,11 +162,11 @@ class TestVisitApplicant(ProcessFixtureMixin, TestCase): ...@@ -162,11 +162,11 @@ class TestVisitApplicant(ProcessFixtureMixin, TestCase):
requirement = pmodels.Requirement.objects.get(process=self.processes.app, type=req) requirement = pmodels.Requirement.objects.get(process=self.processes.app, type=req)
for visitor in wanted.visitors: for visitor in wanted.visitors:
vperms = requirement.permissions_of(self.persons[visitor]) visit_perms = requirement.permissions_of(self.persons[visitor])
wanted.assertEqual(self, visitor, vperms.perms) wanted.assertEqual(self, visitor, visit_perms)
for visitor in wanted.select_others(self.persons): for visitor in wanted.select_others(self.persons):
vperms = requirement.permissions_of(self.persons[visitor] if visitor else None) visit_perms = requirement.permissions_of(self.persons[visitor] if visitor else None)
wanted.assertEmpty(self, visitor, vperms.perms) wanted.assertEmpty(self, visitor, visit_perms)
## def assertApplicantPermsInitialProcess(self, expected): ## def assertApplicantPermsInitialProcess(self, expected):
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
<a href="{% url 'admin:backend_am_add' %}?person={{person.id}}">make am</a> <a href="{% url 'admin:backend_am_add' %}?person={{person.id}}">make am</a>
{% endif %} {% endif %}
{% endif %} {% endif %}
{% for s in vperms.advocate_targets %} {% for s in visit_perms.advocate_targets %}
{% if s == "dd_u" or s == "dd_nu" %} {% if s == "dd_u" or s == "dd_nu" %}
<a href="{% url 'restricted_advocate' key=person.lookup_key applying_for=s %}">advocate for {{s|sdesc_status}}</a> <a href="{% url 'restricted_advocate' key=person.lookup_key applying_for=s %}">advocate for {{s|sdesc_status}}</a>
{% endif %} {% endif %}
...@@ -38,12 +38,12 @@ ...@@ -38,12 +38,12 @@
<table class="personinfo"> <table class="personinfo">
<tr><th>Account name</th><td>{{person.uid|default:"None chosen yet"}}</td></tr> <tr><th>Account name</th><td>{{person.uid|default:"None chosen yet"}}</td></tr>
<tr><th>OpenPGP fingerprint</th><td>{{person.fpr|fingerprint}}{% if "edit_ldap" in vperms.perms %} (<a href="{% url 'fprs_person_list' key=person.lookup_key %}">manage</a>){% endif %}</td></tr> <tr><th>OpenPGP fingerprint</th><td>{{person.fpr|fingerprint}}{% if "edit_ldap" in visit_perms %} (<a href="{% url 'fprs_person_list' key=person.lookup_key %}">manage</a>){% endif %}</td></tr>
<tr><th>Status</th><td>{{person.status|desc_status}} since {{person.status_changed|date:"Y-m-d"}} <tr><th>Status</th><td>{{person.status|desc_status}} since {{person.status_changed|date:"Y-m-d"}}
{% if person.changed_before_data_import %} {% if person.changed_before_data_import %}
(changed before data import) (changed before data import)
{% endif %} {% endif %}
{% if "request_new_status" in vperms.perms and person.possible_new_statuses %}(<a href="{% url 'process_create' key=person.lookup_key %}">request new status</a>){% endif %} {% if "request_new_status" in visit_perms and person.possible_new_statuses %}(<a href="{% url 'process_create' key=person.lookup_key %}">request new status</a>){% endif %}
</td></tr> </td></tr>
{% if person.pending %} {% if person.pending %}
<tr><th>Pending</th><td>This is a new entry that requires confirmation before {{person.expires}}. Click <a href="{% url 'public_newnm_resend_challenge' key=person.lookup_key %}">here</a> to send the email challenge again.</td></tr> <tr><th>Pending</th><td>This is a new entry that requires confirmation before {{person.expires}}. Click <a href="{% url 'public_newnm_resend_challenge' key=person.lookup_key %}">here</a> to send the email challenge again.</td></tr>
...@@ -70,7 +70,7 @@ ...@@ -70,7 +70,7 @@
{% endwith %} {% endwith %}
</table> </table>
{% if "edit_bio" in vperms.perms or "edit_ldap" in vperms.perms %} {% if "edit_bio" in visit_perms or "edit_ldap" in visit_perms %}
<a href="{% url 'restricted_person' key=person.lookup_key %}">edit</a> <a href="{% url 'restricted_person' key=person.lookup_key %}">edit</a>
{% endif %} {% endif %}
......
...@@ -130,15 +130,15 @@ See: <a href="http://lists.debian.org/debian-project/2010/09/msg00026.html">hand ...@@ -130,15 +130,15 @@ See: <a href="http://lists.debian.org/debian-project/2010/09/msg00026.html">hand
<tr> <tr>
<th>OpenPGP fingerprint</th> <th>OpenPGP fingerprint</th>
<td> <td>
{{fpr.fpr|fingerprint}}{% if "edit_ldap" in vperms.perms %} (<a href="{% url 'fprs_person_list' key=person.lookup_key %}">manage</a>){% endif %} {{fpr.fpr|fingerprint}}{% if "edit_ldap" in visit_perms %} (<a href="{% url 'fprs_person_list' key=person.lookup_key %}">manage</a>){% endif %}
{% if fpr %} {% if fpr %}
<small> <small>
<ul class="packed"> <ul class="packed">
<li> <li>
SC/DFSG/DMUP agreement: SC/DFSG/DMUP agreement:
{% if "edit_statements" in vperms.perms %} {% if "edit_statements" in visit_perms %}
<a href="{% url 'fprs_agreement_edit' key=person.lookup_key fpr=fpr.fpr %}">{{fpr.agreement_status}}</a> <a href="{% url 'fprs_agreement_edit' key=person.lookup_key fpr=fpr.fpr %}">{{fpr.agreement_status}}</a>
{% elif "see_statements" in vperms.perms %} {% elif "see_statements" in visit_perms %}
<a href="{% url 'fprs_agreement_show' key=person.lookup_key fpr=fpr.fpr %}">{{fpr.agreement_status}}</a> <a href="{% url 'fprs_agreement_show' key=person.lookup_key fpr=fpr.fpr %}">{{fpr.agreement_status}}</a>
{% else %} {% else %}
{{fpr.agreement_status}} {{fpr.agreement_status}}
...@@ -146,7 +146,7 @@ See: <a href="http://lists.debian.org/debian-project/2010/09/msg00026.html">hand ...@@ -146,7 +146,7 @@ See: <a href="http://lists.debian.org/debian-project/2010/09/msg00026.html">hand
</li> </li>
{% if keycheck %} {% if keycheck %}
<li>Main key: <i>{{keycheck.main.remarks}}</i> (last updated: {{keycheck.updated|date:"Y-m-d H:i T"}}) <li>Main key: <i>{{keycheck.main.remarks}}</i> (last updated: {{keycheck.updated|date:"Y-m-d H:i T"}})
{% if "update_keycheck" in vperms.perms %} {% if "update_keycheck" in visit_perms %}
<form class="inline" action="{% url 'public_process_update_keycheck' key=process.lookup_key %}" method="POST">{% csrf_token %} <form class="inline" action="{% url 'public_process_update_keycheck' key=process.lookup_key %}" method="POST">{% csrf_token %}
<button type="submit">Update</button> <button type="submit">Update</button>
</form> </form>
...@@ -175,7 +175,7 @@ See: <a href="http://lists.debian.org/debian-project/2010/09/msg00026.html">hand ...@@ -175,7 +175,7 @@ See: <a href="http://lists.debian.org/debian-project/2010/09/msg00026.html">hand
{% if visitor.is_admin %} {% if visitor.is_admin %}
<tr><th>FD comments</th><td>{{person.fd_comment}}</td></tr> <tr><th>FD comments</th><td>{{person.fd_comment}}</td></tr>
{% endif %} {% endif %}
{% if "view_mbox" in vperms.perms %} {% if "view_mbox" in visit_perms %}
<tr><th>Mail archive</th> <tr><th>Mail archive</th>
<td> <td>
<tt><a href="mailto:{{process.archive_email}}">{{process.archive_email}}</a></tt> <tt><a href="mailto:{{process.archive_email}}">{{process.archive_email}}</a></tt>
...@@ -201,7 +201,7 @@ See: <a href="http://lists.debian.org/debian-project/2010/09/msg00026.html">hand ...@@ -201,7 +201,7 @@ See: <a href="http://lists.debian.org/debian-project/2010/09/msg00026.html">hand
{% endif %} {% endif %}
{% endif %} {% endif %}
</table> </table>
{% if "edit_bio" in vperms.perms or "edit_ldap" in vperms.perms %} {% if "edit_bio" in visit_perms or "edit_ldap" in visit_perms %}
<a href="{% url 'restricted_person' key=person.lookup_key %}">Edit personal information</a> <a href="{% url 'restricted_person' key=person.lookup_key %}">Edit personal information</a>
{% endif %} {% endif %}
......
...@@ -141,7 +141,7 @@ class Process(VisitProcessTemplateView): ...@@ -141,7 +141,7 @@ class Process(VisitProcessTemplateView):
# Process form ASAP, so we compute the rest with updated values # Process form ASAP, so we compute the rest with updated values
am = self.visitor.am_or_none if self.visitor else None am = self.visitor.am_or_none if self.visitor else None
if am and (self.process.manager == am or am.is_admin) and ( if am and (self.process.manager == am or am.is_admin) and (
"edit_bio" in self.visit_perms.perms or "edit_ldap" in self.visit_perms.perms): "edit_bio" in self.visit_perms or "edit_ldap" in self.visit_perms):
StatusUpdateForm = make_statusupdateform(am) StatusUpdateForm = make_statusupdateform(am)
form = StatusUpdateForm(initial=dict(progress=self.process.progress)) form = StatusUpdateForm(initial=dict(progress=self.process.progress))
else: else:
...@@ -510,7 +510,7 @@ class Person(VisitPersonTemplateView): ...@@ -510,7 +510,7 @@ class Person(VisitPersonTemplateView):
am_processes = [] am_processes = []
audit_log = [] audit_log = []
if "view_person_audit_log" in self.visit_perms.perms: if "view_person_audit_log" in self.visit_perms:
is_admin = self.visitor.is_admin is_admin = self.visitor.is_admin
for e in self.person.audit_log.order_by("-logdate"): for e in self.person.audit_log.order_by("-logdate"):
if is_admin: if is_admin:
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
<input type="submit" value="Submit" /> <input type="submit" value="Submit" />
</form> </form>
{% if "edit_ldap" not in vperms.perms %} {% if "edit_ldap" not in visit_perms %}
<p> <p>
Name, uid and email cannot be changed here:<br> Name, uid and email cannot be changed here:<br>
Either {{person.fullname}} already has an LDAP record (<tt>finger Either {{person.fullname}} already has an LDAP record (<tt>finger
......
# coding: utf8 # coding: utf8
# nm.debian.org AM interaction
#
# Copyright (C) 2013--2015 Enrico Zini <enrico@debian.org>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero 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 Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from __future__ import print_function from __future__ import print_function
from __future__ import absolute_import from __future__ import absolute_import
from __future__ import division from __future__ import division
...@@ -26,14 +10,14 @@ from django.contrib.auth.decorators import login_required ...@@ -26,14 +10,14 @@ from django.contrib.auth.decorators import login_required
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.views.generic import View from django.views.generic import View, TemplateView
from django.views.generic.edit import FormView from django.views.generic.edit import FormView
from django.utils.timezone import now from django.utils.timezone import now
from django.db import transaction from django.db import transaction
import backend.models as bmodels import backend.models as bmodels
import minechangelogs.models as mmodels import minechangelogs.models as mmodels
from backend import const from backend import const
from backend.mixins import VisitorMixin, VisitPersonMixin, VisitorTemplateView, VisitPersonTemplateView from backend.mixins import VisitorMixin, VisitPersonMixin, VisitorTemplateView, VisitPersonTemplateView, VisitProcessMixin
import backend.email import backend.email
import json import json
import datetime import datetime
...@@ -460,20 +444,17 @@ def _assign_am(request, visitor, nm, am): ...@@ -460,20 +444,17 @@ def _assign_am(request, visitor, nm, am):
l.logtext = "[%s as %s] %s" % (request.user, visitor.lookup_key, l.logtext) l.logtext = "[%s as %s] %s" % (request.user, visitor.lookup_key, l.logtext)
l.save() l.save()
class MailArchive(VisitorMixin, View):
def get(self, request, key, *args, **kw):
process = bmodels.Process.lookup_or_404(key)
vperms = process.permissions_of(self.visitor)
if "view_mbox" not in vperms.perms: class MailArchive(VisitProcessMixin, View):
raise PermissionDenied require_visit_perms = "view_mbox"
fname = process.mailbox_file def get(self, request, key, *args, **kw):
fname = self.process.mailbox_file
if fname is None: if fname is None:
from django.http import Http404 from django.http import Http404
raise Http404 raise Http404
user_fname = "%s.mbox" % (process.person.uid or process.person.email) user_fname = "%s.mbox" % (self.process.person.uid or self.process.person.email)
res = http.HttpResponse(content_type="application/octet-stream") res = http.HttpResponse(content_type="application/octet-stream")
res["Content-Disposition"] = "attachment; filename=%s.gz" % user_fname res["Content-Disposition"] = "attachment; filename=%s.gz" % user_fname
...@@ -491,27 +472,24 @@ class MailArchive(VisitorMixin, View): ...@@ -491,27 +472,24 @@ class MailArchive(VisitorMixin, View):
outfd.close() outfd.close()
return res return res
class DisplayMailArchive(VisitorTemplateView):
class DisplayMailArchive(VisitProcessMixin, TemplateView):
template_name = "restricted/display-mail-archive.html" template_name = "restricted/display-mail-archive.html"
require_visit_perms = "view_mbox"
def get_context_data(self, **kw): def get_context_data(self, **kw):
ctx = super(DisplayMailArchive, self).get_context_data(**kw) ctx = super(DisplayMailArchive, self).get_context_data(**kw)
key = self.kwargs["key"]
process = bmodels.Process.lookup_or_404(key)
vperms = process.permissions_of(self.visitor)
if "view_mbox" not in vperms.perms:
raise PermissionDenied
fname = process.mailbox_file fname = self.process.mailbox_file
if fname is None: if fname is None:
from django.http import Http404 from django.http import Http404
raise Http404 raise Http404
ctx["mails"] = backend.email.get_mbox_as_dicts(fname) ctx["mails"] = backend.email.get_mbox_as_dicts(fname)
ctx["process"] = process
ctx["class"] = "clickable" ctx["class"] = "clickable"
return ctx return ctx
class AssignAM(VisitorTemplateView): class AssignAM(VisitorTemplateView):
template_name = "restricted/assign-am.html" template_name = "restricted/assign-am.html"
require_visitor = "admin" require_visitor = "admin"
...@@ -540,6 +518,7 @@ class AssignAM(VisitorTemplateView): ...@@ -540,6 +518,7 @@ class AssignAM(VisitorTemplateView):
_assign_am(request, self.visitor, process, am) _assign_am(request, self.visitor, process, am)
return redirect(process.get_absolute_url()) return redirect(process.get_absolute_url())
class MailboxStats(VisitorTemplateView): class MailboxStats(VisitorTemplateView):
template_name = "restricted/mailbox-stats.html" template_name = "restricted/mailbox-stats.html"
require_visitor = "admin" require_visitor = "admin"
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment