Changed the code to use django's own authentication, instead of http basic auth. This will let people log out, and will also use stronger password hashing than basic auth. Added a login page, and logout links, and links from the logged in username (in the upper right corner) to the user's profile page.
- Legacy-Id: 7580
This commit is contained in:
commit
156b0d4e3a
|
@ -349,7 +349,7 @@ class AddCommentTestCase(TestCase):
|
|||
self.assertTrue(draft.name in outbox[-1]['Subject'])
|
||||
|
||||
# Make sure we can also do it as IANA
|
||||
self.client.login(remote_user="iana")
|
||||
self.client.login(username="iana", password="iana+password")
|
||||
|
||||
# normal get
|
||||
r = self.client.get(url)
|
||||
|
|
|
@ -141,7 +141,7 @@ class ChangeStateTests(TestCase):
|
|||
draft = make_test_data()
|
||||
draft.set_state(State.objects.get(used=True, type="draft-iesg", slug="ad-eval"))
|
||||
|
||||
self.client.login(remote_user="secretary")
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
url = urlreverse('doc_change_state', kwargs=dict(name=draft.name))
|
||||
|
||||
mailbox_before = len(outbox)
|
||||
|
@ -820,7 +820,7 @@ class IndividualInfoFormsTests(TestCase):
|
|||
url = urlreverse('doc_shepherd_writeup',kwargs=dict(name=self.docname))
|
||||
|
||||
# get as a shepherd
|
||||
self.client.login(remote_user="plain")
|
||||
self.client.login(username="plain", password="plain+password")
|
||||
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code,200)
|
||||
|
@ -874,14 +874,14 @@ class IndividualInfoFormsTests(TestCase):
|
|||
class SubmitToIesgTests(TestCase):
|
||||
def verify_permissions(self):
|
||||
|
||||
def verify_fail(remote_user):
|
||||
if remote_user:
|
||||
self.client.login(remote_user=remote_user)
|
||||
def verify_fail(username):
|
||||
if username:
|
||||
self.client.login(username=username, password=username+"+password")
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code,404)
|
||||
|
||||
def verify_can_see(remote_user):
|
||||
self.client.login(remote_user=remote_user)
|
||||
def verify_can_see(username):
|
||||
self.client.login(username=username, password=username+"+password")
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code,200)
|
||||
q = PyQuery(r.content)
|
||||
|
@ -897,7 +897,7 @@ class SubmitToIesgTests(TestCase):
|
|||
|
||||
def cancel_submission(self):
|
||||
url = urlreverse('doc_to_iesg', kwargs=dict(name=self.docname))
|
||||
self.client.login(remote_user='marschairman')
|
||||
self.client.login(username="marschairman", password="marschairman+password")
|
||||
|
||||
r = self.client.post(url, dict(cancel="1"))
|
||||
self.assertEqual(r.status_code, 302)
|
||||
|
@ -907,7 +907,7 @@ class SubmitToIesgTests(TestCase):
|
|||
|
||||
def confirm_submission(self):
|
||||
url = urlreverse('doc_to_iesg', kwargs=dict(name=self.docname))
|
||||
self.client.login(remote_user='marschairman')
|
||||
self.client.login(username="marschairman", password="marschairman+password")
|
||||
|
||||
docevent_count_pre = self.doc.docevent_set.count()
|
||||
mailbox_before = len(outbox)
|
||||
|
|
|
@ -410,7 +410,7 @@ class RescheduleOnAgendaTests(TestCase):
|
|||
|
||||
url = urlreverse('ietf.iesg.views.agenda_documents')
|
||||
|
||||
self.client.login(remote_user="secretary")
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
|
||||
# normal get
|
||||
r = self.client.get(url)
|
||||
|
|
|
@ -44,25 +44,34 @@ class IetfAuthTests(TestCase):
|
|||
def test_login(self):
|
||||
make_test_data()
|
||||
|
||||
# try logging in with a next
|
||||
r = self.client.get('/accounts/login/?next=/foobar', REMOTE_USER="plain")
|
||||
self.assertEqual(r.status_code, 302)
|
||||
self.assertEqual(urlsplit(r["Location"])[2], "/accounts/loggedin/")
|
||||
# try logging in without a next
|
||||
r = self.client.get('/accounts/login/')
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
||||
r = self.client.get('/accounts/loggedin/?next=/foobar', REMOTE_USER="plain")
|
||||
self.assertEqual(r.status_code, 302)
|
||||
self.assertEqual(urlsplit(r["Location"])[2], "/foobar")
|
||||
|
||||
# try again without a next
|
||||
r = self.client.get('/accounts/login/', REMOTE_USER="plain")
|
||||
r = self.client.get('/accounts/loggedin/', REMOTE_USER="plain")
|
||||
r = self.client.post('/accounts/login/', {"username":"plain", "password":"plain+password"})
|
||||
self.assertEqual(r.status_code, 302)
|
||||
self.assertEqual(urlsplit(r["Location"])[2], "/accounts/profile/")
|
||||
|
||||
# try logging out
|
||||
r = self.client.get('/accounts/logout/')
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
||||
r = self.client.get('/accounts/profile/')
|
||||
self.assertEqual(r.status_code, 302)
|
||||
self.assertEqual(urlsplit(r["Location"])[2], "/accounts/login/")
|
||||
|
||||
# try logging in with a next
|
||||
r = self.client.post('/accounts/login/?next=/foobar', {"username":"plain", "password":"plain+password"})
|
||||
self.assertEqual(r.status_code, 302)
|
||||
self.assertEqual(urlsplit(r["Location"])[2], "/foobar")
|
||||
|
||||
|
||||
def test_profile(self):
|
||||
make_test_data()
|
||||
|
||||
url = urlreverse('ietf.ietfauth.views.profile')
|
||||
login_testing_unauthorized(self, "plain", url)
|
||||
|
||||
|
||||
# get
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
# Copyright The IETF Trust 2007, 2009, All Rights Reserved
|
||||
|
||||
from django.conf.urls import patterns, url
|
||||
from django.contrib.auth.views import login, logout
|
||||
|
||||
urlpatterns = patterns('ietf.ietfauth.views',
|
||||
url(r'^$', 'index', name='account_index'),
|
||||
url(r'^login/$', 'ietf_login'),
|
||||
url(r'^loggedin/$', 'ietf_loggedin'),
|
||||
# url(r'^login/$', 'ietf_login'),
|
||||
url(r'^login/$', login),
|
||||
url(r'^logout/$', logout),
|
||||
# url(r'^loggedin/$', 'ietf_loggedin'),
|
||||
# url(r'^loggedout/$', 'logged_out'),
|
||||
url(r'^profile/$', 'profile'),
|
||||
# (r'^login/(?P<user>[a-z0-9.@]+)/(?P<passwd>.+)$', 'url_login'),
|
||||
url(r'^testemail/$', 'test_email'),
|
||||
|
|
|
@ -63,6 +63,7 @@ def url_login(request, user, passwd):
|
|||
return HttpResponseRedirect('/accounts/loggedin/?%s=%s' % (REDIRECT_FIELD_NAME, urlquote(redirect_to)))
|
||||
return HttpResponse("Not authenticated?", status=500)
|
||||
|
||||
@login_required
|
||||
def ietf_login(request):
|
||||
if not request.user.is_authenticated():
|
||||
return HttpResponse("Not authenticated?", status=500)
|
||||
|
@ -258,4 +259,3 @@ def test_email(request):
|
|||
r.set_cookie("testmailcc", cookie)
|
||||
|
||||
return r
|
||||
|
||||
|
|
|
@ -158,7 +158,7 @@ class LiaisonManagementTests(TestCase):
|
|||
self.assertEqual(len(q('form input[name=do_action_taken]')), 0)
|
||||
|
||||
# log in and get
|
||||
self.client.login(remote_user="secretary")
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
|
|
@ -44,7 +44,7 @@ class ApiTests(TestCase):
|
|||
self.assertEqual(ScheduledSession.objects.get(pk=mars_scheduled.pk).session, session)
|
||||
|
||||
# faulty post - logged in as non-owner
|
||||
self.client.login(remote_user="ad")
|
||||
self.client.login(username="ad", password="ad+password")
|
||||
r = do_post(to=ames_scheduled)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue("error" in json.loads(r.content))
|
||||
|
@ -58,7 +58,7 @@ class ApiTests(TestCase):
|
|||
test_schedule.save()
|
||||
|
||||
# move to ames
|
||||
self.client.login(remote_user="secretary")
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = do_post(to=ames_scheduled)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue("error" not in json.loads(r.content))
|
||||
|
@ -67,7 +67,7 @@ class ApiTests(TestCase):
|
|||
self.assertEqual(ScheduledSession.objects.get(pk=ames_scheduled.pk).session, session)
|
||||
|
||||
# unschedule
|
||||
self.client.login(remote_user="secretary")
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = do_post(to=None)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue("error" not in json.loads(r.content))
|
||||
|
@ -121,7 +121,7 @@ class ApiTests(TestCase):
|
|||
self.assertTrue(not meeting.room_set.filter(name="new room"))
|
||||
|
||||
# create room
|
||||
self.client.login(remote_user="secretary")
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = self.client.post(url, post_data)
|
||||
self.assertTrue(meeting.room_set.filter(name="new room"))
|
||||
|
||||
|
@ -141,7 +141,7 @@ class ApiTests(TestCase):
|
|||
self.assertTrue(meeting.room_set.filter(pk=room.pk))
|
||||
|
||||
# delete
|
||||
self.client.login(remote_user="secretary")
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = self.client.delete(url)
|
||||
self.assertTrue(not meeting.room_set.filter(pk=room.pk))
|
||||
self.assertTrue(not TimeSlot.objects.filter(pk__in=timeslots_before))
|
||||
|
@ -189,12 +189,12 @@ class ApiTests(TestCase):
|
|||
}
|
||||
|
||||
# unauthorized post
|
||||
self.client.login(remote_user="ad")
|
||||
self.client.login(username="ad", password="ad+password")
|
||||
r = self.client.post(url, post_data)
|
||||
self.assertEqual(r.status_code, 403)
|
||||
|
||||
# create room
|
||||
self.client.login(remote_user="secretary")
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = self.client.post(url, post_data)
|
||||
self.assertEqual(r.status_code, 302)
|
||||
self.assertTrue(meeting.timeslot_set.filter(time=slot_time))
|
||||
|
@ -207,12 +207,12 @@ class ApiTests(TestCase):
|
|||
kwargs=dict(num=meeting.number, slotid=slot.pk))
|
||||
|
||||
# unauthorized delete
|
||||
self.client.login(remote_user="ad")
|
||||
self.client.login(username="ad", password="ad+password")
|
||||
r = self.client.delete(url)
|
||||
self.assertEqual(r.status_code, 403)
|
||||
|
||||
# delete
|
||||
self.client.login(remote_user="secretary")
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
self.client.delete(url)
|
||||
self.assertTrue(not meeting.timeslot_set.filter(pk=slot.pk))
|
||||
|
||||
|
@ -236,13 +236,13 @@ class ApiTests(TestCase):
|
|||
}
|
||||
|
||||
# unauthorized post
|
||||
self.client.login(remote_user="plain")
|
||||
self.client.login(username="plain", password="plain+password")
|
||||
r = self.client.post(url, post_data)
|
||||
self.assertEqual(r.status_code, 403)
|
||||
self.assertTrue(not meeting.schedule_set.filter(name='new-agenda'))
|
||||
|
||||
# create new agenda
|
||||
self.client.login(remote_user="secretary")
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = self.client.post(url, post_data)
|
||||
self.assertEqual(r.status_code, 302)
|
||||
self.assertTrue(meeting.schedule_set.filter(name='new-agenda'))
|
||||
|
@ -262,12 +262,12 @@ class ApiTests(TestCase):
|
|||
}
|
||||
|
||||
# unauthorized post
|
||||
self.client.login(remote_user="plain")
|
||||
self.client.login(username="plain", password="plain+password")
|
||||
r = self.client.post(url, post_data)
|
||||
self.assertEqual(r.status_code, 403)
|
||||
|
||||
# change agenda
|
||||
self.client.login(remote_user="ad")
|
||||
self.client.login(username="ad", password="ad+password")
|
||||
r = self.client.post(url, post_data)
|
||||
self.assertEqual(r.status_code, 302)
|
||||
changed_schedule = Schedule.objects.get(pk=meeting.agenda.pk)
|
||||
|
@ -281,12 +281,12 @@ class ApiTests(TestCase):
|
|||
kwargs=dict(num=meeting.number,
|
||||
schedule_name=meeting.agenda.name))
|
||||
# unauthorized delete
|
||||
self.client.login(remote_user="plain")
|
||||
self.client.login(username="plain", password="plain+password")
|
||||
r = self.client.delete(url)
|
||||
self.assertEqual(r.status_code, 403)
|
||||
|
||||
# delete
|
||||
self.client.login(remote_user="secretary")
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = self.client.delete(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue(not Schedule.objects.filter(pk=meeting.agenda.pk))
|
||||
|
@ -301,12 +301,12 @@ class ApiTests(TestCase):
|
|||
"agenda": "",
|
||||
}
|
||||
# unauthorized post
|
||||
self.client.login(remote_user="ad")
|
||||
self.client.login(username="ad", password="ad+password")
|
||||
r = self.client.post(url, post_data)
|
||||
self.assertEqual(r.status_code, 403)
|
||||
|
||||
# clear
|
||||
self.client.login(remote_user="secretary")
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = self.client.post(url, post_data)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue(not Meeting.objects.get(pk=meeting.pk).agenda)
|
||||
|
@ -340,7 +340,7 @@ class ApiTests(TestCase):
|
|||
})}
|
||||
|
||||
# Secretariat
|
||||
self.client.login(remote_user="secretary")
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = self.client.post('/dajaxice/ietf.meeting.readonly/', data)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
||||
|
@ -351,7 +351,8 @@ class ApiTests(TestCase):
|
|||
self.assertEqual(info['write_perm'], True)
|
||||
|
||||
# owner
|
||||
self.client.login(remote_user=meeting.agenda.owner.user.username)
|
||||
self.client.login(username=meeting.agenda.owner.user.username,
|
||||
password=meeting.agenda.owner.user.username+"+password")
|
||||
r = self.client.post('/dajaxice/ietf.meeting.readonly/', data)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
||||
|
@ -383,7 +384,7 @@ class ApiTests(TestCase):
|
|||
# set pinned
|
||||
meeting.agenda.owner = Person.objects.get(user__username="secretary")
|
||||
meeting.agenda.save()
|
||||
self.client.login(remote_user="secretary")
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = self.client.post(url, post_data)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue(ScheduledSession.objects.get(pk=scheduled.pk).pinned)
|
||||
|
|
|
@ -154,7 +154,7 @@ class EditTests(TestCase):
|
|||
def test_edit_agenda(self):
|
||||
meeting = make_meeting_test_data()
|
||||
|
||||
self.client.login(remote_user="secretary")
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = self.client.get(urlreverse("ietf.meeting.views.edit_agenda", kwargs=dict(num=meeting.number)))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue("session_obj" in r.content)
|
||||
|
@ -164,7 +164,7 @@ class EditTests(TestCase):
|
|||
url = urlreverse("ietf.meeting.views.edit_agenda", kwargs=dict(num=meeting.number))
|
||||
|
||||
# save as
|
||||
self.client.login(remote_user="ad")
|
||||
self.client.login(username="ad", password="ad+password")
|
||||
r = self.client.post(url, {
|
||||
'savename': "foo",
|
||||
'saveas': "saveas",
|
||||
|
@ -196,14 +196,14 @@ class EditTests(TestCase):
|
|||
schedule.visible = False
|
||||
schedule.public = False
|
||||
schedule.save()
|
||||
self.client.login(remote_user="secretary")
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
||||
def test_edit_timeslots(self):
|
||||
meeting = make_meeting_test_data()
|
||||
|
||||
self.client.login(remote_user="secretary")
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = self.client.get(urlreverse("ietf.meeting.views.edit_timeslots", kwargs=dict(num=meeting.number)))
|
||||
self.assertEqual(r.status_code, 200)
|
||||
self.assertTrue(meeting.room_set.all().first().name in r.content)
|
||||
|
|
|
@ -113,7 +113,10 @@ def nomcom_test_data():
|
|||
create_person(group, "member", username=MEMBER_USER)
|
||||
|
||||
# nominee
|
||||
u, _ = User.objects.get_or_create(username=COMMUNITY_USER)
|
||||
u, created = User.objects.get_or_create(username=COMMUNITY_USER)
|
||||
if created:
|
||||
u.set_password(COMMUNITY_USER+"+password")
|
||||
u.save()
|
||||
plainman, _ = Person.objects.get_or_create(name="Plain Man", ascii="Plain Man", user=u)
|
||||
email, _ = Email.objects.get_or_create(address="plain@example.com", person=plainman)
|
||||
nominee, _ = Nominee.objects.get_or_create(email=email, nomcom=nomcom)
|
||||
|
|
|
@ -305,15 +305,17 @@ class NomcomViewsTest(TestCase):
|
|||
self.change_members([CHAIR_USER, COMMUNITY_USER])
|
||||
|
||||
# check member actions
|
||||
self.client.login(remote_user=COMMUNITY_USER)
|
||||
self.client.login(username=COMMUNITY_USER,password=COMMUNITY_USER+"+password")
|
||||
self.check_url_status(self.private_index_url, 200)
|
||||
self.client.logout()
|
||||
|
||||
# revert edit nomcom members
|
||||
login_testing_unauthorized(self, CHAIR_USER, self.edit_members_url)
|
||||
self.change_members([CHAIR_USER])
|
||||
self.client.login(remote_user=COMMUNITY_USER)
|
||||
self.check_url_status(self.private_index_url, 403)
|
||||
self.client.logout()
|
||||
|
||||
self.client.login(username=COMMUNITY_USER,password=COMMUNITY_USER+"+password")
|
||||
self.check_url_status(self.private_index_url, 403)
|
||||
self.client.logout()
|
||||
|
||||
def change_chair(self, user):
|
||||
|
@ -333,9 +335,10 @@ class NomcomViewsTest(TestCase):
|
|||
self.change_chair(COMMUNITY_USER)
|
||||
|
||||
# check chair actions
|
||||
self.client.login(remote_user=COMMUNITY_USER)
|
||||
self.client.login(username=COMMUNITY_USER,password=COMMUNITY_USER+"+password")
|
||||
self.check_url_status(self.edit_members_url, 200)
|
||||
self.check_url_status(self.edit_nomcom_url, 200)
|
||||
self.client.logout()
|
||||
|
||||
# revert edit nomcom chair
|
||||
login_testing_unauthorized(self, SECRETARIAT_USER, self.edit_chair_url)
|
||||
|
|
|
@ -18,7 +18,8 @@ class MainTestCase(TestCase):
|
|||
"Main Test"
|
||||
make_test_data()
|
||||
url = reverse('announcement')
|
||||
r = self.client.get(url, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
||||
class DummyCase(TestCase):
|
||||
|
@ -30,7 +31,8 @@ class UnauthorizedCase(TestCase):
|
|||
make_test_data()
|
||||
url = reverse('announcement')
|
||||
person = Person.objects.filter(role__group__acronym='mars')[0]
|
||||
r = self.client.get(url,REMOTE_USER=person.user)
|
||||
self.client.login(username=person.user.username, password=person.user.username+"+password")
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 403)
|
||||
|
||||
class SubmitCase(TestCase):
|
||||
|
@ -39,8 +41,9 @@ class SubmitCase(TestCase):
|
|||
make_test_data()
|
||||
url = reverse('announcement')
|
||||
post_data = {'id_subject':''}
|
||||
#self.client.login(remote_user='rcross')
|
||||
r = self.client.post(url,post_data, REMOTE_USER=SECR_USER)
|
||||
#self.client.login(username='rcross', password='rcross+password")
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = self.client.post(url,post_data)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
q = PyQuery(r.content)
|
||||
self.assertTrue(len(q('form ul.errorlist')) > 0)
|
||||
|
@ -56,7 +59,8 @@ class SubmitCase(TestCase):
|
|||
'frm':'IETF Secretariat <ietf-secretariat@ietf.org>',
|
||||
'subject':'Test Subject',
|
||||
'body':'This is a test.'}
|
||||
r = self.client.post(url,post_data,follow=True, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = self.client.post(url,post_data,follow=True)
|
||||
self.assertRedirects(r, redirect)
|
||||
# good enough if we get to confirm page
|
||||
#self.assertEqual(len(outbox), 1)
|
||||
|
|
|
@ -20,7 +20,8 @@ class MainTestCase(TestCase):
|
|||
"Main Test"
|
||||
make_test_data()
|
||||
url = reverse('areas')
|
||||
response = self.client.get(url, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_view(self):
|
||||
|
@ -29,5 +30,6 @@ class MainTestCase(TestCase):
|
|||
augment_data()
|
||||
areas = Group.objects.filter(type='area',state='active')
|
||||
url = reverse('areas_view', kwargs={'name':areas[0].acronym})
|
||||
response = self.client.get(url, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
|
|
@ -12,7 +12,8 @@ class MainTestCase(TestCase):
|
|||
"Main Test"
|
||||
make_test_data()
|
||||
url = reverse('drafts')
|
||||
response = self.client.get(url, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_view(self):
|
||||
|
@ -20,5 +21,6 @@ class MainTestCase(TestCase):
|
|||
make_test_data()
|
||||
drafts = Document.objects.filter(type='draft')
|
||||
url = reverse('drafts_view', kwargs={'id':drafts[0].name})
|
||||
response = self.client.get(url, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
|
|
@ -5,8 +5,6 @@ from ietf.person.models import Person
|
|||
from ietf.utils.test_data import make_test_data
|
||||
import debug # pyflakes:ignore
|
||||
|
||||
SECR_USER='secretary'
|
||||
|
||||
class GroupsTest(TestCase):
|
||||
# ------- Test Search -------- #
|
||||
def test_search(self):
|
||||
|
@ -15,7 +13,8 @@ class GroupsTest(TestCase):
|
|||
group = Group.objects.all()[0]
|
||||
url = reverse('groups_search')
|
||||
post_data = {'group_acronym':group.acronym,'submit':'Search'}
|
||||
response = self.client.post(url,post_data,follow=True, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.post(url,post_data,follow=True)
|
||||
#assert False, response.content
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.failUnless(group.acronym in response.content)
|
||||
|
@ -25,7 +24,8 @@ class GroupsTest(TestCase):
|
|||
url = reverse('groups_search')
|
||||
target = reverse('groups_add')
|
||||
post_data = {'submit':'Add'}
|
||||
response = self.client.post(url,post_data,follow=True, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.post(url,post_data,follow=True)
|
||||
self.assertRedirects(response, target)
|
||||
|
||||
def test_add_group_invalid(self):
|
||||
|
@ -35,7 +35,8 @@ class GroupsTest(TestCase):
|
|||
'awp-TOTAL_FORMS':'2',
|
||||
'awp-INITIAL_FORMS':'0',
|
||||
'submit':'Save'}
|
||||
response = self.client.post(url,post_data, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.post(url,post_data)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.failUnless('This field is required' in response.content)
|
||||
|
||||
|
@ -52,7 +53,8 @@ class GroupsTest(TestCase):
|
|||
'awp-TOTAL_FORMS':'2',
|
||||
'awp-INITIAL_FORMS':'0',
|
||||
'submit':'Save'}
|
||||
response = self.client.post(url,post_data, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.post(url,post_data)
|
||||
#print response.content
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.failUnless('Group with this Acronym already exists' in response.content)
|
||||
|
@ -69,7 +71,8 @@ class GroupsTest(TestCase):
|
|||
'awp-TOTAL_FORMS':'2',
|
||||
'awp-INITIAL_FORMS':'0',
|
||||
'submit':'Save'}
|
||||
response = self.client.post(url,post_data, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.post(url,post_data)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
# ------- Test View -------- #
|
||||
|
@ -77,7 +80,8 @@ class GroupsTest(TestCase):
|
|||
make_test_data()
|
||||
group = Group.objects.all()[0]
|
||||
url = reverse('groups_view', kwargs={'acronym':group.acronym})
|
||||
response = self.client.get(url, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
# ------- Test Edit -------- #
|
||||
|
@ -97,7 +101,8 @@ class GroupsTest(TestCase):
|
|||
'groupurl_set-TOTAL_FORMS':'2',
|
||||
'groupurl_set-INITIAL_FORMS':'0',
|
||||
'submit':'Save'}
|
||||
response = self.client.post(url,post_data,follow=True, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.post(url,post_data,follow=True)
|
||||
self.assertRedirects(response, target)
|
||||
self.failUnless('changed successfully' in response.content)
|
||||
|
||||
|
@ -108,7 +113,8 @@ class GroupsTest(TestCase):
|
|||
role = group.role_set.all()[0]
|
||||
url = reverse('groups_delete_role', kwargs={'acronym':group.acronym,'id':role.id})
|
||||
target = reverse('groups_people', kwargs={'acronym':group.acronym})
|
||||
response = self.client.get(url,follow=True, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url,follow=True)
|
||||
self.assertRedirects(response, target)
|
||||
self.failUnless('deleted successfully' in response.content)
|
||||
|
||||
|
@ -121,6 +127,7 @@ class GroupsTest(TestCase):
|
|||
'person':'Joe Smith - (%s)' % person.id,
|
||||
'email':person.email_set.all()[0].address,
|
||||
'submit':'Add'}
|
||||
response = self.client.post(url,post_data,follow=True, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.post(url,post_data,follow=True)
|
||||
self.assertRedirects(response, url)
|
||||
self.failUnless('added successfully' in response.content)
|
||||
|
|
|
@ -11,7 +11,8 @@ class MainTestCase(TestCase):
|
|||
"Main Test"
|
||||
make_test_data()
|
||||
url = reverse('ipradmin')
|
||||
response = self.client.get(url, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 301)
|
||||
"""
|
||||
def test_view(self):
|
||||
|
@ -19,6 +20,7 @@ class MainTestCase(TestCase):
|
|||
draft = make_test_data()
|
||||
drafts = Document.objects.filter(type='draft')
|
||||
url = reverse('drafts_view', kwargs={'id':drafts[0].name})
|
||||
response = self.client.get(url, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
"""
|
||||
|
|
|
@ -11,7 +11,8 @@ class MainTestCase(TestCase):
|
|||
def test_main(self):
|
||||
"Main Test"
|
||||
url = reverse('meetings')
|
||||
response = self.client.get(url, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_view(self):
|
||||
|
@ -19,5 +20,6 @@ class MainTestCase(TestCase):
|
|||
make_test_data()
|
||||
meeting = Meeting.objects.all()[0]
|
||||
url = reverse('meetings_view', kwargs={'meeting_id':meeting.number})
|
||||
response = self.client.get(url, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
|
|
@ -14,7 +14,8 @@ class MainTestCase(TestCase):
|
|||
"Main Test"
|
||||
make_test_data()
|
||||
url = reverse('proceedings')
|
||||
response = self.client.get(url, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_view(self):
|
||||
|
@ -22,5 +23,6 @@ class MainTestCase(TestCase):
|
|||
make_test_data()
|
||||
meeting = Meeting.objects.all()[0]
|
||||
url = reverse('meetings_view', kwargs={'meeting_id':meeting.number})
|
||||
response = self.client.get(url, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
|
|
@ -18,7 +18,8 @@ class MainTestCase(TestCase):
|
|||
"Main Test"
|
||||
augment_data()
|
||||
url = reverse('roles')
|
||||
response = self.client.get(url, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_roles_delete(self):
|
||||
|
@ -28,7 +29,8 @@ class MainTestCase(TestCase):
|
|||
role = group.role_set.all()[0]
|
||||
url = reverse('roles_delete_role', kwargs={'acronym':group.acronym,'id':role.id})
|
||||
target = reverse('roles') + '?group=%s' % group.acronym
|
||||
response = self.client.get(url,follow=True, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url,follow=True)
|
||||
self.assertRedirects(response, target)
|
||||
self.failUnless('deleted successfully' in response.content)
|
||||
|
||||
|
@ -44,7 +46,8 @@ class MainTestCase(TestCase):
|
|||
'person':'Joe Smith - (%s)' % person.id,
|
||||
'email':person.email_set.all()[0].address,
|
||||
'submit':'Add'}
|
||||
response = self.client.post(url,post_data,follow=True, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.post(url,post_data,follow=True)
|
||||
self.assertRedirects(response, target)
|
||||
self.failUnless('added successfully' in response.content)
|
||||
|
||||
|
|
|
@ -11,7 +11,8 @@ class MainTestCase(TestCase):
|
|||
def test_main(self):
|
||||
"Main Test"
|
||||
url = reverse('rolodex')
|
||||
response = self.client.get(url, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_view(self):
|
||||
|
@ -19,7 +20,8 @@ class MainTestCase(TestCase):
|
|||
make_test_data()
|
||||
person = Person.objects.all()[0]
|
||||
url = reverse('rolodex_view', kwargs={'id':person.id})
|
||||
response = self.client.get(url, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
|
|
|
@ -12,20 +12,23 @@ class SreqUrlTests(TestCase):
|
|||
def test_urls(self):
|
||||
draft = make_test_data()
|
||||
|
||||
r = self.client.get("/secr/",REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
|
||||
r = self.client.get("/secr/")
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
||||
r = self.client.get("/secr/sreq/",REMOTE_USER=SECR_USER)
|
||||
r = self.client.get("/secr/sreq/")
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
||||
r = self.client.get("/secr/sreq/%s/new/" % draft.group.acronym, REMOTE_USER=SECR_USER)
|
||||
r = self.client.get("/secr/sreq/%s/new/" % draft.group.acronym)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
||||
class MainTestCase(TestCase):
|
||||
def test_main(self):
|
||||
make_test_data()
|
||||
url = reverse('sessions')
|
||||
r = self.client.get(url, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = self.client.get(url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
sched = r.context['scheduled_groups']
|
||||
unsched = r.context['unscheduled_groups']
|
||||
|
@ -42,8 +45,8 @@ class SubmitRequestCase(TestCase):
|
|||
'id_attendees':'10',
|
||||
'id_conflict1':'',
|
||||
'id_comments':'need projector'}
|
||||
self.client.login(REMOTE_USER=SECR_USER)
|
||||
r = self.client.post(url,post_data,REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = self.client.post(url,post_data)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
"""
|
||||
#assert False, self.client.session..__dict__
|
||||
|
|
|
@ -16,7 +16,8 @@ class MainTestCase(TestCase):
|
|||
"Main Test"
|
||||
augment_data()
|
||||
url = reverse('telechat')
|
||||
response = self.client.get(url, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_doc(self):
|
||||
|
@ -25,6 +26,7 @@ class MainTestCase(TestCase):
|
|||
d = TelechatDate.objects.all()[0]
|
||||
date = d.date.strftime('%Y-%m-%d')
|
||||
url = reverse('telechat_doc', kwargs={'date':date})
|
||||
response = self.client.get(url, REMOTE_USER=SECR_USER)
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
</td>
|
||||
<td align="right">
|
||||
<br>
|
||||
<span class="login">{% if request.user_is_secretariat %}Secretariat {% endif %}Logged in: {{ request.META.REMOTE_USER }}</span>
|
||||
<span class="login">{% if request.user_is_secretariat %}Secretariat {% endif %}Logged in: <a href="/accounts/profile/">{{ user }}</a> | <a href="/accounts/logout/">Log out</a></span>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
|
|
@ -96,7 +96,7 @@ WSGI_APPLICATION = "ietf.wsgi.application"
|
|||
|
||||
DAJAXICE_MEDIA_PREFIX = "dajaxice"
|
||||
|
||||
AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.RemoteUserBackend', )
|
||||
AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.ModelBackend', )
|
||||
|
||||
#DATABASE_ROUTERS = ["ietf.legacy_router.LegacyRouter"]
|
||||
|
||||
|
@ -142,14 +142,12 @@ MIDDLEWARE_CLASSES = (
|
|||
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||
'ietf.middleware.FillInRemoteUserIfLoggedInMiddleware',
|
||||
'django.contrib.auth.middleware.RemoteUserMiddleware',
|
||||
'django.contrib.messages.middleware.MessageMiddleware',
|
||||
'django.middleware.http.ConditionalGetMiddleware',
|
||||
'ietf.middleware.SQLLogMiddleware',
|
||||
'ietf.middleware.SMTPExceptionMiddleware',
|
||||
'ietf.middleware.RedirectTrailingPeriod',
|
||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||
'django.middleware.transaction.TransactionMiddleware',
|
||||
'ietf.middleware.UnicodeNfkcNormalization',
|
||||
'ietf.secr.middleware.secauth.SecAuthMiddleware'
|
||||
)
|
||||
|
|
|
@ -137,7 +137,7 @@ class SubmitTests(TestCase):
|
|||
self.assertTrue(name in outbox[-1]["Subject"])
|
||||
|
||||
# as chair of WG, we should see approval button
|
||||
self.client.login(remote_user="marschairman")
|
||||
self.client.login(username="marschairman", password="marschairman+password")
|
||||
|
||||
r = self.client.get(status_url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
@ -436,7 +436,7 @@ class SubmitTests(TestCase):
|
|||
self.assertTrue(name in outbox[-1]["Subject"])
|
||||
|
||||
# as Secretariat, we should see the force post button
|
||||
self.client.login(remote_user="secretary")
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
|
||||
r = self.client.get(status_url)
|
||||
self.assertEqual(r.status_code, 200)
|
||||
|
@ -482,7 +482,7 @@ class SubmitTests(TestCase):
|
|||
self.assertEqual(len(adjust_button), 0)
|
||||
|
||||
# as Secretariat, we should get edit button
|
||||
self.client.login(remote_user="secretary")
|
||||
self.client.login(username="secretary", password="secretary+password")
|
||||
r = self.client.get(unprivileged_status_url)
|
||||
q = PyQuery(r.content)
|
||||
adjust_button = q('input[type=submit][value*="Adjust"]')
|
||||
|
@ -607,7 +607,7 @@ class ApprovalsTestCase(TestCase):
|
|||
make_test_data()
|
||||
|
||||
url = urlreverse('submit_approvals')
|
||||
self.client.login(remote_user="marschairman")
|
||||
self.client.login(username="marschairman", password="marschairman+password")
|
||||
|
||||
Preapproval.objects.create(name="draft-ietf-mars-foo", by=Person.objects.get(user__username="marschairman"))
|
||||
Preapproval.objects.create(name="draft-ietf-mars-baz", by=Person.objects.get(user__username="marschairman"))
|
||||
|
|
|
@ -58,11 +58,17 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
</div>
|
||||
|
||||
{% if user %}
|
||||
<div id="ietf-login" class="noprint">{% if user.is_authenticated %}
|
||||
{{ user }}
|
||||
{% else %}
|
||||
<a href="https://{{ request.get_host }}/accounts/login/?next={{request.get_full_path|urlencode}}" rel="nofollow">Sign In</a>
|
||||
{% endif %}</div>
|
||||
<div id="ietf-login" class="noprint">
|
||||
{% if request.get_full_path == "/accounts/logout/" %}
|
||||
<a href="https://{{ request.get_host }}/accounts/login/" class="login" rel="nofollow">Sign in</a>
|
||||
{% else %}
|
||||
{% if user.is_authenticated %}
|
||||
{{ user }} | <a href="/accounts/logout/" class="login" rel="nofollow">Sign out</a>
|
||||
{% else %}
|
||||
<a href="https://{{ request.get_host }}/accounts/login/?next={{request.get_full_path|urlencode}}" class="login" rel="nofollow">Sign in</a>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% block start_content_table %}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<h1>Change password</h1>
|
||||
{% if success %}
|
||||
<p>Your password has been updated.</p>
|
||||
<p>Now you can <a href="{% url "ietfauth.views.ietf_login" %}">sign in</a></p>
|
||||
<p>Now you can <a href="/accounts/login/">sign in</a></p>
|
||||
{% else %}
|
||||
<p>Hello, you can select a new password below for your user {{ username }}.</p>
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<h1>Confirm account creation</h1>
|
||||
{% if success %}
|
||||
<p>Your account with login name '{{ email }}' has been created, using the password you have selected.</p>
|
||||
<p>Now you can <a href="{% url "ietfauth.views.ietf_login" %}">sign in</a></p>
|
||||
<p>Now you can <a href="/accounts/login/">sign in</a></p>
|
||||
{% else %}
|
||||
<p>In order to complete the setup of your account with login name '{{ email }}', please set a password:</p>
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
|
|
11
ietf/templates/registration/logged_out.html
Normal file
11
ietf/templates/registration/logged_out.html
Normal file
|
@ -0,0 +1,11 @@
|
|||
{% extends "registration/base.html" %}
|
||||
|
||||
{% block title %}Signed Out{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div id="login-pane">
|
||||
<div id="login-form">
|
||||
<h1>You have been signed out</h1>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
19
ietf/templates/registration/login.html
Normal file
19
ietf/templates/registration/login.html
Normal file
|
@ -0,0 +1,19 @@
|
|||
{% extends "registration/base.html" %}
|
||||
|
||||
{% block title %}Sign in{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div id="login-pane">
|
||||
<div id="login-form">
|
||||
<h1>Sign In</h1>
|
||||
<form action="" method="post">{% csrf_token %}
|
||||
<table class="login-form">
|
||||
{{ form }}
|
||||
</table>
|
||||
<div class="submit_row">
|
||||
<input type="submit" value="Sign in" />
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
60
ietf/utils/management/commands/import_htpasswd.py
Normal file
60
ietf/utils/management/commands/import_htpasswd.py
Normal file
|
@ -0,0 +1,60 @@
|
|||
import sys
|
||||
|
||||
from optparse import make_option
|
||||
from textwrap import dedent
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
class Command(BaseCommand):
|
||||
"""
|
||||
Import passwords from one or more htpasswd files to Django's auth_user table.
|
||||
|
||||
This command only imports passwords; it does not import usernames, as that
|
||||
would leave usernames without associated Person records in the database,
|
||||
something which is undesirable.
|
||||
|
||||
By default the command won't overwrite existing password entries, but
|
||||
given the --force switch, it will overwrite existing entries too. Without
|
||||
the --force switch, the command is safe to run repeatedly.
|
||||
"""
|
||||
|
||||
help = dedent(__doc__).strip()
|
||||
|
||||
option_list = BaseCommand.option_list + (
|
||||
make_option('--force',
|
||||
action='store_true', dest='overwrite', default=False,
|
||||
help='Overwrite existing passwords in the auth_user table.'),
|
||||
)
|
||||
|
||||
args = '[path [path [...]]]'
|
||||
|
||||
def handle(self, *filenames, **options):
|
||||
overwrite = options.get('overwrite', False)
|
||||
verbosity = int(options.get('verbosity'))
|
||||
for fn in filenames:
|
||||
with open(fn) as file:
|
||||
for line in file:
|
||||
if not ':' in line:
|
||||
raise ValueError('Found a line without colon separator in the htpassword file %s:'+
|
||||
' "%s"' % (file.name, line))
|
||||
username, password = line.strip().split(':', 1)
|
||||
try:
|
||||
user = User.objects.get(username=username)
|
||||
if overwrite == True or not user.password:
|
||||
if password.startswith('{SHA}'):
|
||||
user.password = "sha1$$%s" % password[len('{SHA}'):]
|
||||
elif password.startswith('$apr1$'):
|
||||
user.password = "md5$%s" % password[len('$apr1$'):]
|
||||
else: # Assume crypt
|
||||
user.password = "crypt$$%s" % password
|
||||
user.save()
|
||||
if verbosity > 0:
|
||||
sys.stderr.write('.')
|
||||
if verbosity > 1:
|
||||
sys.stderr.write(' %s\n' % username)
|
||||
except User.DoesNotExist:
|
||||
if verbosity > 1:
|
||||
sys.stderr.write('\nNo such user: %s\n' % username)
|
||||
|
||||
|
|
@ -13,7 +13,7 @@ from ietf.meeting.models import Meeting
|
|||
from ietf.name.models import StreamName
|
||||
from ietf.person.models import Person, Alias, Email
|
||||
|
||||
def create_person(group, role_name, name=None, username=None, email_address=None):
|
||||
def create_person(group, role_name, name=None, username=None, email_address=None, password=None):
|
||||
"""Add person/user/email and role."""
|
||||
if not name:
|
||||
name = group.acronym.capitalize() + " " + role_name.capitalize()
|
||||
|
@ -21,8 +21,12 @@ def create_person(group, role_name, name=None, username=None, email_address=None
|
|||
username = group.acronym + "-" + role_name
|
||||
if not email_address:
|
||||
email_address = username + "@ietf.org"
|
||||
if not password:
|
||||
password = username + "+password"
|
||||
|
||||
user = User.objects.create(username=username)
|
||||
user.set_password(password)
|
||||
user.save()
|
||||
person = Person.objects.create(name=name, ascii=name, user=user)
|
||||
Alias.objects.create(name=name, person=person)
|
||||
email = Email.objects.create(address=email_address, person=person)
|
||||
|
@ -165,6 +169,8 @@ def make_test_data():
|
|||
|
||||
# plain IETF'er
|
||||
u = User.objects.create(username="plain")
|
||||
u.set_password("plain+password")
|
||||
u.save()
|
||||
plainman = Person.objects.create(name="Plain Man", ascii="Plain Man", user=u)
|
||||
email = Email.objects.create(address="plain@example.com", person=plainman) # pyflakes:ignore
|
||||
|
||||
|
|
|
@ -254,12 +254,14 @@ def canonicalize_sitemap(s):
|
|||
s = re.sub("\n*\s*(<[a-zA-Z])", "\n\g<1>", s)
|
||||
return s
|
||||
|
||||
def login_testing_unauthorized(test_case, remote_user, url):
|
||||
def login_testing_unauthorized(test_case, username, url, password=None):
|
||||
r = test_case.client.get(url)
|
||||
test_case.assertTrue(r.status_code in (302, 403))
|
||||
if r.status_code == 302:
|
||||
test_case.assertTrue("/accounts/login" in r['Location'])
|
||||
test_case.client.login(remote_user=remote_user)
|
||||
if not password:
|
||||
password = username + "+password"
|
||||
return test_case.client.login(username=username, password=password)
|
||||
|
||||
class ReverseLazyTest(django.test.TestCase):
|
||||
def test_redirect_with_lazy_reverse(self):
|
||||
|
|
|
@ -404,3 +404,23 @@ span.fieldRequired {
|
|||
margin: 1em 0;
|
||||
}
|
||||
|
||||
|
||||
#login-pane {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
// background: rgba(196,196,196,.5);
|
||||
}
|
||||
|
||||
|
||||
#login-form {
|
||||
width: 24em;
|
||||
padding: 2em;
|
||||
margin-right: auto;
|
||||
margin-left: auto;
|
||||
margin-top: 10em;
|
||||
background: white;
|
||||
}
|
||||
|
||||
.login {
|
||||
font-style: italic;
|
||||
}
|
Loading…
Reference in a new issue