Remove shim layer from ietfauth, delete some dead code and migrate
remaining importers of ietfauth.decorators to ietfauth.utils - Legacy-Id: 6797
This commit is contained in:
parent
fe5ad0c998
commit
e63ac36b8f
|
@ -5,7 +5,7 @@ from django.template import RequestContext
|
||||||
from ietf.dbtemplate.models import DBTemplate
|
from ietf.dbtemplate.models import DBTemplate
|
||||||
from ietf.dbtemplate.forms import DBTemplateForm
|
from ietf.dbtemplate.forms import DBTemplateForm
|
||||||
from ietf.group.models import Group
|
from ietf.group.models import Group
|
||||||
from ietf.ietfauth.decorators import has_role
|
from ietf.ietfauth.utils import has_role
|
||||||
|
|
||||||
|
|
||||||
def template_list(request, acronym):
|
def template_list(request, acronym):
|
||||||
|
|
|
@ -423,7 +423,7 @@ def startswith(x, y):
|
||||||
|
|
||||||
@register.filter
|
@register.filter
|
||||||
def has_role(user, role_names):
|
def has_role(user, role_names):
|
||||||
from ietf.ietfauth.decorators import has_role
|
from ietf.ietfauth.utils import has_role
|
||||||
if not user:
|
if not user:
|
||||||
return False
|
return False
|
||||||
return has_role(user, role_names.split(','))
|
return has_role(user, role_names.split(','))
|
||||||
|
|
|
@ -16,7 +16,7 @@ from django.conf import settings
|
||||||
import debug
|
import debug
|
||||||
|
|
||||||
from ietf.utils.mail import send_mail_text, send_mail_preformatted
|
from ietf.utils.mail import send_mail_text, send_mail_preformatted
|
||||||
from ietf.ietfauth.decorators import has_role, role_required
|
from ietf.ietfauth.utils import has_role, role_required
|
||||||
from ietf.iesg.models import TelechatDate
|
from ietf.iesg.models import TelechatDate
|
||||||
from ietf.ipr.models import IprDetail
|
from ietf.ipr.models import IprDetail
|
||||||
from ietf.ipr.search import iprs_from_docs
|
from ietf.ipr.search import iprs_from_docs
|
||||||
|
|
|
@ -12,7 +12,7 @@ from ietf.doc.utils import log_state_changed, update_telechat
|
||||||
|
|
||||||
from ietf.doc.models import save_document_in_history
|
from ietf.doc.models import save_document_in_history
|
||||||
from ietf.doc.utils import create_ballot_if_not_open, close_open_ballots, get_document_content
|
from ietf.doc.utils import create_ballot_if_not_open, close_open_ballots, get_document_content
|
||||||
from ietf.ietfauth.decorators import has_role, role_required
|
from ietf.ietfauth.utils import has_role, role_required
|
||||||
from ietf.utils.textupload import get_cleaned_text_file_content
|
from ietf.utils.textupload import get_cleaned_text_file_content
|
||||||
from ietf.utils.mail import send_mail_preformatted
|
from ietf.utils.mail import send_mail_preformatted
|
||||||
from ietf.doc.mails import email_iana
|
from ietf.doc.mails import email_iana
|
||||||
|
|
|
@ -18,7 +18,7 @@ from django.contrib.auth.decorators import login_required
|
||||||
from django.template.defaultfilters import pluralize
|
from django.template.defaultfilters import pluralize
|
||||||
|
|
||||||
from ietf.utils.mail import send_mail_text, send_mail_message
|
from ietf.utils.mail import send_mail_text, send_mail_message
|
||||||
from ietf.ietfauth.decorators import role_required
|
from ietf.ietfauth.utils import role_required
|
||||||
from ietf.ietfauth.utils import has_role, is_authorized_in_doc_stream, user_is_person
|
from ietf.ietfauth.utils import has_role, is_authorized_in_doc_stream, user_is_person
|
||||||
from ietf.iesg.models import TelechatDate
|
from ietf.iesg.models import TelechatDate
|
||||||
from ietf.doc.mails import *
|
from ietf.doc.mails import *
|
||||||
|
|
|
@ -12,7 +12,7 @@ from ietf.doc.utils import log_state_changed, update_telechat
|
||||||
from ietf.doc.models import save_document_in_history
|
from ietf.doc.models import save_document_in_history
|
||||||
|
|
||||||
from ietf.doc.utils import create_ballot_if_not_open, close_open_ballots, get_document_content
|
from ietf.doc.utils import create_ballot_if_not_open, close_open_ballots, get_document_content
|
||||||
from ietf.ietfauth.decorators import has_role, role_required
|
from ietf.ietfauth.utils import has_role, role_required
|
||||||
from ietf.utils.textupload import get_cleaned_text_file_content
|
from ietf.utils.textupload import get_cleaned_text_file_content
|
||||||
from ietf.utils.mail import send_mail_preformatted
|
from ietf.utils.mail import send_mail_preformatted
|
||||||
from ietf.doc.models import State, Document, DocHistory, DocAlias
|
from ietf.doc.models import State, Document, DocHistory, DocAlias
|
||||||
|
|
|
@ -1,17 +1,15 @@
|
||||||
from django.utils import simplejson as json
|
|
||||||
from dajaxice.core import dajaxice_functions
|
|
||||||
from dajaxice.decorators import dajaxice_register
|
|
||||||
from ietf.ietfauth.decorators import group_required
|
|
||||||
from django.shortcuts import get_object_or_404
|
|
||||||
from django.http import HttpResponseRedirect, HttpResponse, Http404
|
|
||||||
|
|
||||||
from ietf.group.models import Group
|
|
||||||
import datetime
|
import datetime
|
||||||
import logging
|
import logging
|
||||||
import sys
|
import sys
|
||||||
from ietf.settings import LOG_DIR
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
from django.utils import simplejson as json
|
||||||
|
from django.shortcuts import get_object_or_404
|
||||||
|
from django.http import HttpResponseRedirect, HttpResponse, Http404
|
||||||
|
|
||||||
|
from dajaxice.core import dajaxice_functions
|
||||||
|
from dajaxice.decorators import dajaxice_register
|
||||||
|
|
||||||
|
from ietf.group.models import Group
|
||||||
|
|
||||||
def group_json(request, groupname):
|
def group_json(request, groupname):
|
||||||
group = get_object_or_404(Group, acronym=groupname)
|
group = get_object_or_404(Group, acronym=groupname)
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
# Copyright The IETF Trust 2007, All Rights Reserved
|
|
||||||
|
|
|
@ -1,115 +0,0 @@
|
||||||
# Portions Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
|
||||||
# All rights reserved. Contact: Pasi Eronen <pasi.eronen@nokia.com>
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
#
|
|
||||||
# * Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
#
|
|
||||||
# * Redistributions in binary form must reproduce the above
|
|
||||||
# copyright notice, this list of conditions and the following
|
|
||||||
# disclaimer in the documentation and/or other materials provided
|
|
||||||
# with the distribution.
|
|
||||||
#
|
|
||||||
# * Neither the name of the Nokia Corporation and/or its
|
|
||||||
# subsidiary(-ies) nor the names of its contributors may be used
|
|
||||||
# to endorse or promote products derived from this software
|
|
||||||
# without specific prior written permission.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
# Copyright The IETF Trust 2007, All Rights Reserved
|
|
||||||
|
|
||||||
from django.contrib.auth.backends import RemoteUserBackend
|
|
||||||
from django.contrib.auth.models import Group
|
|
||||||
from ietf.idtracker.models import IESGLogin, Role
|
|
||||||
from ietf.ietfauth.models import IetfUserProfile
|
|
||||||
|
|
||||||
from ietf.utils import log
|
|
||||||
|
|
||||||
AUTOMATIC_GROUPS = ["Area_Director", "Secretariat", "IETF_Chair",
|
|
||||||
"IAB_Chair", "IRTF_Chair", ]
|
|
||||||
|
|
||||||
class IetfUserBackend(RemoteUserBackend):
|
|
||||||
|
|
||||||
def find_groups(username):
|
|
||||||
"""
|
|
||||||
Role/Group:
|
|
||||||
Area_Director currently sitting AD
|
|
||||||
IETF_Chair currently sitting IETF Chair
|
|
||||||
IAB_Chair currently sitting IAB Chair
|
|
||||||
IRTF_Chair currently sitting IRTF Chair
|
|
||||||
Secretariat secretariat staff
|
|
||||||
|
|
||||||
Roles/Groups NOT YET IMPLEMENTED
|
|
||||||
WG_Chair currently sitting chair of some WG
|
|
||||||
IESG_Liaison non-ADs on iesg@ietf.org and telechats
|
|
||||||
Session_Chair chairing a non-WG session in IETF meeting
|
|
||||||
Ex_Area_Director past AD
|
|
||||||
"""
|
|
||||||
# Any group name added by this method should be added to the
|
|
||||||
# AUTOMATIC_GROUPS list
|
|
||||||
groups = []
|
|
||||||
try:
|
|
||||||
login = IESGLogin.objects.get(login_name=username)
|
|
||||||
if login.user_level == 1:
|
|
||||||
groups.append("Area_Director")
|
|
||||||
elif login.user_level == 0:
|
|
||||||
groups.append("Secretariat")
|
|
||||||
if login.person:
|
|
||||||
for role in login.person.role_set.all():
|
|
||||||
if role.id == Role.IETF_CHAIR:
|
|
||||||
groups.append("IETF_Chair")
|
|
||||||
elif role.id == Role.IAB_CHAIR:
|
|
||||||
groups.append("IAB_Chair")
|
|
||||||
elif role.id == Role.IRTF_CHAIR:
|
|
||||||
groups.append("IRTF_Chair")
|
|
||||||
except IESGLogin.DoesNotExist:
|
|
||||||
pass
|
|
||||||
#
|
|
||||||
# Additional sources of group memberships:
|
|
||||||
# - wg_password table
|
|
||||||
# - other Roles
|
|
||||||
# - the /etc/.../*.perms files
|
|
||||||
return groups
|
|
||||||
|
|
||||||
find_groups = staticmethod(find_groups)
|
|
||||||
|
|
||||||
def authenticate(self, remote_user):
|
|
||||||
user = RemoteUserBackend.authenticate(self, remote_user)
|
|
||||||
if not user:
|
|
||||||
return user
|
|
||||||
|
|
||||||
# Create profile if it doesn't exist
|
|
||||||
try:
|
|
||||||
profile = user.get_profile()
|
|
||||||
except IetfUserProfile.DoesNotExist:
|
|
||||||
profile = IetfUserProfile(user=user)
|
|
||||||
profile.save()
|
|
||||||
|
|
||||||
# Remove any automatic groups, the proper ones will be retrieved by
|
|
||||||
# find_groups
|
|
||||||
groups = [group for group in user.groups.exclude(name__in=AUTOMATIC_GROUPS)]
|
|
||||||
|
|
||||||
# Update group memberships
|
|
||||||
group_names = IetfUserBackend.find_groups(user.username)
|
|
||||||
for group_name in group_names:
|
|
||||||
# Create groups as needed
|
|
||||||
group,created = Group.objects.get_or_create(name=group_name)
|
|
||||||
if created:
|
|
||||||
log("IetfUserBackend created Group '%s'" % (group_name,))
|
|
||||||
groups.append(group)
|
|
||||||
user.groups = groups
|
|
||||||
return user
|
|
|
@ -1,35 +0,0 @@
|
||||||
# Portion Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
|
||||||
# All rights reserved. Contact: Pasi Eronen <pasi.eronen@nokia.com>
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
#
|
|
||||||
# * Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
#
|
|
||||||
# * Redistributions in binary form must reproduce the above
|
|
||||||
# copyright notice, this list of conditions and the following
|
|
||||||
# disclaimer in the documentation and/or other materials provided
|
|
||||||
# with the distribution.
|
|
||||||
#
|
|
||||||
# * Neither the name of the Nokia Corporation and/or its
|
|
||||||
# subsidiary(-ies) nor the names of its contributors may be used
|
|
||||||
# to endorse or promote products derived from this software
|
|
||||||
# without specific prior written permission.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
# REDESIGN: backwards compatibility, to be deleted
|
|
||||||
from ietf.ietfauth.utils import role_required, has_role, passes_test_decorator
|
|
||||||
group_required = lambda *group_names: role_required(*[n.replace("Area_Director", "Area Director") for n in group_names])
|
|
|
@ -10,7 +10,8 @@ from django.contrib.sites.models import Site
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from ietf.utils.mail import send_mail
|
from ietf.utils.mail import send_mail
|
||||||
from ietf.person.models import Person, Email
|
from ietf.person.models import Person, Email, Alias
|
||||||
|
from ietf.group.models import Role
|
||||||
|
|
||||||
|
|
||||||
class RegistrationForm(forms.Form):
|
class RegistrationForm(forms.Form):
|
||||||
|
@ -167,7 +168,6 @@ class PersonForm(ModelForm):
|
||||||
request = None
|
request = None
|
||||||
new_emails = []
|
new_emails = []
|
||||||
class Meta:
|
class Meta:
|
||||||
from ietf.person.models import Person
|
|
||||||
model = Person
|
model = Person
|
||||||
exclude = ('time','user')
|
exclude = ('time','user')
|
||||||
|
|
||||||
|
@ -193,8 +193,6 @@ class PersonForm(ModelForm):
|
||||||
send_mail(self.request, to_email, from_email, subject, 'registration/add_email_email.txt', context)
|
send_mail(self.request, to_email, from_email, subject, 'registration/add_email_email.txt', context)
|
||||||
|
|
||||||
def save(self, force_insert=False, force_update=False, commit=True):
|
def save(self, force_insert=False, force_update=False, commit=True):
|
||||||
from ietf.group.models import Role
|
|
||||||
from ietf.person.models import Alias
|
|
||||||
m = super(PersonForm, self).save(commit=False)
|
m = super(PersonForm, self).save(commit=False)
|
||||||
self.new_emails = [v for k,v in self.data.items() if k[:10] == u'new_email_' and u'@' in v]
|
self.new_emails = [v for k,v in self.data.items() if k[:10] == u'new_email_' and u'@' in v]
|
||||||
|
|
||||||
|
|
|
@ -1,136 +1 @@
|
||||||
# Portions Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
|
|
||||||
# All rights reserved. Contact: Pasi Eronen <pasi.eronen@nokia.com>
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
#
|
|
||||||
# * Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
#
|
|
||||||
# * Redistributions in binary form must reproduce the above
|
|
||||||
# copyright notice, this list of conditions and the following
|
|
||||||
# disclaimer in the documentation and/or other materials provided
|
|
||||||
# with the distribution.
|
|
||||||
#
|
|
||||||
# * Neither the name of the Nokia Corporation and/or its
|
|
||||||
# subsidiary(-ies) nor the names of its contributors may be used
|
|
||||||
# to endorse or promote products derived from this software
|
|
||||||
# without specific prior written permission.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
# Copyright The IETF Trust 2007, All Rights Reserved
|
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.contrib.auth.models import User
|
|
||||||
from ietf.idtracker.models import PersonOrOrgInfo, IESGLogin
|
|
||||||
from ietf.utils.admin import admin_link
|
|
||||||
|
|
||||||
def find_person(username):
|
|
||||||
try:
|
|
||||||
person = IESGLogin.objects.get(login_name=username).person
|
|
||||||
return person
|
|
||||||
except IESGLogin.DoesNotExist, PersonOrOrgInfo.DoesNotExist:
|
|
||||||
pass
|
|
||||||
# try LegacyWgPassword next
|
|
||||||
try:
|
|
||||||
return LegacyWgPassword.objects.get(login_name=username).person
|
|
||||||
except LegacyWgPassword.DoesNotExist, PersonOrOrgInfo.DoesNotExist:
|
|
||||||
pass
|
|
||||||
# try LegacyLiaisonUser next
|
|
||||||
try:
|
|
||||||
return LegacyLiaisonUser.objects.get(login_name=username).person
|
|
||||||
except LegacyLiaisonUser.DoesNotExist, PersonOrOrgInfo.DoesNotExist:
|
|
||||||
pass
|
|
||||||
return None
|
|
||||||
|
|
||||||
class IetfUserProfile(models.Model):
|
|
||||||
user = models.ForeignKey(User,unique=True)
|
|
||||||
|
|
||||||
def person(self):
|
|
||||||
return find_person(self.user.username)
|
|
||||||
|
|
||||||
def iesg_login_id(self):
|
|
||||||
person = self.person()
|
|
||||||
if not person:
|
|
||||||
return None
|
|
||||||
try:
|
|
||||||
return person.iesglogin_set.all()[0].id
|
|
||||||
except:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def email(self):
|
|
||||||
# quick hack to bind new and old schema together for the time being
|
|
||||||
try:
|
|
||||||
l = IESGLogin.objects.get(login_name=self.user.username)
|
|
||||||
if l.person:
|
|
||||||
person = l.person
|
|
||||||
else:
|
|
||||||
person = PersonOrOrgInfo.objects.get(first_name=l.first_name,
|
|
||||||
last_name=l.last_name)
|
|
||||||
except IESGLogin.DoesNotExist, PersonOrOrgInfo.DoesNotExist:
|
|
||||||
person = None
|
|
||||||
from ietf.person.models import Email
|
|
||||||
return Email.objects.get(address=person.email()[1])
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return "IetfUserProfile(%s)" % (self.user,)
|
|
||||||
|
|
||||||
|
|
||||||
######################################################
|
|
||||||
# legacy per-tool access tables.
|
|
||||||
# ietf.idtracker.models.IESGLogin is in the same vein.
|
|
||||||
|
|
||||||
class LegacyLiaisonUser(models.Model):
|
|
||||||
USER_LEVEL_CHOICES = (
|
|
||||||
(0, 'Secretariat'),
|
|
||||||
(1, 'IESG'),
|
|
||||||
(2, 'ex-IESG'),
|
|
||||||
(3, 'Level 3'),
|
|
||||||
(4, 'Comment Only(?)'),
|
|
||||||
)
|
|
||||||
person = models.ForeignKey(PersonOrOrgInfo, db_column='person_or_org_tag', primary_key=True)
|
|
||||||
login_name = models.CharField(max_length=255)
|
|
||||||
password = models.CharField(max_length=25, blank=True, editable=False)
|
|
||||||
user_level = models.IntegerField(null=True, blank=True, choices=USER_LEVEL_CHOICES)
|
|
||||||
comment = models.TextField(blank=True,null=True)
|
|
||||||
def __str__(self):
|
|
||||||
return self.login_name
|
|
||||||
class Meta:
|
|
||||||
db_table = 'users'
|
|
||||||
ordering = ['login_name']
|
|
||||||
person_link = admin_link('person')
|
|
||||||
|
|
||||||
class LegacyWgPassword(models.Model):
|
|
||||||
person = models.ForeignKey(PersonOrOrgInfo, db_column='person_or_org_tag', primary_key=True)
|
|
||||||
password = models.CharField(blank=True, null=True,max_length=255)
|
|
||||||
secrete_question_id = models.IntegerField(null=True, blank=True)
|
|
||||||
secrete_answer = models.CharField(blank=True, null=True, max_length=255)
|
|
||||||
is_tut_resp = models.IntegerField(null=True, blank=True)
|
|
||||||
irtf_id = models.IntegerField(null=True, blank=True)
|
|
||||||
comment = models.TextField(blank=True,null=True)
|
|
||||||
login_name = models.CharField(blank=True, max_length=100)
|
|
||||||
def __str__(self):
|
|
||||||
return self.login_name
|
|
||||||
class Meta:
|
|
||||||
db_table = 'wg_password'
|
|
||||||
ordering = ['login_name']
|
|
||||||
person_link = admin_link('person')
|
|
||||||
|
|
||||||
# changes done by convert-096.py:changed maxlength to max_length
|
|
||||||
# removed core
|
|
||||||
# removed edit_inline
|
|
||||||
# removed max_num_in_admin
|
|
||||||
# removed num_in_admin
|
|
||||||
# removed raw_id_admin
|
|
||||||
|
|
|
@ -31,12 +31,12 @@
|
||||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
import unittest
|
import unittest
|
||||||
from django.conf import settings
|
from urlparse import urlsplit
|
||||||
|
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.test.client import Client
|
from django.test.client import Client
|
||||||
|
|
||||||
from ietf.utils.test_utils import SimpleUrlTestCase, RealDatabaseTest
|
from ietf.utils.test_utils import SimpleUrlTestCase, RealDatabaseTest
|
||||||
from ietf.idtracker.models import Role
|
|
||||||
from urlparse import urlsplit
|
|
||||||
|
|
||||||
class IetfAuthUrlTestCase(SimpleUrlTestCase):
|
class IetfAuthUrlTestCase(SimpleUrlTestCase):
|
||||||
def testUrls(self):
|
def testUrls(self):
|
||||||
|
@ -66,40 +66,3 @@ class IetfAuthTestCase(unittest.TestCase,RealDatabaseTest):
|
||||||
self.assertEquals(response.status_code, 200)
|
self.assertEquals(response.status_code, 200)
|
||||||
self.assert_("User name" in response.content)
|
self.assert_("User name" in response.content)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
def testLogin(self):
|
|
||||||
TEST_USERNAME = '__testuser'
|
|
||||||
print " Testing login with "+TEST_USERNAME
|
|
||||||
|
|
||||||
# Delete test user (if it exists)
|
|
||||||
try:
|
|
||||||
testuser = User.objects.get(username=TEST_USERNAME)
|
|
||||||
testuser.delete()
|
|
||||||
except User.DoesNotExist:
|
|
||||||
pass
|
|
||||||
|
|
||||||
self._doLogin(TEST_USERNAME)
|
|
||||||
|
|
||||||
# Delete test user after test
|
|
||||||
testuser = User.objects.get(username=TEST_USERNAME)
|
|
||||||
testuser.delete()
|
|
||||||
print "OK"
|
|
||||||
|
|
||||||
def testGroups(self):
|
|
||||||
print " Testing group assignment"
|
|
||||||
username = Role.objects.get(id=Role.IETF_CHAIR).person.iesglogin_set.all()[0].login_name
|
|
||||||
print " (with username "+str(username)+")"
|
|
||||||
|
|
||||||
self._doLogin(username)
|
|
||||||
|
|
||||||
user = User.objects.get(username=username)
|
|
||||||
groups = [x.name for x in user.groups.all()]
|
|
||||||
self.assert_("Area_Director" in groups)
|
|
||||||
self.assert_("IETF_Chair" in groups)
|
|
||||||
|
|
||||||
print "OK"
|
|
||||||
|
|
||||||
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
|
|
||||||
del IetfAuthTestCase.testLogin
|
|
||||||
# this test doesn't make any sense anymore
|
|
||||||
del IetfAuthTestCase.testGroups
|
|
||||||
|
|
|
@ -1,18 +1,14 @@
|
||||||
# Copyright The IETF Trust 2007, 2009, All Rights Reserved
|
# Copyright The IETF Trust 2007, 2009, All Rights Reserved
|
||||||
|
|
||||||
from django.conf.urls.defaults import patterns, url
|
from django.conf.urls.defaults import patterns, url
|
||||||
from ietf.ietfauth import views
|
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('ietf.ietfauth.views',
|
||||||
(r'^$', views.index, None, 'account_index'),
|
url(r'^$', 'index', name='account_index'),
|
||||||
(r'^login/$', views.ietf_login),
|
url(r'^login/$', 'ietf_login'),
|
||||||
(r'^loggedin/$', views.ietf_loggedin),
|
url(r'^loggedin/$', 'ietf_loggedin'),
|
||||||
(r'^profile/$', views.profile),
|
url(r'^profile/$', 'profile'),
|
||||||
# (r'^login/(?P<user>[a-z0-9.@]+)/(?P<passwd>.+)$', views.url_login),
|
# (r'^login/(?P<user>[a-z0-9.@]+)/(?P<passwd>.+)$', 'url_login'),
|
||||||
(r'^testemail/$', views.test_email),
|
url(r'^testemail/$', 'test_email'),
|
||||||
)
|
|
||||||
|
|
||||||
urlpatterns += patterns('ietf.ietfauth.views',
|
|
||||||
url(r'^create/$', 'create_account', name='create_account'),
|
url(r'^create/$', 'create_account', name='create_account'),
|
||||||
url(r'^confirm/(?P<username>[\w.@+-]+)/(?P<date>[\d]+)/(?P<realm>[\w]+)/(?P<hash>[a-f0-9]+)/$', 'confirm_account', name='confirm_account'),
|
url(r'^confirm/(?P<username>[\w.@+-]+)/(?P<date>[\d]+)/(?P<realm>[\w]+)/(?P<hash>[a-f0-9]+)/$', 'confirm_account', name='confirm_account'),
|
||||||
url(r'^reset/$', 'password_reset_view', name='password_reset'),
|
url(r'^reset/$', 'password_reset_view', name='password_reset'),
|
||||||
|
|
|
@ -34,6 +34,7 @@
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
import hashlib
|
import hashlib
|
||||||
|
import json
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.template import RequestContext
|
from django.template import RequestContext
|
||||||
|
@ -43,10 +44,12 @@ from django.contrib.auth import REDIRECT_FIELD_NAME, authenticate, login
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.utils.http import urlquote
|
from django.utils.http import urlquote
|
||||||
from django.utils import simplejson as json
|
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
|
from django.core.exceptions import ValidationError, NON_FIELD_ERRORS
|
||||||
|
|
||||||
from ietf.ietfauth.forms import RegistrationForm, PasswordForm, RecoverPasswordForm, TestEmailForm
|
from ietf.person.models import Person, Email, Alias
|
||||||
|
from ietf.group.models import Role
|
||||||
|
from ietf.ietfauth.forms import RegistrationForm, PasswordForm, RecoverPasswordForm, TestEmailForm, PersonForm
|
||||||
|
|
||||||
def index(request):
|
def index(request):
|
||||||
return render_to_response('registration/index.html', context_instance=RequestContext(request))
|
return render_to_response('registration/index.html', context_instance=RequestContext(request))
|
||||||
|
@ -62,8 +65,8 @@ def url_login(request, user, passwd):
|
||||||
|
|
||||||
def ietf_login(request):
|
def ietf_login(request):
|
||||||
if not request.user.is_authenticated():
|
if not request.user.is_authenticated():
|
||||||
# This probably means an exception occured inside IetfUserBackend
|
|
||||||
return HttpResponse("Not authenticated?", status=500)
|
return HttpResponse("Not authenticated?", status=500)
|
||||||
|
|
||||||
redirect_to = request.REQUEST.get(REDIRECT_FIELD_NAME, '')
|
redirect_to = request.REQUEST.get(REDIRECT_FIELD_NAME, '')
|
||||||
request.session.set_test_cookie()
|
request.session.set_test_cookie()
|
||||||
return HttpResponseRedirect('/accounts/loggedin/?%s=%s' % (REDIRECT_FIELD_NAME, urlquote(redirect_to)))
|
return HttpResponseRedirect('/accounts/loggedin/?%s=%s' % (REDIRECT_FIELD_NAME, urlquote(redirect_to)))
|
||||||
|
@ -79,10 +82,6 @@ def ietf_loggedin(request):
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def profile(request):
|
def profile(request):
|
||||||
from ietf.person.models import Person, Email, Alias
|
|
||||||
from ietf.group.models import Role
|
|
||||||
from ietf.ietfauth.forms import PersonForm
|
|
||||||
|
|
||||||
roles = []
|
roles = []
|
||||||
person = None
|
person = None
|
||||||
try:
|
try:
|
||||||
|
@ -119,8 +118,6 @@ def profile(request):
|
||||||
context_instance=RequestContext(request))
|
context_instance=RequestContext(request))
|
||||||
|
|
||||||
def confirm_new_email(request, username, date, email, hash):
|
def confirm_new_email(request, username, date, email, hash):
|
||||||
from ietf.person.models import Person, Email, Alias
|
|
||||||
from django.core.exceptions import ValidationError, NON_FIELD_ERRORS
|
|
||||||
valid = hashlib.md5('%s%s%s%s' % (settings.SECRET_KEY, date, email, username)).hexdigest() == hash
|
valid = hashlib.md5('%s%s%s%s' % (settings.SECRET_KEY, date, email, username)).hexdigest() == hash
|
||||||
if not valid:
|
if not valid:
|
||||||
raise Http404
|
raise Http404
|
||||||
|
@ -233,24 +230,15 @@ def ajax_check_username(request):
|
||||||
return HttpResponse(json.dumps({'error': error}), mimetype='text/plain')
|
return HttpResponse(json.dumps({'error': error}), mimetype='text/plain')
|
||||||
|
|
||||||
def test_email(request):
|
def test_email(request):
|
||||||
|
"""Set email address to which email generated in the system will be sent."""
|
||||||
if settings.SERVER_MODE == "production":
|
if settings.SERVER_MODE == "production":
|
||||||
raise Http404()
|
raise Http404
|
||||||
|
|
||||||
# note that the cookie set here is only used when running in
|
# Note that the cookie set here is only used when running in
|
||||||
# "test" mode, normally you run the server in "development" mode,
|
# "test" mode, normally you run the server in "development" mode,
|
||||||
# in which case email is sent out as usual; for development, put
|
# in which case email is sent out as usual; for development, you
|
||||||
# this
|
# can easily start a little email debug server with Python, see
|
||||||
#
|
# the instructions in utils/mail.py.
|
||||||
# EMAIL_HOST = 'localhost'
|
|
||||||
# EMAIL_PORT = 1025
|
|
||||||
# EMAIL_HOST_USER = None
|
|
||||||
# EMAIL_HOST_PASSWORD = None
|
|
||||||
# EMAIL_COPY_TO = ""
|
|
||||||
#
|
|
||||||
# in your settings.py and start a little debug email server in a
|
|
||||||
# console with the following (it receives and prints messages)
|
|
||||||
#
|
|
||||||
# python -m smtpd -n -c DebuggingServer localhost:1025
|
|
||||||
|
|
||||||
cookie = None
|
cookie = None
|
||||||
|
|
||||||
|
|
|
@ -1,18 +1,14 @@
|
||||||
|
|
||||||
from django.utils import simplejson as json
|
from django.utils import simplejson as json
|
||||||
from dajaxice.decorators import dajaxice_register
|
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
|
|
||||||
from ietf.ietfauth.decorators import group_required, has_role
|
|
||||||
from ietf.name.models import TimeSlotTypeName
|
|
||||||
from django.http import HttpResponseRedirect, HttpResponse, QueryDict
|
from django.http import HttpResponseRedirect, HttpResponse, QueryDict
|
||||||
|
|
||||||
|
from dajaxice.decorators import dajaxice_register
|
||||||
|
from ietf.ietfauth.utils import role_required, has_role
|
||||||
|
from ietf.name.models import TimeSlotTypeName
|
||||||
|
|
||||||
from ietf.meeting.helpers import get_meeting, get_schedule, get_schedule_by_id, agenda_permissions
|
from ietf.meeting.helpers import get_meeting, get_schedule, get_schedule_by_id, agenda_permissions
|
||||||
from ietf.meeting.views import edit_timeslots, edit_agenda
|
from ietf.meeting.views import edit_timeslots, edit_agenda
|
||||||
|
|
||||||
|
|
||||||
# New models
|
|
||||||
from ietf.meeting.models import TimeSlot, Session, Schedule, Room, Constraint
|
from ietf.meeting.models import TimeSlot, Session, Schedule, Room, Constraint
|
||||||
|
|
||||||
import debug
|
import debug
|
||||||
|
@ -50,7 +46,7 @@ def readonly(request, meeting_num, schedule_id):
|
||||||
'owner_href': request.build_absolute_uri(schedule.owner.json_url()),
|
'owner_href': request.build_absolute_uri(schedule.owner.json_url()),
|
||||||
'read_only': read_only})
|
'read_only': read_only})
|
||||||
|
|
||||||
@group_required('Area Director','Secretariat')
|
@role_required('Area Director','Secretariat')
|
||||||
@dajaxice_register
|
@dajaxice_register
|
||||||
def update_timeslot_pinned(request, schedule_id, scheduledsession_id, pinned=False):
|
def update_timeslot_pinned(request, schedule_id, scheduledsession_id, pinned=False):
|
||||||
schedule = get_object_or_404(Schedule, pk = int(schedule_id))
|
schedule = get_object_or_404(Schedule, pk = int(schedule_id))
|
||||||
|
@ -73,7 +69,7 @@ def update_timeslot_pinned(request, schedule_id, scheduledsession_id, pinned=Fal
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@group_required('Area Director','Secretariat')
|
@role_required('Area Director','Secretariat')
|
||||||
@dajaxice_register
|
@dajaxice_register
|
||||||
def update_timeslot(request, schedule_id, session_id, scheduledsession_id=None, extended_from_id=None, duplicate=False):
|
def update_timeslot(request, schedule_id, session_id, scheduledsession_id=None, extended_from_id=None, duplicate=False):
|
||||||
schedule = get_object_or_404(Schedule, pk = int(schedule_id))
|
schedule = get_object_or_404(Schedule, pk = int(schedule_id))
|
||||||
|
@ -132,7 +128,7 @@ def update_timeslot(request, schedule_id, session_id, scheduledsession_id=None,
|
||||||
|
|
||||||
return json.dumps({'message':'valid'})
|
return json.dumps({'message':'valid'})
|
||||||
|
|
||||||
@group_required('Secretariat')
|
@role_required('Secretariat')
|
||||||
@dajaxice_register
|
@dajaxice_register
|
||||||
def update_timeslot_purpose(request, timeslot_id=None, purpose=None):
|
def update_timeslot_purpose(request, timeslot_id=None, purpose=None):
|
||||||
ts_id = int(timeslot_id)
|
ts_id = int(timeslot_id)
|
||||||
|
@ -167,10 +163,8 @@ def timeslot_roomlist(request, mtg):
|
||||||
return HttpResponse(json.dumps(json_array),
|
return HttpResponse(json.dumps(json_array),
|
||||||
mimetype="application/json")
|
mimetype="application/json")
|
||||||
|
|
||||||
@group_required('Secretariat')
|
@role_required('Secretariat')
|
||||||
def timeslot_addroom(request, meeting):
|
def timeslot_addroom(request, meeting):
|
||||||
# authorization was enforced by the @group_require decorator above.
|
|
||||||
|
|
||||||
newroomform = AddRoomForm(request.POST)
|
newroomform = AddRoomForm(request.POST)
|
||||||
if not newroomform.is_valid():
|
if not newroomform.is_valid():
|
||||||
return HttpResponse(status=404)
|
return HttpResponse(status=404)
|
||||||
|
@ -188,9 +182,8 @@ def timeslot_addroom(request, meeting):
|
||||||
return HttpResponseRedirect(
|
return HttpResponseRedirect(
|
||||||
reverse(edit_timeslots, args=[meeting.number]))
|
reverse(edit_timeslots, args=[meeting.number]))
|
||||||
|
|
||||||
@group_required('Secretariat')
|
@role_required('Secretariat')
|
||||||
def timeslot_delroom(request, meeting, roomid):
|
def timeslot_delroom(request, meeting, roomid):
|
||||||
# authorization was enforced by the @group_require decorator above.
|
|
||||||
room = get_object_or_404(meeting.room_set, pk=roomid)
|
room = get_object_or_404(meeting.room_set, pk=roomid)
|
||||||
|
|
||||||
room.delete_timeslots()
|
room.delete_timeslots()
|
||||||
|
@ -235,10 +228,8 @@ def timeslot_slotlist(request, mtg):
|
||||||
return HttpResponse(json.dumps(json_array),
|
return HttpResponse(json.dumps(json_array),
|
||||||
mimetype="application/json")
|
mimetype="application/json")
|
||||||
|
|
||||||
@group_required('Secretariat')
|
@role_required('Secretariat')
|
||||||
def timeslot_addslot(request, meeting):
|
def timeslot_addslot(request, meeting):
|
||||||
|
|
||||||
# authorization was enforced by the @group_require decorator above.
|
|
||||||
addslotform = AddSlotForm(request.POST)
|
addslotform = AddSlotForm(request.POST)
|
||||||
#debug.log("newslot: %u" % ( addslotform.is_valid() ))
|
#debug.log("newslot: %u" % ( addslotform.is_valid() ))
|
||||||
if not addslotform.is_valid():
|
if not addslotform.is_valid():
|
||||||
|
@ -261,9 +252,8 @@ def timeslot_addslot(request, meeting):
|
||||||
return HttpResponseRedirect(
|
return HttpResponseRedirect(
|
||||||
reverse(edit_timeslots, args=[meeting.number]))
|
reverse(edit_timeslots, args=[meeting.number]))
|
||||||
|
|
||||||
@group_required('Secretariat')
|
@role_required('Secretariat')
|
||||||
def timeslot_delslot(request, meeting, slotid):
|
def timeslot_delslot(request, meeting, slotid):
|
||||||
# authorization was enforced by the @group_require decorator above.
|
|
||||||
slot = get_object_or_404(meeting.timeslot_set, pk=slotid)
|
slot = get_object_or_404(meeting.timeslot_set, pk=slotid)
|
||||||
|
|
||||||
# this will delete self as well.
|
# this will delete self as well.
|
||||||
|
@ -301,7 +291,7 @@ def timeslot_sloturl(request, num=None, slotid=None):
|
||||||
AgendaEntryForm = modelform_factory(Schedule, exclude=('meeting','owner'))
|
AgendaEntryForm = modelform_factory(Schedule, exclude=('meeting','owner'))
|
||||||
EditAgendaEntryForm = modelform_factory(Schedule, exclude=('meeting','owner', 'name'))
|
EditAgendaEntryForm = modelform_factory(Schedule, exclude=('meeting','owner', 'name'))
|
||||||
|
|
||||||
@group_required('Area Director','Secretariat')
|
@role_required('Area Director','Secretariat')
|
||||||
def agenda_list(request, mtg):
|
def agenda_list(request, mtg):
|
||||||
agendas = mtg.schedule_set.all()
|
agendas = mtg.schedule_set.all()
|
||||||
json_array=[]
|
json_array=[]
|
||||||
|
@ -311,10 +301,8 @@ def agenda_list(request, mtg):
|
||||||
mimetype="application/json")
|
mimetype="application/json")
|
||||||
|
|
||||||
# duplicates save-as functionality below.
|
# duplicates save-as functionality below.
|
||||||
@group_required('Area Director','Secretariat')
|
@role_required('Area Director','Secretariat')
|
||||||
def agenda_add(request, meeting):
|
def agenda_add(request, meeting):
|
||||||
# authorization was enforced by the @group_require decorator above.
|
|
||||||
|
|
||||||
newagendaform = AgendaEntryForm(request.POST)
|
newagendaform = AgendaEntryForm(request.POST)
|
||||||
if not newagendaform.is_valid():
|
if not newagendaform.is_valid():
|
||||||
return HttpResponse(status=404)
|
return HttpResponse(status=404)
|
||||||
|
@ -332,10 +320,8 @@ def agenda_add(request, meeting):
|
||||||
return HttpResponseRedirect(
|
return HttpResponseRedirect(
|
||||||
reverse(edit_agenda, args=[meeting.number, newagenda.name]))
|
reverse(edit_agenda, args=[meeting.number, newagenda.name]))
|
||||||
|
|
||||||
@group_required('Area Director','Secretariat')
|
@role_required('Area Director','Secretariat')
|
||||||
def agenda_update(request, meeting, schedule):
|
def agenda_update(request, meeting, schedule):
|
||||||
# authorization was enforced by the @group_require decorator above.
|
|
||||||
|
|
||||||
# forms are completely useless for update actions that want to
|
# forms are completely useless for update actions that want to
|
||||||
# accept a subset of values.
|
# accept a subset of values.
|
||||||
update_dict = QueryDict(request.raw_post_data, encoding=request._encoding)
|
update_dict = QueryDict(request.raw_post_data, encoding=request._encoding)
|
||||||
|
@ -380,7 +366,7 @@ def agenda_update(request, meeting, schedule):
|
||||||
return HttpResponseRedirect(
|
return HttpResponseRedirect(
|
||||||
reverse(edit_agenda, args=[meeting.number, schedule.name]))
|
reverse(edit_agenda, args=[meeting.number, schedule.name]))
|
||||||
|
|
||||||
@group_required('Secretariat')
|
@role_required('Secretariat')
|
||||||
def agenda_del(request, meeting, schedule):
|
def agenda_del(request, meeting, schedule):
|
||||||
schedule.delete_scheduledsessions()
|
schedule.delete_scheduledsessions()
|
||||||
#debug.log("deleting meeting: %s agenda: %s" % (meeting, meeting.agenda))
|
#debug.log("deleting meeting: %s agenda: %s" % (meeting, meeting.agenda))
|
||||||
|
@ -427,10 +413,8 @@ def meeting_get(request, meeting):
|
||||||
sort_keys=True, indent=2),
|
sort_keys=True, indent=2),
|
||||||
mimetype="application/json")
|
mimetype="application/json")
|
||||||
|
|
||||||
@group_required('Secretariat')
|
@role_required('Secretariat')
|
||||||
def meeting_update(request, meeting):
|
def meeting_update(request, meeting):
|
||||||
# authorization was enforced by the @group_require decorator above.
|
|
||||||
|
|
||||||
# at present, only the official agenda can be updated from this interface.
|
# at present, only the official agenda can be updated from this interface.
|
||||||
update_dict = QueryDict(request.raw_post_data, encoding=request._encoding)
|
update_dict = QueryDict(request.raw_post_data, encoding=request._encoding)
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ from django.utils.cache import get_cache_key
|
||||||
import debug
|
import debug
|
||||||
|
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
from ietf.ietfauth.decorators import has_role
|
from ietf.ietfauth.utils import has_role
|
||||||
from ietf.utils.history import find_history_active_at
|
from ietf.utils.history import find_history_active_at
|
||||||
from ietf.doc.models import Document, State
|
from ietf.doc.models import Document, State
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ from ietf.utils import TestCase
|
||||||
from ietf.person.models import Person
|
from ietf.person.models import Person
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from ietf.meeting.models import TimeSlot, Session, ScheduledSession, Meeting
|
from ietf.meeting.models import TimeSlot, Session, ScheduledSession, Meeting
|
||||||
from ietf.ietfauth.decorators import has_role
|
from ietf.ietfauth.utils import has_role
|
||||||
from auths import auth_joeblow, auth_wlo, auth_ietfchair, auth_ferrel
|
from auths import auth_joeblow, auth_wlo, auth_ietfchair, auth_ferrel
|
||||||
from django.utils import simplejson as json
|
from django.utils import simplejson as json
|
||||||
from ietf.meeting.helpers import get_meeting
|
from ietf.meeting.helpers import get_meeting
|
||||||
|
|
|
@ -3,7 +3,7 @@ from django.test import Client
|
||||||
from ietf.utils import TestCase
|
from ietf.utils import TestCase
|
||||||
#from ietf.person.models import Person
|
#from ietf.person.models import Person
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from ietf.ietfauth.decorators import has_role
|
from ietf.ietfauth.utils import has_role
|
||||||
|
|
||||||
# from http://djangosnippets.org/snippets/850/
|
# from http://djangosnippets.org/snippets/850/
|
||||||
|
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
# Copyright The IETF Trust 2007, All Rights Reserved
|
# Copyright The IETF Trust 2007, All Rights Reserved
|
||||||
|
|
||||||
#import models
|
|
||||||
import datetime
|
import datetime
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import tarfile
|
import tarfile
|
||||||
|
import debug
|
||||||
|
import urllib
|
||||||
|
|
||||||
from tempfile import mkstemp
|
from tempfile import mkstemp
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.shortcuts import render_to_response, get_object_or_404
|
from django.shortcuts import render_to_response, get_object_or_404
|
||||||
from django.utils import simplejson as json
|
from django.utils import simplejson as json
|
||||||
from ietf.idtracker.models import IETFWG, IRTF, Area
|
|
||||||
from django.http import HttpResponseRedirect, HttpResponse, Http404
|
from django.http import HttpResponseRedirect, HttpResponse, Http404
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
|
@ -19,16 +19,14 @@ from django.template import RequestContext
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.utils.decorators import decorator_from_middleware
|
from django.utils.decorators import decorator_from_middleware
|
||||||
from ietf.ietfauth.decorators import group_required, has_role
|
|
||||||
from django.middleware.gzip import GZipMiddleware
|
from django.middleware.gzip import GZipMiddleware
|
||||||
from django.db.models import Max
|
from django.db.models import Max
|
||||||
from django.forms.models import modelform_factory
|
from django.forms.models import modelform_factory
|
||||||
|
|
||||||
import debug
|
|
||||||
import urllib
|
|
||||||
|
|
||||||
from ietf.utils.pipe import pipe
|
from ietf.utils.pipe import pipe
|
||||||
from ietf.doc.models import Document, State
|
from ietf.doc.models import Document, State
|
||||||
|
from ietf.idtracker.models import IETFWG, IRTF, Area
|
||||||
|
from ietf.ietfauth.utils import role_required, has_role
|
||||||
|
|
||||||
# Old model -- needs to be removed
|
# Old model -- needs to be removed
|
||||||
from ietf.proceedings.models import Meeting as OldMeeting, WgMeetingSession, Proceeding, Switches
|
from ietf.proceedings.models import Meeting as OldMeeting, WgMeetingSession, Proceeding, Switches
|
||||||
|
@ -46,8 +44,6 @@ from ietf.meeting.helpers import get_modified_from_scheduledsessions
|
||||||
from ietf.meeting.helpers import get_wg_list, find_ads_for_meeting
|
from ietf.meeting.helpers import get_wg_list, find_ads_for_meeting
|
||||||
from ietf.meeting.helpers import get_meeting, get_schedule, agenda_permissions
|
from ietf.meeting.helpers import get_meeting, get_schedule, agenda_permissions
|
||||||
|
|
||||||
import debug
|
|
||||||
|
|
||||||
@decorator_from_middleware(GZipMiddleware)
|
@decorator_from_middleware(GZipMiddleware)
|
||||||
def materials(request, meeting_num=None):
|
def materials(request, meeting_num=None):
|
||||||
proceeding = get_object_or_404(Proceeding, meeting_num=meeting_num)
|
proceeding = get_object_or_404(Proceeding, meeting_num=meeting_num)
|
||||||
|
@ -100,7 +96,7 @@ def get_user_agent(request):
|
||||||
class SaveAsForm(forms.Form):
|
class SaveAsForm(forms.Form):
|
||||||
savename = forms.CharField(max_length=100)
|
savename = forms.CharField(max_length=100)
|
||||||
|
|
||||||
@group_required('Area Director','Secretariat')
|
@role_required('Area Director','Secretariat')
|
||||||
def agenda_create(request, num=None, schedule_name=None):
|
def agenda_create(request, num=None, schedule_name=None):
|
||||||
meeting = get_meeting(num)
|
meeting = get_meeting(num)
|
||||||
schedule = get_schedule(meeting, schedule_name)
|
schedule = get_schedule(meeting, schedule_name)
|
||||||
|
@ -203,7 +199,7 @@ def edit_timeslots(request, num=None):
|
||||||
RequestContext(request)), mimetype="text/html")
|
RequestContext(request)), mimetype="text/html")
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
#@group_required('Area Director','Secretariat')
|
#@role_required('Area Director','Secretariat')
|
||||||
# disable the above security for now, check it below.
|
# disable the above security for now, check it below.
|
||||||
@decorator_from_middleware(GZipMiddleware)
|
@decorator_from_middleware(GZipMiddleware)
|
||||||
def edit_agenda(request, num=None, schedule_name=None):
|
def edit_agenda(request, num=None, schedule_name=None):
|
||||||
|
@ -293,7 +289,7 @@ def edit_agenda(request, num=None, schedule_name=None):
|
||||||
#
|
#
|
||||||
AgendaPropertiesForm = modelform_factory(Schedule, fields=('name','visible', 'public'))
|
AgendaPropertiesForm = modelform_factory(Schedule, fields=('name','visible', 'public'))
|
||||||
|
|
||||||
@group_required('Area Director','Secretariat')
|
@role_required('Area Director','Secretariat')
|
||||||
@decorator_from_middleware(GZipMiddleware)
|
@decorator_from_middleware(GZipMiddleware)
|
||||||
def edit_agenda_properties(request, num=None, schedule_name=None):
|
def edit_agenda_properties(request, num=None, schedule_name=None):
|
||||||
|
|
||||||
|
@ -311,7 +307,7 @@ def edit_agenda_properties(request, num=None, schedule_name=None):
|
||||||
# show list of agendas.
|
# show list of agendas.
|
||||||
#
|
#
|
||||||
|
|
||||||
@group_required('Area Director','Secretariat')
|
@role_required('Area Director','Secretariat')
|
||||||
@decorator_from_middleware(GZipMiddleware)
|
@decorator_from_middleware(GZipMiddleware)
|
||||||
def edit_agendas(request, num=None, order=None):
|
def edit_agendas(request, num=None, order=None):
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ from django.core.urlresolvers import reverse
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
from django.utils.http import urlquote
|
from django.utils.http import urlquote
|
||||||
|
|
||||||
from ietf.ietfauth.decorators import passes_test_decorator
|
from ietf.ietfauth.utils import passes_test_decorator
|
||||||
|
|
||||||
from ietf.nomcom.utils import get_nomcom_by_year
|
from ietf.nomcom.utils import get_nomcom_by_year
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ from django.template.context import RequestContext
|
||||||
|
|
||||||
from ietf.dbtemplate.forms import DBTemplateForm
|
from ietf.dbtemplate.forms import DBTemplateForm
|
||||||
from ietf.utils.mail import send_mail
|
from ietf.utils.mail import send_mail
|
||||||
from ietf.ietfauth.decorators import role_required
|
from ietf.ietfauth.utils import role_required
|
||||||
from ietf.utils import fields as custom_fields
|
from ietf.utils import fields as custom_fields
|
||||||
from ietf.group.models import Group, Role
|
from ietf.group.models import Group, Role
|
||||||
from ietf.name.models import RoleName, FeedbackType, NomineePositionState
|
from ietf.name.models import RoleName, FeedbackType, NomineePositionState
|
||||||
|
|
|
@ -7,7 +7,7 @@ from django.template.defaultfilters import linebreaksbr, force_escape
|
||||||
|
|
||||||
from ietf.utils.pipe import pipe
|
from ietf.utils.pipe import pipe
|
||||||
from ietf.utils.log import log
|
from ietf.utils.log import log
|
||||||
from ietf.ietfauth.decorators import has_role
|
from ietf.ietfauth.utils import has_role
|
||||||
from ietf.doc.templatetags.ietf_filters import wrap_text
|
from ietf.doc.templatetags.ietf_filters import wrap_text
|
||||||
|
|
||||||
from ietf.person.models import Person
|
from ietf.person.models import Person
|
||||||
|
|
|
@ -1,17 +1,15 @@
|
||||||
from django.utils import simplejson as json
|
|
||||||
from dajaxice.core import dajaxice_functions
|
|
||||||
from dajaxice.decorators import dajaxice_register
|
|
||||||
from ietf.ietfauth.decorators import group_required
|
|
||||||
from django.shortcuts import get_object_or_404
|
|
||||||
from django.http import HttpResponseRedirect, HttpResponse, Http404
|
|
||||||
|
|
||||||
from ietf.person.models import Person
|
|
||||||
import datetime
|
import datetime
|
||||||
import logging
|
import logging
|
||||||
import sys
|
import sys
|
||||||
from ietf.settings import LOG_DIR
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
from django.utils import simplejson as json
|
||||||
|
from django.shortcuts import get_object_or_404
|
||||||
|
from django.http import HttpResponseRedirect, HttpResponse, Http404
|
||||||
|
|
||||||
|
from dajaxice.core import dajaxice_functions
|
||||||
|
from dajaxice.decorators import dajaxice_register
|
||||||
|
|
||||||
|
from ietf.person.models import Person
|
||||||
|
|
||||||
def person_json(request, personid):
|
def person_json(request, personid):
|
||||||
person = get_object_or_404(Person, pk=personid)
|
person = get_object_or_404(Person, pk=personid)
|
||||||
|
|
|
@ -6,7 +6,7 @@ from ietf.secr.utils.mail import MultiEmailField
|
||||||
from ietf.secr.utils.group import current_nomcom
|
from ietf.secr.utils.group import current_nomcom
|
||||||
|
|
||||||
from ietf.message.models import Message
|
from ietf.message.models import Message
|
||||||
from ietf.ietfauth.decorators import has_role
|
from ietf.ietfauth.utils import has_role
|
||||||
|
|
||||||
# ---------------------------------------------
|
# ---------------------------------------------
|
||||||
# Globals
|
# Globals
|
||||||
|
|
|
@ -4,7 +4,7 @@ from ietf.utils import TestCase
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
from ietf.group.models import Group
|
from ietf.group.models import Group
|
||||||
from ietf.ietfauth.decorators import has_role
|
from ietf.ietfauth.utils import has_role
|
||||||
from ietf.person.models import Person
|
from ietf.person.models import Person
|
||||||
from ietf.utils.mail import outbox
|
from ietf.utils.mail import outbox
|
||||||
from ietf.utils.test_data import make_test_data
|
from ietf.utils.test_data import make_test_data
|
||||||
|
|
|
@ -4,7 +4,7 @@ from django.http import HttpResponseRedirect, HttpResponse, HttpResponseForbidde
|
||||||
from django.shortcuts import render_to_response, get_object_or_404
|
from django.shortcuts import render_to_response, get_object_or_404
|
||||||
from django.template import RequestContext
|
from django.template import RequestContext
|
||||||
|
|
||||||
from ietf.ietfauth.decorators import has_role
|
from ietf.ietfauth.utils import has_role
|
||||||
from ietf.utils.mail import send_mail_text
|
from ietf.utils.mail import send_mail_text
|
||||||
from ietf.group.models import Group
|
from ietf.group.models import Group
|
||||||
from ietf.secr.utils.group import current_nomcom
|
from ietf.secr.utils.group import current_nomcom
|
||||||
|
|
|
@ -3,7 +3,7 @@ from ietf.utils import TestCase
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
from ietf.group.models import Group, GroupEvent
|
from ietf.group.models import Group, GroupEvent
|
||||||
from ietf.ietfauth.decorators import has_role
|
from ietf.ietfauth.utils import has_role
|
||||||
from ietf.person.models import Person
|
from ietf.person.models import Person
|
||||||
from ietf.utils.test_data import make_test_data
|
from ietf.utils.test_data import make_test_data
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ from django.conf import settings
|
||||||
from django.http import HttpResponseForbidden
|
from django.http import HttpResponseForbidden
|
||||||
from django.shortcuts import render_to_response
|
from django.shortcuts import render_to_response
|
||||||
|
|
||||||
from ietf.ietfauth.decorators import has_role
|
from ietf.ietfauth.utils import has_role
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ from ietf.doc.models import Document, DocAlias, DocEvent, State, NewRevisionDocE
|
||||||
from ietf.group.models import Group
|
from ietf.group.models import Group
|
||||||
from ietf.group.proxy import IETFWG
|
from ietf.group.proxy import IETFWG
|
||||||
from ietf.group.utils import get_charter_text
|
from ietf.group.utils import get_charter_text
|
||||||
from ietf.ietfauth.decorators import has_role
|
from ietf.ietfauth.utils import has_role
|
||||||
from ietf.meeting.models import Meeting, Session, TimeSlot, ScheduledSession
|
from ietf.meeting.models import Meeting, Session, TimeSlot, ScheduledSession
|
||||||
from ietf.name.models import MeetingTypeName, SessionStatusName
|
from ietf.name.models import MeetingTypeName, SessionStatusName
|
||||||
from ietf.person.models import Person
|
from ietf.person.models import Person
|
||||||
|
|
|
@ -5,7 +5,7 @@ from django.core.urlresolvers import reverse
|
||||||
from ietf.utils import TestCase
|
from ietf.utils import TestCase
|
||||||
from django.test.client import Client
|
from django.test.client import Client
|
||||||
from ietf.group.models import Group
|
from ietf.group.models import Group
|
||||||
from ietf.ietfauth.decorators import has_role
|
from ietf.ietfauth.utils import has_role
|
||||||
from ietf.utils.test_data import make_test_data
|
from ietf.utils.test_data import make_test_data
|
||||||
from ietf.utils.test_utils import SimpleUrlTestCase, RealDatabaseTest
|
from ietf.utils.test_utils import SimpleUrlTestCase, RealDatabaseTest
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ from ietf.secr.utils.mail import get_ad_email_list, get_chair_email_list, get_cc
|
||||||
from ietf.secr.utils.decorators import check_permissions, sec_only
|
from ietf.secr.utils.decorators import check_permissions, sec_only
|
||||||
from ietf.secr.utils.group import get_my_groups, groups_by_session
|
from ietf.secr.utils.group import get_my_groups, groups_by_session
|
||||||
|
|
||||||
from ietf.ietfauth.decorators import has_role
|
from ietf.ietfauth.utils import has_role
|
||||||
from ietf.utils.mail import send_mail
|
from ietf.utils.mail import send_mail
|
||||||
from ietf.meeting.models import Meeting, Session, Constraint
|
from ietf.meeting.models import Meeting, Session, Constraint
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ from django.http import HttpResponseRedirect
|
||||||
from django.shortcuts import render_to_response, get_object_or_404
|
from django.shortcuts import render_to_response, get_object_or_404
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
|
|
||||||
from ietf.ietfauth.decorators import has_role
|
from ietf.ietfauth.utils import has_role
|
||||||
from ietf.doc.models import Document
|
from ietf.doc.models import Document
|
||||||
from ietf.group.models import Group
|
from ietf.group.models import Group
|
||||||
from ietf.meeting.models import Session
|
from ietf.meeting.models import Session
|
||||||
|
|
|
@ -2,7 +2,7 @@ from django.conf import settings
|
||||||
from ietf.group.models import Group
|
from ietf.group.models import Group
|
||||||
from ietf.meeting.models import Session
|
from ietf.meeting.models import Session
|
||||||
|
|
||||||
from ietf.ietfauth.decorators import has_role
|
from ietf.ietfauth.utils import has_role
|
||||||
|
|
||||||
import itertools
|
import itertools
|
||||||
import os
|
import os
|
||||||
|
|
|
@ -9,7 +9,7 @@ from django import forms
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
|
||||||
from ietf.ietfauth.decorators import role_required, has_role
|
from ietf.ietfauth.utils import role_required, has_role
|
||||||
from ietf.doc.models import *
|
from ietf.doc.models import *
|
||||||
from ietf.sync import iana, rfceditor
|
from ietf.sync import iana, rfceditor
|
||||||
from ietf.sync.discrepancies import find_discrepancies
|
from ietf.sync.discrepancies import find_discrepancies
|
||||||
|
|
|
@ -16,7 +16,7 @@ from django.contrib import messages
|
||||||
from ietf.utils.mail import send_mail_preformatted
|
from ietf.utils.mail import send_mail_preformatted
|
||||||
from ietf.utils.textupload import get_cleaned_text_file_content
|
from ietf.utils.textupload import get_cleaned_text_file_content
|
||||||
from ietf.utils.history import find_history_active_at
|
from ietf.utils.history import find_history_active_at
|
||||||
from ietf.ietfauth.decorators import has_role, role_required
|
from ietf.ietfauth.utils import has_role, role_required
|
||||||
from ietf.iesg.models import TelechatDate
|
from ietf.iesg.models import TelechatDate
|
||||||
from ietf.doc.models import *
|
from ietf.doc.models import *
|
||||||
from ietf.doc.utils import *
|
from ietf.doc.utils import *
|
||||||
|
|
|
@ -11,7 +11,7 @@ from django.utils.html import mark_safe
|
||||||
|
|
||||||
import debug
|
import debug
|
||||||
|
|
||||||
from ietf.ietfauth.decorators import role_required, has_role
|
from ietf.ietfauth.utils import role_required, has_role
|
||||||
|
|
||||||
from ietf.doc.models import *
|
from ietf.doc.models import *
|
||||||
from ietf.name.models import *
|
from ietf.name.models import *
|
||||||
|
|
|
@ -11,7 +11,7 @@ from django.utils.html import mark_safe, escape
|
||||||
from django.utils.functional import lazy
|
from django.utils.functional import lazy
|
||||||
from django.core.urlresolvers import reverse as urlreverse
|
from django.core.urlresolvers import reverse as urlreverse
|
||||||
|
|
||||||
from ietf.ietfauth.decorators import role_required, has_role
|
from ietf.ietfauth.utils import role_required, has_role
|
||||||
from ietf.doc.models import Document, DocEvent
|
from ietf.doc.models import Document, DocEvent
|
||||||
from ietf.doc.utils import get_chartering_type
|
from ietf.doc.utils import get_chartering_type
|
||||||
from ietf.group.models import *
|
from ietf.group.models import *
|
||||||
|
|
Loading…
Reference in a new issue