summaryrefslogtreecommitdiff
path: root/coip/apps
diff options
context:
space:
mode:
Diffstat (limited to 'coip/apps')
-rw-r--r--coip/apps/__init__.py0
-rw-r--r--coip/apps/invitation/__init__.py0
-rw-r--r--coip/apps/invitation/admin.py4
-rw-r--r--coip/apps/invitation/forms.py11
-rw-r--r--coip/apps/invitation/models.py34
-rw-r--r--coip/apps/invitation/views.py33
-rw-r--r--coip/apps/membership/__init__.py0
-rw-r--r--coip/apps/membership/admin.py4
-rw-r--r--coip/apps/membership/forms.py11
-rw-r--r--coip/apps/membership/models.py23
-rw-r--r--coip/apps/membership/views.py13
-rw-r--r--coip/apps/name/__init__.py0
-rw-r--r--coip/apps/name/admin.py5
-rw-r--r--coip/apps/name/forms.py15
-rw-r--r--coip/apps/name/models.py73
-rw-r--r--coip/apps/name/views.py0
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