Skip to content

Commit

Permalink
First commit
Browse files Browse the repository at this point in the history
  • Loading branch information
Chris Williams committed Mar 17, 2009
0 parents commit cc61c59
Show file tree
Hide file tree
Showing 21 changed files with 419 additions and 0 deletions.
5 changes: 5 additions & 0 deletions README
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
django-cas-provider

Chris Williams <chris@nitron.org>

TODO: Write documentation
15 changes: 15 additions & 0 deletions cas_provider/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from django.conf import settings

__all__ = []

_DEFAULTS = {
'CAS_TICKET_EXPIRATION': 5, # In minutes
}

for key, value in _DEFAULTS.iteritems():
try:
getattr(settings, key)
except AttributeError:
setattr(settings, key, value)
except ImportError:
pass
11 changes: 11 additions & 0 deletions cas_provider/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from django.contrib import admin

from models import ServiceTicket, LoginTicket

class ServiceTicketAdmin(admin.ModelAdmin):
pass
admin.site.register(ServiceTicket, ServiceTicketAdmin)

class LoginTicketAdmin(admin.ModelAdmin):
pass
admin.site.register(LoginTicket, LoginTicketAdmin)
16 changes: 16 additions & 0 deletions cas_provider/forms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
from django import forms
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth import authenticate

from utils import create_login_ticket

class LoginForm(forms.Form):
username = forms.CharField(max_length=30)
password = forms.CharField(widget=forms.PasswordInput)
#warn = forms.BooleanField(required=False) # TODO: Implement
lt = forms.CharField(widget=forms.HiddenInput, initial=create_login_ticket)
def __init__(self, service=None, renew=None, gateway=None, request=None, *args, **kwargs):
super(LoginForm, self).__init__(*args, **kwargs)
self.request = request
if service is not None:
self.fields['service'] = forms.CharField(widget=forms.HiddenInput, initial=service)
11 changes: 11 additions & 0 deletions cas_provider/management/.svn/all-wcprops
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
K 25
svn:wc:ra_dav:version-url
V 47
/svn/!svn/ver/170/trunk/registration/management
END
__init__.py
K 25
svn:wc:ra_dav:version-url
V 59
/svn/!svn/ver/170/trunk/registration/management/__init__.py
END
65 changes: 65 additions & 0 deletions cas_provider/management/.svn/entries
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
9

dir
170
http://django-registration.googlecode.com/svn/trunk/registration/management
http://django-registration.googlecode.com/svn



2008-09-22T10:00:14.397881Z
170
ubernostrum


svn:special svn:externals svn:needs-lock











b970a8a1-db28-0410-9b79-8b7e580363d3

commands
dir

__init__.py
file




2009-02-18T02:12:14.000000Z
d41d8cd98f00b204e9800998ecf8427e
2008-09-22T10:00:14.397881Z
170
ubernostrum





















0

1 change: 1 addition & 0 deletions cas_provider/management/.svn/format
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
9
Empty file.
Empty file.
17 changes: 17 additions & 0 deletions cas_provider/management/commands/.svn/all-wcprops
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
K 25
svn:wc:ra_dav:version-url
V 56
/svn/!svn/ver/170/trunk/registration/management/commands
END
__init__.py
K 25
svn:wc:ra_dav:version-url
V 68
/svn/!svn/ver/170/trunk/registration/management/commands/__init__.py
END
cleanupregistration.py
K 25
svn:wc:ra_dav:version-url
V 79
/svn/!svn/ver/170/trunk/registration/management/commands/cleanupregistration.py
END
96 changes: 96 additions & 0 deletions cas_provider/management/commands/.svn/entries
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
9

dir
170
http://django-registration.googlecode.com/svn/trunk/registration/management/commands
http://django-registration.googlecode.com/svn



2008-09-22T10:00:14.397881Z
170
ubernostrum


svn:special svn:externals svn:needs-lock











b970a8a1-db28-0410-9b79-8b7e580363d3

__init__.py
file




2009-02-18T02:12:14.000000Z
d41d8cd98f00b204e9800998ecf8427e
2008-09-22T10:00:14.397881Z
170
ubernostrum





















0

cleanupregistration.py
file




2009-02-18T02:12:14.000000Z
2fc6dce3e47cc12aafd11130c6c8b45e
2008-09-22T10:00:14.397881Z
170
ubernostrum





















630

1 change: 1 addition & 0 deletions cas_provider/management/commands/.svn/format
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
9
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
"""
A management command which deletes expired accounts (e.g.,
accounts which signed up but never activated) from the database.

Calls ``RegistrationProfile.objects.delete_expired_users()``, which
contains the actual logic for determining which accounts are deleted.

"""

from django.core.management.base import NoArgsCommand
from django.core.management.base import CommandError

from registration.models import RegistrationProfile


class Command(NoArgsCommand):
help = "Delete expired user registrations from the database"

def handle_noargs(self, **options):
RegistrationProfile.objects.delete_expired_users()
Empty file.
29 changes: 29 additions & 0 deletions cas_provider/management/commands/cleanuptickets.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
"""
A management command which deletes expired service tickets (e.g.,
from the database.
Calls ``ServiceTickets.objects.delete_expired_users()``, which
contains the actual logic for determining which accounts are deleted.
"""

from django.core.management.base import NoArgsCommand
from django.core.management.base import CommandError
from django.conf import settings

import datetime

from cas_provider.models import ServiceTicket

class Command(NoArgsCommand):
help = "Delete expired service tickets from the database"

def handle_noargs(self, **options):
tickets = ServiceTicket.objects.all()
for ticket in tickets:
expiration = datetime.timedelta(minutes=settings.CAS_TICKET_EXPIRATION)
if datetime.datetime.now() > ticket.created + expiration:
print "Deleting %s..." % ticket.ticket
ticket.delete()
else:
print "%s not expired..." % ticket.ticket
18 changes: 18 additions & 0 deletions cas_provider/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from django.db import models
from django.contrib.auth.models import User

class ServiceTicket(models.Model):
user = models.ForeignKey(User)
service = models.URLField(verify_exists=False)
ticket = models.CharField(max_length=256)
created = models.DateTimeField(auto_now=True)

def __unicode__(self):
return "%s (%s) - %s" % (self.user.username, self.service, self.created)

class LoginTicket(models.Model):
ticket = models.CharField(max_length=32)
created = models.DateTimeField(auto_now=True)

def __unicode__(self):
return "%s - %s" % (self.ticket, self.created)
9 changes: 9 additions & 0 deletions cas_provider/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from django.conf.urls.defaults import *

from views import *

urlpatterns = patterns('',
url(r'^login/', login),
url(r'^validate/', validate),
url(r'^logout/', logout),
)
19 changes: 19 additions & 0 deletions cas_provider/utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from random import Random
import string

from models import ServiceTicket, LoginTicket

def _generate_string(length=8, chars=string.letters + string.digits):
return ''.join(Random().sample(string.letters+string.digits, length))

def create_service_ticket(user, service):
ticket_string = 'ST-' + _generate_string(29) # Total ticket length = 29 + 3 = 32
ticket = ServiceTicket(service=service, user=user, ticket=ticket_string)
ticket.save()
return ticket

def create_login_ticket():
ticket_string = 'LT-' + _generate_string(29)
ticket = LoginTicket(ticket=ticket_string)
ticket.save()
return ticket_string
Loading

0 comments on commit cc61c59

Please sign in to comment.