From e7e9b151643772f2bf9564d215ec8b90cd9b45c6 Mon Sep 17 00:00:00 2001
From: Dan McGee <dan@archlinux.org>
Date: Wed, 5 Sep 2012 08:44:33 -0500
Subject: Split devel forms out of devel/views.py

Signed-off-by: Dan McGee <dan@archlinux.org>
---
 devel/forms.py | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 99 insertions(+)
 create mode 100644 devel/forms.py

(limited to 'devel/forms.py')

diff --git a/devel/forms.py b/devel/forms.py
new file mode 100644
index 00000000..861a576c
--- /dev/null
+++ b/devel/forms.py
@@ -0,0 +1,99 @@
+import random
+from string import ascii_letters, digits
+
+from django import forms
+from django.contrib.auth.models import User, Group
+from django.contrib.sites.models import Site
+from django.core.mail import send_mail
+from django.template import loader, Context
+
+from .models import UserProfile
+
+
+class ProfileForm(forms.Form):
+    email = forms.EmailField(label='Private email (not shown publicly):',
+            help_text="Used for out-of-date notifications, etc.")
+    passwd1 = forms.CharField(label='New Password', required=False,
+            widget=forms.PasswordInput)
+    passwd2 = forms.CharField(label='Confirm Password', required=False,
+            widget=forms.PasswordInput)
+
+    def clean(self):
+        if self.cleaned_data['passwd1'] != self.cleaned_data['passwd2']:
+            raise forms.ValidationError('Passwords do not match.')
+        return self.cleaned_data
+
+
+class UserProfileForm(forms.ModelForm):
+    def clean_pgp_key(self):
+        data = self.cleaned_data['pgp_key']
+        # strip 0x prefix if provided; store uppercase
+        if data.startswith('0x'):
+            data = data[2:]
+        return data.upper()
+
+    class Meta:
+        model = UserProfile
+        exclude = ('allowed_repos', 'user', 'latin_name')
+
+
+class NewUserForm(forms.ModelForm):
+    username = forms.CharField(max_length=30)
+    private_email = forms.EmailField()
+    first_name = forms.CharField(required=False)
+    last_name = forms.CharField(required=False)
+    groups = forms.ModelMultipleChoiceField(required=False,
+            queryset=Group.objects.all())
+
+    class Meta:
+        model = UserProfile
+        exclude = ('picture', 'user')
+
+    def __init__(self, *args, **kwargs):
+        super(NewUserForm, self).__init__(*args, **kwargs)
+        # Hack ourself so certain fields appear first. self.fields is a
+        # SortedDict object where we can manipulate the keyOrder list.
+        order = self.fields.keyOrder
+        keys = ('username', 'private_email', 'first_name', 'last_name')
+        for key in reversed(keys):
+            order.remove(key)
+            order.insert(0, key)
+
+    def clean_username(self):
+        username = self.cleaned_data['username']
+        if User.objects.filter(username=username).exists():
+            raise forms.ValidationError(
+                    "A user with that username already exists.")
+        return username
+
+    def save(self, commit=True):
+        profile = super(NewUserForm, self).save(False)
+        pwletters = ascii_letters + digits
+        password = ''.join([random.choice(pwletters) for _ in xrange(8)])
+        user = User.objects.create_user(username=self.cleaned_data['username'],
+                email=self.cleaned_data['private_email'], password=password)
+        user.first_name = self.cleaned_data['first_name']
+        user.last_name = self.cleaned_data['last_name']
+        user.save()
+        # sucks that the MRM.add() method can't take a list directly... we have
+        # to resort to dirty * magic.
+        user.groups.add(*self.cleaned_data['groups'])
+        profile.user = user
+        if commit:
+            profile.save()
+            self.save_m2m()
+
+        template = loader.get_template('devel/new_account.txt')
+        ctx = Context({
+            'site': Site.objects.get_current(),
+            'user': user,
+            'password': password,
+        })
+
+        send_mail("Your new archweb account",
+                template.render(ctx),
+                'Arch Website Notification <nobody@archlinux.org>',
+                [user.email],
+                fail_silently=False)
+
+# vim: set ts=4 sw=4 et:
-- 
cgit v1.2.3-2-g168b


From a22557811a24b68ef85d4271787c48d8d1e4fc99 Mon Sep 17 00:00:00 2001
From: Luke Shumaker <LukeShu@sbcglobal.net>
Date: Sun, 21 Apr 2013 02:49:16 -0400
Subject: catch a few more instances of archlinux

---
 devel/forms.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'devel/forms.py')

diff --git a/devel/forms.py b/devel/forms.py
index 861a576c..7f7c281e 100644
--- a/devel/forms.py
+++ b/devel/forms.py
@@ -2,6 +2,7 @@ import random
 from string import ascii_letters, digits
 
 from django import forms
+from django.conf import settings
 from django.contrib.auth.models import User, Group
 from django.contrib.sites.models import Site
 from django.core.mail import send_mail
@@ -92,7 +93,7 @@ class NewUserForm(forms.ModelForm):
 
         send_mail("Your new archweb account",
                 template.render(ctx),
-                'Arch Website Notification <nobody@archlinux.org>',
+                settings.BRANDING_EMAIL,
                 [user.email],
                 fail_silently=False)
 
-- 
cgit v1.2.3-2-g168b