66 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """passbook core authentication forms"""
 | |
| from django import forms
 | |
| from django.core.exceptions import ValidationError
 | |
| from django.utils.translation import gettext_lazy as _
 | |
| from structlog import get_logger
 | |
| 
 | |
| from passbook.core.models import User
 | |
| 
 | |
| LOGGER = get_logger()
 | |
| 
 | |
| 
 | |
| class SignUpForm(forms.Form):
 | |
|     """SignUp Form"""
 | |
| 
 | |
|     title = _("Sign Up")
 | |
|     name = forms.CharField(
 | |
|         label=_("Name"), widget=forms.TextInput(attrs={"placeholder": _("Name")})
 | |
|     )
 | |
|     username = forms.CharField(
 | |
|         label=_("Username"),
 | |
|         widget=forms.TextInput(attrs={"placeholder": _("Username")}),
 | |
|     )
 | |
|     email = forms.EmailField(
 | |
|         label=_("E-Mail"), widget=forms.TextInput(attrs={"placeholder": _("E-Mail")})
 | |
|     )
 | |
|     password = forms.CharField(
 | |
|         label=_("Password"),
 | |
|         widget=forms.PasswordInput(attrs={"placeholder": _("Password")}),
 | |
|     )
 | |
|     password_repeat = forms.CharField(
 | |
|         label=_("Repeat Password"),
 | |
|         widget=forms.PasswordInput(attrs={"placeholder": _("Repeat Password")}),
 | |
|     )
 | |
| 
 | |
|     def __init__(self, *args, **kwargs):
 | |
|         super().__init__(*args, **kwargs)
 | |
|         # All fields which have initial data supplied are set to read only
 | |
|         if "initial" in kwargs:
 | |
|             for field in kwargs.get("initial").keys():
 | |
|                 self.fields[field].widget.attrs["readonly"] = "readonly"
 | |
| 
 | |
|     def clean_username(self):
 | |
|         """Check if username is used already"""
 | |
|         username = self.cleaned_data.get("username")
 | |
|         if User.objects.filter(username=username).exists():
 | |
|             LOGGER.warning("username already exists", username=username)
 | |
|             raise ValidationError(_("Username already exists"))
 | |
|         return username
 | |
| 
 | |
|     def clean_email(self):
 | |
|         """Check if email is already used in django or other auth sources"""
 | |
|         email = self.cleaned_data.get("email")
 | |
|         # Check if user exists already, error early
 | |
|         if User.objects.filter(email=email).exists():
 | |
|             LOGGER.debug("email already exists", email=email)
 | |
|             raise ValidationError(_("Email already exists"))
 | |
|         return email
 | |
| 
 | |
|     def clean_password_repeat(self):
 | |
|         """Check if Password adheres to filter and if passwords matche"""
 | |
|         password = self.cleaned_data.get("password")
 | |
|         password_repeat = self.cleaned_data.get("password_repeat")
 | |
|         if password != password_repeat:
 | |
|             raise ValidationError(_("Passwords don't match"))
 | |
|         return self.cleaned_data.get("password_repeat")
 | 
