Commit 58714ac8 authored by Chris Reffett's avatar Chris Reffett
Browse files

Better approval system: admins can go into the admin interface and check an...

Better approval system: admins can go into the admin interface and check an 'approved' box for all users who submit requests. Verify that usernames aren't colliding.
parent c15f51ae
from django import forms from django import forms
from go.models import URL from go.models import URL, RegisteredUser
from django.core.validators import MinLengthValidator, MinValueValidator, RegexValidator from django.core.validators import MinLengthValidator, MinValueValidator, RegexValidator
from django.core.exceptions import ValidationError from django.core.exceptions import ValidationError
from captcha.fields import CaptchaField from captcha.fields import CaptchaField
...@@ -64,11 +64,20 @@ class URLForm( forms.ModelForm ): ...@@ -64,11 +64,20 @@ class URLForm( forms.ModelForm ):
} }
class SignupForm( forms.Form ): class SignupForm( forms.ModelForm ):
def validate_username(username):
try:
registered = RegisteredUser.objects.get(username=username)
raise ValidationError('Username "%s" is already in use.' % username)
except RegisteredUser.DoesNotExist:
return
username = forms.CharField( username = forms.CharField(
required = True, required = True,
label = 'Username', label = 'Mason NetID',
max_length = 30, max_length = 30,
validators=[validate_username],
widget = forms.TextInput(attrs={ widget = forms.TextInput(attrs={
}), }),
) )
...@@ -87,3 +96,6 @@ class SignupForm( forms.Form ): ...@@ -87,3 +96,6 @@ class SignupForm( forms.Form ):
}), }),
) )
captcha = CaptchaField() captcha = CaptchaField()
class Meta:
model = RegisteredUser
# -*- coding: utf-8 -*-
from south.utils import datetime_utils as datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models
class Migration(SchemaMigration):
def forwards(self, orm):
# Adding field 'RegisteredUser.approved'
db.add_column(u'go_registereduser', 'approved',
self.gf('django.db.models.fields.BooleanField')(default=True),
keep_default=False)
def backwards(self, orm):
# Deleting field 'RegisteredUser.approved'
db.delete_column(u'go_registereduser', 'approved')
models = {
u'auth.group': {
'Meta': {'object_name': 'Group'},
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
},
u'auth.permission': {
'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
},
u'auth.user': {
'Meta': {'object_name': 'User'},
'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
},
u'contenttypes.contenttype': {
'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
},
u'go.registereduser': {
'Meta': {'object_name': 'RegisteredUser'},
'approved': ('django.db.models.fields.BooleanField', [], {}),
'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
'full_name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
'username': ('django.db.models.fields.CharField', [], {'max_length': '30', 'primary_key': 'True'})
},
u'go.url': {
'Meta': {'ordering': "['short']", 'object_name': 'URL'},
'clicks': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
'date_created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime(2014, 8, 28, 0, 0)'}),
'expires': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['auth.User']"}),
'short': ('django.db.models.fields.CharField', [], {'max_length': '20', 'primary_key': 'True'}),
'target': ('django.db.models.fields.URLField', [], {'max_length': '1000'})
}
}
complete_apps = ['go']
\ No newline at end of file
...@@ -66,6 +66,8 @@ class RegisteredUser( models.Model ): ...@@ -66,6 +66,8 @@ class RegisteredUser( models.Model ):
description = models.TextField( blank=True ) description = models.TextField( blank=True )
approved = models.BooleanField()
def __unicode__(self): def __unicode__(self):
return '<Registered User: %s>' % self.username return '<Registered User: %s>' % self.username
...@@ -5,7 +5,7 @@ from django.conf import settings ...@@ -5,7 +5,7 @@ from django.conf import settings
from django.http import Http404, HttpResponseServerError from django.http import Http404, HttpResponseServerError
from django.utils import timezone from django.utils import timezone
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied, ValidationError
from django.core.mail import send_mail from django.core.mail import send_mail
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.shortcuts import render, get_object_or_404, redirect from django.shortcuts import render, get_object_or_404, redirect
...@@ -26,7 +26,7 @@ def is_registered( user ): ...@@ -26,7 +26,7 @@ def is_registered( user ):
try: try:
registered = RegisteredUser.objects.get( username=user.username ) registered = RegisteredUser.objects.get( username=user.username )
return True return registered.approved
except RegisteredUser.DoesNotExist: except RegisteredUser.DoesNotExist:
return False return False
...@@ -186,14 +186,14 @@ def signup(request): ...@@ -186,14 +186,14 @@ def signup(request):
""" """
form = SignupForm() signup_form = SignupForm()
if request.method == 'POST': if request.method == 'POST':
form = SignupForm( request.POST ) signup_form = SignupForm(request.POST, initial={'approved': False})
if form.is_valid(): if signup_form.is_valid():
username = form.cleaned_data.get('username') username = signup_form.cleaned_data.get('username')
full_name = form.cleaned_data.get('full_name') full_name = signup_form.cleaned_data.get('full_name')
description = form.cleaned_data.get('description') description = signup_form.cleaned_data.get('description')
send_mail('Signup from %s' % (username), '%s signed up at %s\n' send_mail('Signup from %s' % (username), '%s signed up at %s\n'
'Username: %s\nMessage: %s\nPlease attend to this request at ' 'Username: %s\nMessage: %s\nPlease attend to this request at '
...@@ -201,10 +201,12 @@ def signup(request): ...@@ -201,10 +201,12 @@ def signup(request):
str(timezone.now()).strip(), str(username), str(description)), str(timezone.now()).strip(), str(username), str(description)),
settings.EMAIL_FROM, [settings.EMAIL_TO]) settings.EMAIL_FROM, [settings.EMAIL_TO])
signup_form.save()
return redirect('registered') return redirect('registered')
return render(request, 'signup.html', { return render(request, 'signup.html', {
'form': form, 'form': signup_form,
}, },
) )
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment