summaryrefslogtreecommitdiff
path: root/coip
diff options
context:
space:
mode:
authorLeif Johansson <leifj@sunet.se>2010-12-03 23:20:31 +0100
committerLeif Johansson <leifj@sunet.se>2010-12-03 23:20:31 +0100
commitfc10f1fcfdff57a9250ef18daf761d8784be92da (patch)
tree8e355c1bf983c8257e283a02b69243a7fb0d8de0 /coip
parentf554f07fe2f4a9d7591bc9ff89e49a160d4eca78 (diff)
coip wsgi driver
Diffstat (limited to 'coip')
-rw-r--r--coip/apps/name/forms.py16
-rw-r--r--coip/apps/name/views.py52
-rw-r--r--coip/urls.py4
3 files changed, 65 insertions, 7 deletions
diff --git a/coip/apps/name/forms.py b/coip/apps/name/forms.py
index 9dd03a7..a2a659e 100644
--- a/coip/apps/name/forms.py
+++ b/coip/apps/name/forms.py
@@ -5,7 +5,8 @@ Created on Jun 24, 2010
'''
from django import forms
from coip.apps.name.models import Name, Attribute, NameLink
-from django.forms.fields import BooleanField
+from django.forms import fields
+from django.forms.widgets import HiddenInput, CheckboxSelectMultiple
class NameForm(forms.ModelForm):
class Meta:
@@ -16,20 +17,20 @@ class AttributeForm(forms.ModelForm):
model = Attribute
class NameEditForm(forms.ModelForm):
- description = forms.CharField(widget=forms.Textarea(attrs={'cols': 85, 'rows': 10}))
+ description = forms.CharField(widget=forms.Textarea(attrs={'cols': 60, 'rows': 6}))
class Meta:
model = Name
fields = ['short','description']
class NewNameForm(forms.ModelForm):
- description = forms.CharField(widget=forms.Textarea(attrs={'cols': 85, 'rows': 10}))
+ description = forms.CharField(widget=forms.Textarea(attrs={'cols': 60, 'rows': 6}))
class Meta:
model = Name
fields = ['type','value','short','description']
class NameDeleteForm(forms.Form):
- recursive = BooleanField(label="Also delete everything below this name?",required=False)
+ recursive = fields.BooleanField(label="Also delete everything below this name?",required=False)
class NameLinkForm(forms.ModelForm):
class Meta:
@@ -37,4 +38,9 @@ class NameLinkForm(forms.ModelForm):
fields = ['dst','type','data']
class NameLinkDeleteForm(forms.Form):
- confirm = BooleanField(label="Confirm") \ No newline at end of file
+ confirm = fields.BooleanField(label="Confirm")
+
+class PermissionForm(forms.Form):
+ dst = fields.IntegerField(widget=HiddenInput)
+ subject = fields.CharField(min_length=1024)
+ permissions = fields.MultipleChoiceField(widget=CheckboxSelectMultiple,choices=[('r','read'),('w','write'),('l','list'),('i','insert'),('d','delete')])
diff --git a/coip/apps/name/views.py b/coip/apps/name/views.py
index bde9954..47f06d0 100644
--- a/coip/apps/name/views.py
+++ b/coip/apps/name/views.py
@@ -3,15 +3,17 @@ Created on Jul 6, 2010
@author: leifj
'''
-from coip.apps.name.models import Name, lookup, traverse
+from coip.apps.name.models import Name, lookup, traverse, NameLink
from django.core.exceptions import ObjectDoesNotExist
from django.http import HttpResponseNotFound, HttpResponseForbidden,\
HttpResponseRedirect, Http404
from django.contrib.auth.decorators import login_required
from coip.multiresponse import respond_to, json_response, render403
from pprint import pprint
-from coip.apps.name.forms import NameEditForm, NewNameForm, NameDeleteForm
+from coip.apps.name.forms import NameEditForm, NewNameForm, NameDeleteForm,\
+ PermissionForm
from twisted.python.reflect import ObjectNotFound
+from django.shortcuts import get_object_or_404
@login_required
def delete(request,id):
@@ -99,6 +101,52 @@ def edit(request,id):
@login_required
+def editacl(request,id,type):
+ name = get_object_or_404(Name,pk=id)
+
+ if not name.has_permission(request.user,'w'):
+ return render403("You do not have permission to change permissions on %s" % (name))
+
+ if request.method == 'POST':
+ form = PermissionForm(request.POST)
+ if form.is_valid():
+ dstid = form.cleaned_data['dst']
+ dst = get_object_or_404(Name,pk=dstid)
+ p = form.cleaned_data['permissions']
+ if not p:
+ p = []
+ perms = p.join('')
+ link = NameLink.objects.get_or_create(src=name,dst=dst,type=NameLink.access_control)
+ link.data = perms
+ link.save()
+
+ form = PermissionForm()
+ return respond_to(request,{'text/html': 'apps/name/acls.html'},{'form': form, 'name': name, 'acl': name.lsacl(),'formtitle': 'Add Permission','submitname':'Add'})
+
+@login_required
+def links(request,id,type=NameLink.access_control):
+ name = get_object_or_404(Name,pk=id)
+ if not name.has_permission(request.user,'r'):
+ return render403("You do not have permission to list name links from %s" % (name))
+
+ links = name.links.filter(type=type).all
+ return respond_to(request,{'text/html': 'apps/name/links.html',
+ 'application/json': json_response(links)},
+ {'name': name, 'links': links})
+
+
+@login_required
+def removelink(request,id):
+ link = get_object_or_404(NameLink,pk=id)
+ name = link.src
+ type = link.type
+ if not name.has_permission(request.user,'w'):
+ return render403("You do not have permission to remove name links from %s" % (name))
+
+ link.delete()
+ return HttpResponseRedirect("/name/{{name.id}}/link/{{type}}")
+
+@login_required
def show_root(request):
return respond_to(request,
{'text/html': 'apps/name/name.html'},
diff --git a/coip/urls.py b/coip/urls.py
index ba71137..c0f2ecf 100644
--- a/coip/urls.py
+++ b/coip/urls.py
@@ -31,6 +31,10 @@ urlpatterns = patterns('',
(r'^name/(?P<id>[0-9]+)/edit$', 'coip.apps.name.views.edit'),
(r'^name/(?P<id>[0-9]+)/delete$', 'coip.apps.name.views.delete'),
(r'^name/(?P<id>[0-9]+)/add$', 'coip.apps.name.views.add'),
+ # Name Links
+ (r'^name/(?P<id>[0-9]+)/link/(?P<type>[0-9]+).json$', 'coip.apps.name.views.links'),
+ (r'^namelink/(?P<id>[0-9]+)/remove$', 'coip.apps.name.views.removelink'),
+ (r'^name/(?P<id>[0-9]+)/link/(?P<type>[0-9]+)$', 'coip.apps.name.views.editacl'),
# Links
(r'^name/(?P<id>[0-9]+)/addlink$', 'coip.apps.link.views.add'),
(r'^link/(?P<id>[0-9]+)/remove$', 'coip.apps.link.views.remove'),