cbmi/account/forms.py

124 lines
4.3 KiB
Python
Raw Normal View History

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
2013-10-19 00:47:24 +02:00
from django import forms
from django.contrib.auth import authenticate
from django.utils.translation import ugettext as _
2013-10-19 00:47:24 +02:00
class LoginForm(forms.Form):
username = forms.CharField(max_length=255)
password = forms.CharField(max_length=255, widget=forms.PasswordInput)
def clean(self):
username = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
user = authenticate(username=username, password=password)
if not user or not user.is_active:
raise forms.ValidationError(_('Sorry, that login was invalid. '
'Please try again.'), code='invalid_login')
return self.cleaned_data
def login(self, request):
username = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
user = authenticate(username=username, password=password)
return user
class GastroPinField(forms.CharField):
widget = forms.PasswordInput
def validate(self, value):
"""
Check if the value is all numeric and 4 - 6 chars long.
"""
match = re.match(r'^\d{4,6}$', value)
if not match:
raise forms.ValidationError(_('PIN must be 4 to 6 digits.'))
class GastroPinForm(forms.Form):
gastropin1 = GastroPinField(label=_('New Gastro-PIN'))
gastropin2 = GastroPinField(label=_('Repeat Gastro-PIN'))
def clean(self):
cleaned_data = super(GastroPinForm, self).clean()
gastropin1 = cleaned_data.get("gastropin1")
gastropin2 = cleaned_data.get("gastropin2")
if gastropin1 != gastropin2:
raise forms.ValidationError(
_('The PINs entered were not identical.'),
code='not_identical')
2013-10-25 23:15:30 +02:00
return cleaned_data
class WlanPresenceForm(forms.Form):
# Boolean fields must never be required.
presence = forms.BooleanField(required=False,
label=_('Enable WiFi presence'))
class PasswordForm(forms.Form):
2013-10-26 20:06:42 +02:00
old_password = forms.CharField(max_length=255, widget=forms.PasswordInput,
label=_('Old password'),
help_text=_('Enter your current password here.'))
password1 = forms.CharField(max_length=255, widget=forms.PasswordInput,
label=_('New password'))
password2 = forms.CharField(max_length=255, widget=forms.PasswordInput,
label=_('Repeat password'))
2013-10-26 20:06:42 +02:00
def __init__(self, *args, **kwargs):
self._request = kwargs.pop('request', None)
super(PasswordForm, self).__init__(*args, **kwargs)
def clean(self):
cleaned_data = super(PasswordForm, self).clean()
old_password = cleaned_data.get('old_password')
username = self._request.user.username
user = authenticate(username=username, password=old_password)
if not user or not user.is_active:
raise forms.ValidationError(_('The old password was incorrect.'),
code='old_password_wrong')
password1 = cleaned_data.get('password1')
password2 = cleaned_data.get('password2')
if password1 != password2:
raise forms.ValidationError(
_('The new passwords were not identical.'),
code='not_identical')
return cleaned_data
class RFIDForm(forms.Form):
rfid = forms.CharField(max_length=255, label=_('Your RFID'),
help_text=_('Find out your RFID by holding your RFID tag to the '
'reader in the airlock.'))
2013-10-25 04:24:26 +02:00
class SIPPinForm(forms.Form):
sippin1 = GastroPinField(label=_('Your SIP PIN'))
sippin2 = GastroPinField(label=_('Repeat SIP PIN'))
def clean(self):
cleaned_data = super(SIPPinForm, self).clean()
sippin1 = cleaned_data.get("sippin1")
sippin2 = cleaned_data.get("sippin2")
if sippin1 != sippin2:
raise forms.ValidationError(
_('The PINs entered were not identical.'),
code='not_identical')
class NRF24Form(forms.Form):
nrf24 = forms.CharField(max_length=255,
label = _('NRF24-ID'),
help_text=_("Your r0ket's NRF24 identification"))
2013-10-25 04:24:26 +02:00
class CLabPinForm(forms.Form):
c_lab_pin1 = GastroPinField(label=_('New c-lab PIN'))
c_lab_pin2 = GastroPinField(label=_('Repeat c-lab PIN'),
help_text=_('Numerical only, 4 to 6 digits'))