Skip to content
Snippets Groups Projects

Resolve "User managment page"

Merged Piotr Gawron requested to merge 127-user-managment-page into master
3 files
+ 64
3
Compare changes
  • Side-by-side
  • Inline
Files
3
import logging
import re
from collections import OrderedDict
from django import forms
from django.forms import ModelForm
from django_common.auth_backends import User
from web.models import Worker, WorkerStudyRole
from web.models.constants import GLOBAL_STUDY_ID
@@ -33,16 +36,68 @@ class WorkerForm(ModelForm):
self.fields['role'] = forms.ChoiceField(label='Role', choices=choices)
self.fields['role'].initial = initial_role
del self.fields['user']
if worker_type == WORKER_STAFF:
del self.fields['voucher_types']
else:
del self.fields['locations']
del self.fields['user']
fields = OrderedDict()
if worker_type == WORKER_STAFF:
if instance is None or instance.pk is None:
fields['login'] = forms.CharField(label='Login')
fields['password'] = forms.CharField(label='Password', widget=forms.PasswordInput)
fields['password2'] = forms.CharField(label='Repeat password', widget=forms.PasswordInput)
for key, value in self.fields.items():
fields[key] = value
self.fields = fields
def save(self, commit=True):
create_user = self.cleaned_data.get("login", None) is not None
user = None
if create_user:
user = User.objects.create_user(username=self.cleaned_data['login'],
email=self.cleaned_data['email'],
password=self.cleaned_data['password'])
instance = super(WorkerForm, self).save(commit)
if create_user:
instance.user = user
instance.save()
roles = WorkerStudyRole.objects.filter(worker=instance, study_id=GLOBAL_STUDY_ID)
if roles.count() > 0:
roles.update(role=self.cleaned_data['role'])
else:
WorkerStudyRole.objects.create(worker=instance, study_id=GLOBAL_STUDY_ID, role=self.cleaned_data['role'])
def clean(self):
cleaned_data = super(WorkerForm, self).clean()
if cleaned_data.get('password', None) is not None:
if cleaned_data['password'] != cleaned_data['password2']:
self.add_error('password', "Password don't match")
self.add_error('password2', "Password don't match")
password = cleaned_data['password']
min_length = 10
if len(password) < min_length:
self.add_error('password', 'Password must be at least ' + str(min_length) + ' characters long.')
# check for digit
if not any(char.isdigit() for char in password):
self.add_error('password', 'Password must contain at least 1 digit.')
# check for letter
if not any(char.isalpha() for char in password):
self.add_error('password', 'Password must contain at least 1 letter.')
if cleaned_data.get('login', None) is not None:
if not re.match('^[.a-zA-Z0-9]+$', cleaned_data['login']):
self.add_error('login', 'Login can contain only alphanumeric characters or dot.')
return cleaned_data
Loading