from hcaptcha.fields import hCaptchaField from django import forms from django.contrib.auth.forms import (AuthenticationForm, PasswordResetForm, UserChangeForm, UserCreationForm) from django.conf import settings from registration.forms import RegistrationFormUniqueEmail from RIGS import models class CaptchaField(hCaptchaField): def validate(self, value): # Skip validation if we're testing FIXME: Arona, y u so lazy if settings.HCAPTCHA_SITEKEY != '10000000-ffff-ffff-ffff-000000000001': super().validate(value) # Registration class ProfileRegistrationFormUniqueEmail(RegistrationFormUniqueEmail): hcaptcha = CaptchaField() class Meta: model = models.Profile fields = ('username', 'email', 'first_name', 'last_name', 'initials') def clean_initials(self): """ Validate that the supplied initials are unique. """ if models.Profile.objects.filter(initials__iexact=self.cleaned_data['initials']): raise forms.ValidationError("These initials are already in use. Please supply different initials.") return self.cleaned_data['initials'] class CheckApprovedForm(AuthenticationForm): def confirm_login_allowed(self, user): if user.is_approved or user.is_superuser: return AuthenticationForm.confirm_login_allowed(self, user) else: raise forms.ValidationError( "Your account hasn't been approved by an administrator yet. Please check back in a few minutes!") # Embedded Login form - remove the autofocus class EmbeddedAuthenticationForm(CheckApprovedForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['username'].widget.attrs.pop('autofocus', None) class PasswordReset(PasswordResetForm): hcaptcha = CaptchaField() class ProfileCreationForm(UserCreationForm): class Meta(UserCreationForm.Meta): model = models.Profile class ProfileChangeForm(UserChangeForm): class Meta(UserChangeForm.Meta): model = models.Profile