diff options
author | Aamir Khan <syst3m.w0rm@gmail.com> | 2012-06-12 18:35:33 -0400 |
---|---|---|
committer | Aamir Khan <syst3m.w0rm@gmail.com> | 2012-06-12 18:35:33 -0400 |
commit | aa668e6980577024a504ddbc519a522ba1294199 (patch) | |
tree | 9db939b617ca9691e0583f435f44aa0a65714a3f | |
parent | 0248b6f39ea92151ea73321d830172e8c0d9f575 (diff) | |
download | hyperkitty-aa668e6980577024a504ddbc519a522ba1294199.tar.gz hyperkitty-aa668e6980577024a504ddbc519a522ba1294199.tar.xz hyperkitty-aa668e6980577024a504ddbc519a522ba1294199.zip |
Login authentication
-rw-r--r-- | templates/base.html | 5 | ||||
-rw-r--r-- | templates/login.html | 62 | ||||
-rw-r--r-- | urls.py | 13 | ||||
-rw-r--r-- | views/accounts.py | 53 |
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 %} @@ -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)) + |