From cb941598966a510e3b89555a41c1afb2cc0bba0b Mon Sep 17 00:00:00 2001 From: Bill Fenner <fenner@fenron.net> Date: Thu, 24 May 2007 20:18:11 +0000 Subject: [PATCH] Allow login/logout/password change. The initial view once logged in (unless it's a forced login) will be the (incomplete) "my" view. Username and logout link are in the upper right corner while logged in. - Legacy-Id: 163 --- ietf/ietfauth/urls.py | 21 ++++++++++++++++++++ ietf/my/views.py | 27 ++++++++++---------------- ietf/templates/base.html | 12 +++++++----- ietf/templates/my/my.html | 8 ++++++-- ietf/templates/registration/login.html | 19 ++++++++++++++++++ ietf/urls.py | 1 + 6 files changed, 64 insertions(+), 24 deletions(-) create mode 100644 ietf/ietfauth/urls.py create mode 100644 ietf/templates/registration/login.html diff --git a/ietf/ietfauth/urls.py b/ietf/ietfauth/urls.py new file mode 100644 index 000000000..bd7af30bb --- /dev/null +++ b/ietf/ietfauth/urls.py @@ -0,0 +1,21 @@ +from django.conf.urls.defaults import * +from ietf.my.views import my + +urlpatterns = patterns('django.contrib.auth.views', + (r'^login/$', 'login'), + # need to provide templates for logout, password_change, + # password_change_done + # right now they use the admin templates, which are not + # really appropriate. + (r'^logout/$', 'logout'), + (r'^password_change/$', 'password_change'), + (r'^password_change/done/$', 'password_change_done'), + # Built-in password reset changes before validation + # so we want to implement a scheme similar to henrik's + # loginmgr. + #(r'^password_reset/$', 'password_reset'), + #(r'^password_reset/done/$', 'password_reset_done'), +) +urlpatterns += patterns('', + (r'^profile/$', my) +) diff --git a/ietf/my/views.py b/ietf/my/views.py index 44c4020e8..34114c727 100644 --- a/ietf/my/views.py +++ b/ietf/my/views.py @@ -1,21 +1,14 @@ from django.http import HttpResponse,HttpResponseRedirect from django import newforms as forms -from django.template import RequestContext, Context, loader -from django.shortcuts import get_object_or_404 -from ietf.idtracker.models import PersonOrOrgInfo, EmailAddress +from django.template import RequestContext +from django.shortcuts import render_to_response +from ietf.idtracker.models import PersonOrOrgInfo def my(request, addr=None): - if addr is None: - # get email address from logged in user - return - person = PersonOrOrgInfo.objects.filter(emailaddresses__email_address=addr).distinct() - if len(person) != 1: - if len(person) == 0: - raise Http404 - # multiple people matched! - return "Oops" - t = loader.get_template('my/my.html') - c = RequestContext(request, { - 'me': person[0], - }) - return HttpResponse(t.render(c)) + if request.user: + person = request.user.get_profile().person + else: + person = PersonOrOrgInfo.objects.distinct().get(emailaddresses__email_address=addr) + return render_to_response('my/my.html', { + 'me': person, + }, context_instance=RequestContext(request)) diff --git a/ietf/templates/base.html b/ietf/templates/base.html index d9f22064c..a099e4fac 100644 --- a/ietf/templates/base.html +++ b/ietf/templates/base.html @@ -9,7 +9,8 @@ {% block css %}{% endblock %} --> </style> -</head><body {% block body_attributes %}{% endblock %}><center> +</head><body {% block body_attributes %}{% endblock %}> +<center> <table border=0 cellpadding=0 cellspacing=0> <tr> <td><a href="http://www.ietf.org/home.html"><img src="https://www1.ietf.org/images/header/ietflogo_sm.gif" border="0"></a></td> @@ -28,6 +29,11 @@ </tr> </table> </center> +{% if user.is_authenticated %} +<span style="float: right; font-size: 80%;">Logged in as {{ user }} +| +<a href="/accounts/logout/">Log Out</a></span> +{% endif %} <hr> <!-- end new headers and layout --> <div id="content"> @@ -35,10 +41,6 @@ {% block main_content %}{% endblock %} </div> <hr/> -<address> -This page provided by Bill Fenner's proof-of-concept IETF web page front -ends. -</address> <a href="http://www.djangoproject.com/"><img src="http://media.djangoproject.com/img/badges/djangomade124x25.gif" border="0" alt="Made with Django." title="Made with Django." /></a> {% include "debug.html" %} </body> diff --git a/ietf/templates/my/my.html b/ietf/templates/my/my.html index 9bb629173..160373b00 100644 --- a/ietf/templates/my/my.html +++ b/ietf/templates/my/my.html @@ -1,8 +1,12 @@ +{% extends "base.html" %} + +{% block content %} <p> -{{ me.person_or_org_tag }} -<h1>Internet Drafts</h1> +Hello, {{ me }}! +<h1>Internet Drafts that you Author (probably useless but hey)</h1> <ul> {% for doc in me.idauthors_set.all %} <li>{{ doc.document.filename }}: {{ doc.document.status }} / {{ doc.document.idstate }} {% endfor %} </ul> +{% endblock %} diff --git a/ietf/templates/registration/login.html b/ietf/templates/registration/login.html new file mode 100644 index 000000000..9fb9b098a --- /dev/null +++ b/ietf/templates/registration/login.html @@ -0,0 +1,19 @@ +{% extends "base.html" %} + +{% block content %} + +{% if form.has_errors %} +<p>Your username and password didn't match our records. Please try again.</p> +{% endif %} + +<form method="post" action="."> +<table> +<tr><td><label for="id_username">Username (or email address):</label></td><td>{{ form.username }}</td></tr> +<tr><td><label for="id_password">Password:</label></td><td>{{ form.password }}</td></tr> +</table> + +<input type="submit" value="login" /> +<input type="hidden" name="next" value="{{ next }}" /> +</form> + +{% endblock %} diff --git a/ietf/urls.py b/ietf/urls.py index f35bba794..3abc9e324 100644 --- a/ietf/urls.py +++ b/ietf/urls.py @@ -24,6 +24,7 @@ urlpatterns = patterns('', (r'^(?P<path>public|cgi-bin)/', include('ietf.redirects.urls')), (r'^ipr/', include('ietf.ipr.urls')), (r'^meeting/', include('ietf.meeting.urls')), + (r'^accounts/', include('ietf.ietfauth.urls')), (r'^$', ietf.views.apps),