aboutsummaryrefslogtreecommitdiff
path: root/users/forms.py
diff options
context:
space:
mode:
authorBobby <[email protected]>2024-12-15 19:11:48 -0500
committerBobby <[email protected]>2024-12-15 19:11:48 -0500
commit8bb529d5eefec11360e7aacb287120d6427793bd (patch)
tree356d0690288513eee99abedafd3cf0929a3f27a3 /users/forms.py
parent12c92bf4d74f3717b1eafe1737e671a2b8bda02e (diff)
downloadthatcomputerscientist-8bb529d5eefec11360e7aacb287120d6427793bd.tar.xz
thatcomputerscientist-8bb529d5eefec11360e7aacb287120d6427793bd.zip
user stats
Diffstat (limited to 'users/forms.py')
-rw-r--r--users/forms.py279
1 files changed, 0 insertions, 279 deletions
diff --git a/users/forms.py b/users/forms.py
deleted file mode 100644
index c2b80732..00000000
--- a/users/forms.py
+++ /dev/null
@@ -1,279 +0,0 @@
-# Registration form
-
-import string
-from random import choice
-
-from django import forms
-from django.contrib.auth.models import User
-from django.template.loader import render_to_string
-from django.utils.html import strip_tags
-
-from apps.blog.context_processors import avatar_list
-from users.models import UserProfile
-
-from .accountFunctions import store_token
-from .mail_send import send_email
-
-
-class RegisterForm(forms.Form):
- username = forms.CharField(
- label="Username",
- max_length=30,
- min_length=4,
- required=True,
- widget=forms.TextInput(
- attrs={"placeholder": "Username", "autocomplete": "off"}
- ),
- )
- email = forms.EmailField(
- label="Email",
- max_length=255,
- required=True,
- widget=forms.EmailInput(attrs={"placeholder": "Email", "autocomplete": "off"}),
- )
- password1 = forms.CharField(
- label="Password",
- min_length=8,
- required=True,
- widget=forms.PasswordInput(attrs={"placeholder": "Password"}),
- )
- password2 = forms.CharField(
- label="Password (again)",
- widget=forms.PasswordInput(attrs={"placeholder": "Password (again)"}),
- min_length=8,
- required=True,
- )
- captcha = forms.CharField(
- label="Captcha",
- max_length=6,
- min_length=6,
- required=True,
- widget=forms.TextInput(attrs={"placeholder": "Captcha", "autocomplete": "off"}),
- )
- expected_captcha = None
- protected_usernames = [
- "admin",
- "administrator",
- "root",
- "thatcomputerscientist",
- "skippy",
- "system",
- "test",
- "user",
- "webmaster",
- "www",
- "postmaster",
- "hostmaster",
- "info",
- "support",
- "anonymous",
- "guest",
- "nobody",
- "someone",
- "moderator",
- "moderators",
- "mods",
- "crvs",
- ]
- allowed_chars = string.ascii_letters + string.digits
-
- def __init__(self, *args, **kwargs):
- if "expected_captcha" in kwargs:
- self.expected_captcha = kwargs.pop("expected_captcha")
- super().__init__(*args, **kwargs)
-
- def clean(self):
- cleaned_data = super().clean()
- password1 = cleaned_data.get("password1")
- password2 = cleaned_data.get("password2")
- captcha = cleaned_data.get("captcha")
- if password1 and password2:
- if password1 != password2:
- raise forms.ValidationError("Passwords do not match.")
- if len(password1) < 8:
- raise forms.ValidationError("Password must be at least 8 characters long.")
- if str.lower(captcha) != str.lower(self.expected_captcha):
- raise forms.ValidationError("Captcha does not match.")
- if User.objects.filter(username=cleaned_data.get("username")).exists():
- raise forms.ValidationError(
- "Username not available. Please choose another."
- )
- if cleaned_data.get("username").lower() in self.protected_usernames:
- raise forms.ValidationError(
- "Username not available. Please choose another."
- )
- for char in cleaned_data.get("username"):
- if char not in self.allowed_chars:
- raise forms.ValidationError(
- "Username contains invalid characters. Only A-Z, a-z, and 0-9 are allowed."
- )
- if User.objects.filter(email=cleaned_data.get("email")).exists():
- raise forms.ValidationError(
- "Email already exists. Please login if this account is yours."
- )
- return cleaned_data
-
- def save(self, request):
- user = User.objects.create_user(
- username=self.cleaned_data.get("username").lower(),
- email=self.cleaned_data.get("email").lower(),
- password=self.cleaned_data.get("password1"),
- )
- user.save()
- user_profile = UserProfile.objects.create(user=user)
- avatar_dir = choice(list(avatar_list().keys()))
- avatar_file = choice(avatar_list()[avatar_dir])
- user_profile.avatar_url = avatar_dir + "/" + avatar_file.replace(".gif", "")
- user_profile.save()
-
- uid, token = store_token(token_type="verifyemail", user=user, email=user.email)
-
- # Send verification email
- subject = "Verify your email address"
- message = render_to_string(
- "verification_email.html",
- {
- "user": user.username if user.first_name is None else user.first_name,
- "site_name": "Shifoo",
- "uid": uid,
- "token": token,
- "protocol": "https://" if request.is_secure() else "http://",
- "domain": request.get_host(),
- },
- )
- # message = strip_tags(message)
- # send_mail(subject, message, 'Shifoo <' + settings.EMAIL_HOST_USER + '>', [user.email], fail_silently=False)
- if send_email(
- sender="[email protected]",
- sender_name="Shifoo",
- recipient=user.email,
- subject=subject,
- body_html=message,
- body_text=message,
- ):
- return user
- else:
- return user
-
-
-class ForgotPasswordForm(forms.Form):
- email = forms.EmailField(label="Email", required=True)
-
- def clean(self):
- cleaned_data = super().clean()
- return cleaned_data
-
- def save(self, request):
- email = self.cleaned_data.get("email")
- user = User.objects.get(email=email)
- uid, token = store_token(
- token_type="resetpassword", user=user, email=user.email
- )
- subject = "Reset your password"
- message = render_to_string(
- "reset_password_email.html",
- {
- "user": user.username if user.first_name is None else user.first_name,
- "site_name": "Shifoo",
- "uid": uid,
- "token": token,
- "protocol": "https://" if request.is_secure() else "http://",
- "domain": request.get_host(),
- },
- )
- # message = strip_tags(message)
- if send_email(
- sender="[email protected]",
- sender_name="Shifoo",
- recipient=user.email,
- subject=subject,
- body_html=message,
- body_text=message,
- ):
- return user
- else:
- raise forms.ValidationError("Failed to send email.")
-
-
-class ResetPasswordForm(forms.Form):
- password1 = forms.CharField(
- label="New Password", widget=forms.PasswordInput, min_length=8
- )
- password2 = forms.CharField(
- label="New Password (again)", widget=forms.PasswordInput, min_length=8
- )
-
- def clean(self):
- cleaned_data = super().clean()
- password1 = cleaned_data.get("password1")
- password2 = cleaned_data.get("password2")
- if password1 and password2:
- if password1 != password2:
- raise forms.ValidationError("Passwords do not match.")
- if len(password1) < 8:
- raise forms.ValidationError("Password must be at least 8 characters long.")
- return cleaned_data
-
- def save(self, user):
- user.set_password(self.cleaned_data.get("password1"))
- user.save()
- return user
-
-
-class UpdateUserDetailsForm(forms.Form):
- first_name = forms.CharField(
- label="First name",
- max_length=30,
- required=False,
- widget=forms.TextInput(attrs={"placeholder": "First name"}),
- )
- last_name = forms.CharField(
- label="Last name",
- max_length=30,
- required=False,
- widget=forms.TextInput(attrs={"placeholder": "Last name"}),
- )
- location = forms.CharField(
- label="Location",
- max_length=30,
- required=False,
- widget=forms.TextInput(attrs={"placeholder": "Location"}),
- )
- bio = forms.CharField(
- label="Bio",
- max_length=500,
- required=False,
- widget=forms.Textarea(attrs={"placeholder": "Bio"}),
- )
- is_public = forms.ChoiceField(
- label="Activity Visibility",
- choices=((True, "Public"), (False, "Private")),
- widget=forms.RadioSelect,
- )
- email_public = forms.ChoiceField(
- label="Email Visibility",
- choices=((True, "Public"), (False, "Private")),
- widget=forms.RadioSelect,
- )
-
- def __init__(self, *args, **kwargs):
- self.user = kwargs.pop("user")
- super().__init__(*args, **kwargs)
-
- def clean(self):
- cleaned_data = super().clean()
- return cleaned_data
-
- def save(self):
- self.user.first_name = self.cleaned_data.get("first_name")
- self.user.last_name = self.cleaned_data.get("last_name")
- self.user.save()
-
- user_profile = UserProfile.objects.get(user=self.user)
- user_profile.location = self.cleaned_data.get("location")
- user_profile.bio = self.cleaned_data.get("bio")
- user_profile.is_public = self.cleaned_data.get("is_public")
- user_profile.email_public = self.cleaned_data.get("email_public")
- user_profile.save()
-
- return (self.user, user_profile)