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),