summaryrefslogtreecommitdiff
path: root/coip/apps
diff options
context:
space:
mode:
authorLeif Johansson <leifj@sunet.se>2010-07-07 22:01:53 +0200
committerLeif Johansson <leifj@sunet.se>2010-07-07 22:01:53 +0200
commit08b06e70f6a5f9f4d51317b0b2930238e09ee8c7 (patch)
treee9bc6e9408e866bf229f0414abdb8110f49c8b06 /coip/apps
parent648f18d2d8e1e4d0791d11204ced8566f30eaa9e (diff)
integrated invitation management into membership application
Diffstat (limited to 'coip/apps')
-rw-r--r--coip/apps/auth/utils.py9
-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/forms.py8
-rw-r--r--coip/apps/membership/models.py11
-rw-r--r--coip/apps/membership/views.py32
9 files changed, 55 insertions, 87 deletions
diff --git a/coip/apps/auth/utils.py b/coip/apps/auth/utils.py
new file mode 100644
index 0000000..b7bb044
--- /dev/null
+++ b/coip/apps/auth/utils.py
@@ -0,0 +1,9 @@
+'''
+Created on Jul 7, 2010
+
+@author: leifj
+'''
+from uuid import uuid4
+
+def nonce():
+ return uuid4().hex; \ No newline at end of file
diff --git a/coip/apps/invitation/__init__.py b/coip/apps/invitation/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/coip/apps/invitation/__init__.py
+++ /dev/null
diff --git a/coip/apps/invitation/admin.py b/coip/apps/invitation/admin.py
deleted file mode 100644
index 722b147..0000000
--- a/coip/apps/invitation/admin.py
+++ /dev/null
@@ -1,4 +0,0 @@
-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
deleted file mode 100644
index 3370597..0000000
--- a/coip/apps/invitation/forms.py
+++ /dev/null
@@ -1,11 +0,0 @@
-'''
-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
deleted file mode 100644
index 951fa59..0000000
--- a/coip/apps/invitation/models.py
+++ /dev/null
@@ -1,34 +0,0 @@
-'''
-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
deleted file mode 100644
index 63f017f..0000000
--- a/coip/apps/invitation/views.py
+++ /dev/null
@@ -1,33 +0,0 @@
-'''
-Created on Jun 23, 2010
-
-@author: leifj
-'''
-from django.contrib.auth.decorators import login_required
-from coip.apps.invitation.forms import InvitationForm
-from coip.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/forms.py b/coip/apps/membership/forms.py
index 9adab0d..c74307b 100644
--- a/coip/apps/membership/forms.py
+++ b/coip/apps/membership/forms.py
@@ -5,7 +5,13 @@ Created on Jun 23, 2010
'''
from django import forms
from coip.apps.membership.models import Membership
+from django.forms.widgets import Textarea
class MembershipForm(forms.ModelForm):
class Meta:
- model = Membership \ No newline at end of file
+ model = Membership
+
+class InvitationForm(forms.Form):
+ email = forms.EmailField()
+ expires = forms.DateTimeField()
+ message = forms.CharField(widget=Textarea) \ No newline at end of file
diff --git a/coip/apps/membership/models.py b/coip/apps/membership/models.py
index 2186607..72b102a 100644
--- a/coip/apps/membership/models.py
+++ b/coip/apps/membership/models.py
@@ -7,17 +7,21 @@ from django.db import models
from django.contrib.auth.models import User
from coip.apps.name.models import Name
import datetime
+from pprint import pprint
class Membership(models.Model):
'''
Membership in a namespace/group
'''
user = models.ForeignKey(User,unique=True,blank=True)
+ inviter = models.ForeignKey(User,unique=True,blank=True)
+ name = models.ForeignKey(Name,related_name='memberships')
+ email = models.EmailField(blank=True,null=True)
+ nonce = models.CharField(max_length=255,blank=True,null=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,related_name='memberships')
def __unicode__(self):
return "%s in %s" % (self.user,self.name)
@@ -30,3 +34,8 @@ class Membership(models.Model):
return "active"
else:
return "inactive";
+
+ def send_email(self):
+ pprint("sent email to "+self.to)
+ return
+
diff --git a/coip/apps/membership/views.py b/coip/apps/membership/views.py
index 7a06a21..6a500d9 100644
--- a/coip/apps/membership/views.py
+++ b/coip/apps/membership/views.py
@@ -5,9 +5,35 @@ Created on Jun 23, 2010
'''
from django.contrib.auth.decorators import login_required
from coip.apps.membership.models import Membership
+from coip.apps.membership.forms import InvitationForm
+from django.http import HttpResponseRedirect
+from coip.apps.auth.utils import nonce
+from coip.multiresponse import respond_to
+#@login_required
+#def memberships(request,name):
+#
+# Membership.objects.get(name)
+
+
@login_required
-def memberships(request,name):
+def invite(request):
+ user = request.user
+ if request.method == 'POST':
+ form = InvitationForm(request.POST)
+ if form.is_valid():
+ email = form.cleaned_data["email"]
+ expires = form.cleaned_data["expires"]
+ message = form.cleaned_data["message"]
+ membership = Membership(inviter=user,email=email,message=message,expires=expires,nonce=nonce())
+ membership.save()
+ membership.send_email()
+ return HttpResponseRedirect("/membership/id/"+membership.id)
+ else:
+ form = InvitationForm({});
- Membership.objects.get(name)
- \ No newline at end of file
+ return respond_to(request,{'text/html': 'apps/invitation/create.html'},{'form': form})
+
+def accept(request,nonce):
+ user = request.user
+ membership = Membership.objects.get(nonce=nonce) \ No newline at end of file