summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--templates/base.html5
-rw-r--r--templates/login.html62
-rw-r--r--urls.py13
-rw-r--r--views/accounts.py53
4 files changed, 130 insertions, 3 deletions
diff --git a/templates/base.html b/templates/base.html
index 233d81b..d16564b 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -42,6 +42,8 @@
{% block userlinks %}{% endblock %}
</ul>
</div>
+ <li><a class="mm_logout" href="{% url user_logout %}">Logout</a>
+ {% else %}<li><a class="mm_user" href="{% url user_login %}">Login</a></li>
{% endif %}
{% endblock %}
@@ -84,6 +86,7 @@
{% block content %}
{% endblock %}
</div>
-
+ {% block additionaljs %}
+ {% endblock %}
</body>
</html>
diff --git a/templates/login.html b/templates/login.html
new file mode 100644
index 0000000..9142d7a
--- /dev/null
+++ b/templates/login.html
@@ -0,0 +1,62 @@
+{% extends "base.html" %}
+{% load i18n %}
+
+{% block content %}
+
+ <h2>Login with username and password</h2>
+
+ <form action="" method="post" class="login mm_clear"> {% csrf_token %}
+ {{ form.as_p }}
+ <div class="field">
+ <button class="btn btn-primary" type="submit">{% trans "Login" %}</button>
+ </div>
+ </form>
+
+ <hr />
+
+ <!--
+ <h2>Login using OpenID</h2>
+
+ <form method="post" action="{% url socialauth_begin 'openid' %}"> {% csrf_token %}
+ OpenID URL: <input type="text" name="openid_identifier" />
+ <input type="submit" value="Login using OpenID" />
+ </form>
+
+ <hr />
+ -->
+
+ <h2>Login using BrowserID</h2>
+
+ <form method="post" action="{% url socialauth_complete "browserid" %}"> {% csrf_token %}
+ <input type="hidden" name="assertion" value="" />
+ <a rel="nofollow" id="browserid" href="#"><img src="{{ STATIC_URL }}postorius/default/img/sign_in_blue.png" alt="Login using BrowserID" /></a>
+ </form>
+{% endblock %}
+
+{% block additionaljs %}
+<!-- Include BrowserID JavaScript -->
+<script src="https://browserid.org/include.js" type="text/javascript"></script>
+<!-- Setup click handler that receives BrowserID assertion code and sends
+ POST data -->
+<script type="text/javascript">
+ $(function () {
+ $('#browserid').click(function (e) {
+ e.preventDefault();
+ var self = $(this);
+
+ navigator.id.get(function (assertion) {
+ if (assertion) {
+ self.parent('form')
+ .find('input[type=hidden]')
+ .attr('value', assertion)
+ .end()
+ .submit();
+ } else {
+ alert('Some error occurred');
+ }
+ });
+ });
+ });
+</script>
+<!-- end browserid stuff -->
+{% endblock additionaljs %}
diff --git a/urls.py b/urls.py
index 665daf2..18af3f9 100644
--- a/urls.py
+++ b/urls.py
@@ -9,9 +9,14 @@ from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
+ # Account
+ url(r'^accounts/login/$', 'views.accounts.user_login', name='user_login'),
+ url(r'^accounts/logout/$', 'views.accounts.user_logout', name='user_logout'),
+ url(r'^accounts/profile/$', 'views.accounts.user_profile', name='user_profile'),
+
# Index
- url(r'^/$', 'views.pages.index'),
- url(r'^$', 'views.pages.index'),
+ url(r'^/$', 'views.pages.index', name='index'),
+ url(r'^$', 'views.pages.index', name='index'),
# Archives
url(r'^archives/(?P<mlist_fqdn>.*@.*)/(?P<year>\d{4})/(?P<month>\d\d?)/(?P<day>\d\d?)/$',
@@ -74,6 +79,10 @@ urlpatterns = patterns('',
# Admin
url(r'^admin/', include(admin.site.urls)),
+
+ # Social Auth
+ url(r'', include('social_auth.urls')),
+
)
#) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += staticfiles_urlpatterns()
diff --git a/views/accounts.py b/views/accounts.py
new file mode 100644
index 0000000..e4a3e30
--- /dev/null
+++ b/views/accounts.py
@@ -0,0 +1,53 @@
+import re
+import sys
+import logging
+
+
+from django.conf import settings
+from django.contrib import messages
+from django.contrib.auth import logout, authenticate, login
+from django.contrib.auth.decorators import (login_required,
+ permission_required,
+ user_passes_test)
+from django.contrib.auth.forms import AuthenticationForm
+from django.contrib.auth.models import User
+from django.core.urlresolvers import reverse
+from django.http import HttpResponse, HttpResponseRedirect
+from django.shortcuts import render_to_response, redirect
+from django.template import Context, loader, RequestContext
+from django.utils.translation import gettext as _
+from urllib2 import HTTPError
+
+logger = logging.getLogger(__name__)
+
+def user_logout(request):
+ logout(request)
+ return redirect('user_login')
+
+def user_login(request,template = 'login.html'):
+ if request.method == 'POST':
+ form = AuthenticationForm(request.POST)
+ user = authenticate(username=request.POST.get('username'),
+ password=request.POST.get('password'))
+ if user is not None:
+ logger.debug(user)
+ if user.is_active:
+ login(request,user)
+ return redirect(request.GET.get('next', 'index'))
+ else:
+ form = AuthenticationForm()
+ return render_to_response(template, {'form': form,},
+ context_instance=RequestContext(request))
+
+@login_required
+def user_profile(request, user_email = None):
+ if not request.user.is_authenticated():
+ return redirect('user_login')
+ #try:
+ # the_user = User.objects.get(email=user_email)
+ #except MailmanApiError:
+ # return utils.render_api_error(request)
+ return render_to_response('postorius/user_profile.html',
+ # {'mm_user': the_user},
+ context_instance=RequestContext(request))
+