diff options
author | Leif Johansson <leifj@sunet.se> | 2010-07-05 21:37:04 +0200 |
---|---|---|
committer | Leif Johansson <leifj@sunet.se> | 2010-07-05 21:37:04 +0200 |
commit | 8f7f4ff3a35ddeacea7d5530c7dc3c296907ab67 (patch) | |
tree | 7d481dc7030ad191314aa2569cca9f8301e1f997 /coip/apps |
import
Diffstat (limited to 'coip/apps')
-rw-r--r-- | coip/apps/__init__.py | 0 | ||||
-rw-r--r-- | coip/apps/invitation/__init__.py | 0 | ||||
-rw-r--r-- | coip/apps/invitation/admin.py | 4 | ||||
-rw-r--r-- | coip/apps/invitation/forms.py | 11 | ||||
-rw-r--r-- | coip/apps/invitation/models.py | 34 | ||||
-rw-r--r-- | coip/apps/invitation/views.py | 33 | ||||
-rw-r--r-- | coip/apps/membership/__init__.py | 0 | ||||
-rw-r--r-- | coip/apps/membership/admin.py | 4 | ||||
-rw-r--r-- | coip/apps/membership/forms.py | 11 | ||||
-rw-r--r-- | coip/apps/membership/models.py | 23 | ||||
-rw-r--r-- | coip/apps/membership/views.py | 13 | ||||
-rw-r--r-- | coip/apps/name/__init__.py | 0 | ||||
-rw-r--r-- | coip/apps/name/admin.py | 5 | ||||
-rw-r--r-- | coip/apps/name/forms.py | 15 | ||||
-rw-r--r-- | coip/apps/name/models.py | 73 | ||||
-rw-r--r-- | coip/apps/name/views.py | 0 |
16 files changed, 226 insertions, 0 deletions
diff --git a/coip/apps/__init__.py b/coip/apps/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/coip/apps/__init__.py diff --git a/coip/apps/invitation/__init__.py b/coip/apps/invitation/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/coip/apps/invitation/__init__.py diff --git a/coip/apps/invitation/admin.py b/coip/apps/invitation/admin.py new file mode 100644 index 0000000..722b147 --- /dev/null +++ b/coip/apps/invitation/admin.py @@ -0,0 +1,4 @@ +from django.contrib import admin +from coip.apps.invitation.models import Invitation + +admin.site.register(Invitation)
\ No newline at end of file diff --git a/coip/apps/invitation/forms.py b/coip/apps/invitation/forms.py new file mode 100644 index 0000000..3370597 --- /dev/null +++ b/coip/apps/invitation/forms.py @@ -0,0 +1,11 @@ +''' +Created on Jul 5, 2010 + +@author: leifj +''' +from django import forms +from coip.apps.invitation.models import Invitation + +class InvitationForm(forms.ModelForm): + class Meta: + model = Invitation
\ No newline at end of file diff --git a/coip/apps/invitation/models.py b/coip/apps/invitation/models.py new file mode 100644 index 0000000..951fa59 --- /dev/null +++ b/coip/apps/invitation/models.py @@ -0,0 +1,34 @@ +''' +Created on Jun 23, 2010 + +@author: leifj +''' + +from django.db import models +from django.contrib.auth.models import User +from coip.apps.membership.models import Membership +from pprint import pprint +from uuid import uuid4 +import datetime + +class Invitation(models.Model): + ''' + Represents an invitation to an application + ''' + sender = models.ForeignKey(User, unique=True) + membership = models.ForeignKey(Membership, unique=True) + timecreated = models.DateTimeField(auto_now_add=True) + lastupdated = models.DateTimeField(auto_now=True) + expires = models.DateTimeField() + token = models.TextField(unique=True) + + + def __init__(self): + self.token = uuid4() + + def valid(self): + return datetime.date.today() > self.expires + + def send_email(self): + pprint("sent email to "+self.to) + return
\ No newline at end of file diff --git a/coip/apps/invitation/views.py b/coip/apps/invitation/views.py new file mode 100644 index 0000000..fe1c6af --- /dev/null +++ b/coip/apps/invitation/views.py @@ -0,0 +1,33 @@ +''' +Created on Jun 23, 2010 + +@author: leifj +''' +from django.contrib.auth.decorators import login_required +from apps.invitation.forms import InvitationForm +from apps.invitation.models import Invitation +from django.shortcuts import render_to_response +from django.http import HttpResponseRedirect + +@login_required +def create(request): + user = request.user + if request.method == 'POST': + form = InvitationForm(request.POST) + if form.is_valid(): + to = form.cleaned_data["to"] + expires = form.cleaned_data["expires"] + invitation = Invitation(sender=user,to=to,expires=expires) + invitation.save() + invitation.send_email() + return HttpResponseRedirect("/user/home") + else: + form = InvitationForm({}); + + return render_to_response('apps/invitation/create.html') + +def accept(request,token): + user = request.user + invitation = Invitation.objects.get(token=token) + +
\ No newline at end of file diff --git a/coip/apps/membership/__init__.py b/coip/apps/membership/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/coip/apps/membership/__init__.py diff --git a/coip/apps/membership/admin.py b/coip/apps/membership/admin.py new file mode 100644 index 0000000..a98efe7 --- /dev/null +++ b/coip/apps/membership/admin.py @@ -0,0 +1,4 @@ +from django.contrib import admin +from coip.apps.membership.models import Membership + +admin.site.register(Membership)
\ No newline at end of file diff --git a/coip/apps/membership/forms.py b/coip/apps/membership/forms.py new file mode 100644 index 0000000..9adab0d --- /dev/null +++ b/coip/apps/membership/forms.py @@ -0,0 +1,11 @@ +''' +Created on Jun 23, 2010 + +@author: leifj +''' +from django import forms +from coip.apps.membership.models import Membership + +class MembershipForm(forms.ModelForm): + class Meta: + model = Membership
\ No newline at end of file diff --git a/coip/apps/membership/models.py b/coip/apps/membership/models.py new file mode 100644 index 0000000..df6e796 --- /dev/null +++ b/coip/apps/membership/models.py @@ -0,0 +1,23 @@ +''' +Created on Jun 23, 2010 + +@author: leifj +''' +from django.db import models +from django.contrib.auth.models import User +from coip.apps.name.models import Name +import datetime + +class Membership(models.Model): + ''' + Membership in a namespace/group + ''' + user = models.ForeignKey(User,unique=True,blank=True) + enabled = models.BooleanField() + timecreated = models.DateTimeField(auto_now_add=True) + lastupdated = models.DateTimeField(auto_now=True) + expires = models.DateTimeField(blank=True) + name = models.ForeignKey(Name) + + def valid(self): + return self.enabled and datetime.date.today() > self.expires diff --git a/coip/apps/membership/views.py b/coip/apps/membership/views.py new file mode 100644 index 0000000..7a06a21 --- /dev/null +++ b/coip/apps/membership/views.py @@ -0,0 +1,13 @@ +''' +Created on Jun 23, 2010 + +@author: leifj +''' +from django.contrib.auth.decorators import login_required +from coip.apps.membership.models import Membership + +@login_required +def memberships(request,name): + + Membership.objects.get(name) +
\ No newline at end of file diff --git a/coip/apps/name/__init__.py b/coip/apps/name/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/coip/apps/name/__init__.py diff --git a/coip/apps/name/admin.py b/coip/apps/name/admin.py new file mode 100644 index 0000000..477da76 --- /dev/null +++ b/coip/apps/name/admin.py @@ -0,0 +1,5 @@ +from django.contrib import admin +from coip.apps.name.models import Name, Attribute + +admin.site.register(Name) +admin.site.register(Attribute)
\ No newline at end of file diff --git a/coip/apps/name/forms.py b/coip/apps/name/forms.py new file mode 100644 index 0000000..0c96480 --- /dev/null +++ b/coip/apps/name/forms.py @@ -0,0 +1,15 @@ +''' +Created on Jun 24, 2010 + +@author: leifj +''' +from django import forms +from coip.apps.name.models import Name, Attribute + +class NameForm(forms.ModelForm): + class Meta: + model = Name + +class AttributeForm(forms.ModelForm): + class Meta: + model = Attribute
\ No newline at end of file diff --git a/coip/apps/name/models.py b/coip/apps/name/models.py new file mode 100644 index 0000000..ec86769 --- /dev/null +++ b/coip/apps/name/models.py @@ -0,0 +1,73 @@ +''' +Created on Jun 24, 2010 + +@author: leifj +''' +from django.db import models +from django.contrib.auth.models import User +import re + +class Attribute(models.Model): + name = models.CharField(unique=True,max_length=255) + description = models.TextField(blank=True) + timecreated = models.DateTimeField(auto_now_add=True) + lastupdated = models.DateTimeField(auto_now=True) + + def __unicode__(self): + return self.name; + +class Name(models.Model): + ''' + A name-space/authorization/right/group/collaboration/thing + ''' + type = models.ForeignKey(Attribute, blank=True, null=True,related_name='names') + value = models.CharField(max_length=255) + parent = models.ForeignKey('self', blank=True, null=True,related_name='children') + partof = models.ForeignKey('self', blank=True, null=True,related_name='parts') + acl = models.TextField(blank=True) # fully-qualified-name '#' rights + description = models.TextField(blank=True) + creator = models.ForeignKey(User) + timecreated = models.DateTimeField(auto_now_add=True) + lastupdated = models.DateTimeField(auto_now=True) + + def relative_name(self): + if self.type: + return "%s=%s" % (self.type.name,self.value) + else: + return self.value + + def __unicode__(self): + n = self + str = "" + while n: + sep = "" + av = n.relative_name() + + if n.parent: + if av.find("=") == -1: + sep = ':' + else: + sep = ';' + + str = sep+av+str + n = n.parent + + return str + +def walkto(root,nameparts): + name = None + for n in nameparts: + (a,eq,v) = n.partition('=') + if v: + attribute = Attribute.objects.get(name=a) + name = Name.objects.get(parent=root,type=attribute.id,value=v) + else: + name = Name.objects.get(parent=root,type=None,value=a) + return name + +def lookup(name): + return walkto(None,nameparts=re.compile('[;:]').split(name)) + +def attribute(a): + Attribute.objects.get_or_create(name=a) +
\ No newline at end of file diff --git a/coip/apps/name/views.py b/coip/apps/name/views.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/coip/apps/name/views.py |