mirror of
https://github.com/freedombox/FreedomBox.git
synced 2026-01-28 08:03:36 +00:00
This commit is big because anything small breaks the code. - Django dispatcher is based on regular expressions and does not need a tree structure - Reduces a lot of unnecessary dependencies among modules - Use Django sessions middlewear instead of CherryPy sessions - Introduce dependency based modules instead of numeric load order - Remove PagePlugin and simply use Django views - Eliminate page rendering wrappers in favor of Django context processors - Use custom auth for now until replaced by Django auth middlewear - Use Django templated 404 and 500 error pages
68 lines
2.0 KiB
Python
68 lines
2.0 KiB
Python
"""
|
|
Controller to provide login and logout actions
|
|
"""
|
|
|
|
import cfg
|
|
from django import forms
|
|
from django.http.response import HttpResponseRedirect
|
|
from django.template.response import TemplateResponse
|
|
from gettext import gettext as _
|
|
|
|
from . import auth
|
|
|
|
|
|
class LoginForm(forms.Form): # pylint: disable-msg=W0232
|
|
"""Login form"""
|
|
username = forms.CharField(label=_('Username'))
|
|
password = forms.CharField(label=_('Passphrase'),
|
|
widget=forms.PasswordInput())
|
|
|
|
def clean(self):
|
|
"""Check for valid credentials"""
|
|
# pylint: disable-msg=E1101
|
|
if 'username' in self._errors or 'password' in self._errors:
|
|
return self.cleaned_data
|
|
|
|
error_msg = auth.check_credentials(self.cleaned_data['username'],
|
|
self.cleaned_data['password'])
|
|
if error_msg:
|
|
raise forms.ValidationError(error_msg, code='invalid_credentials')
|
|
|
|
return self.cleaned_data
|
|
|
|
|
|
def login(request):
|
|
"""Serve the login page"""
|
|
form = None
|
|
|
|
if request.method == 'POST':
|
|
form = LoginForm(request.POST, prefix='auth')
|
|
# pylint: disable-msg=E1101
|
|
if form.is_valid():
|
|
username = form.cleaned_data['username']
|
|
request.session[cfg.session_key] = username
|
|
return HttpResponseRedirect(_get_from_page(request))
|
|
else:
|
|
form = LoginForm(prefix='auth')
|
|
|
|
return TemplateResponse(request, 'form.html',
|
|
{'title': _('Login'),
|
|
'form': form,
|
|
'submit_text': _('Login')})
|
|
|
|
|
|
def logout(request):
|
|
"""Logout and redirect to origin page"""
|
|
try:
|
|
del request.session[cfg.session_key]
|
|
request.session.flush()
|
|
except KeyError:
|
|
pass
|
|
|
|
return HttpResponseRedirect(_get_from_page(request))
|
|
|
|
|
|
def _get_from_page(request):
|
|
"""Return the 'from page' of a request"""
|
|
return request.GET.get('from_page', cfg.server_dir + '/')
|