diff options
author | Leif Johansson <leifj@sunet.se> | 2010-12-03 23:20:31 +0100 |
---|---|---|
committer | Leif Johansson <leifj@sunet.se> | 2010-12-03 23:20:31 +0100 |
commit | fc10f1fcfdff57a9250ef18daf761d8784be92da (patch) | |
tree | 8e355c1bf983c8257e283a02b69243a7fb0d8de0 /coip | |
parent | f554f07fe2f4a9d7591bc9ff89e49a160d4eca78 (diff) |
coip wsgi driver
Diffstat (limited to 'coip')
-rw-r--r-- | coip/apps/name/forms.py | 16 | ||||
-rw-r--r-- | coip/apps/name/views.py | 52 | ||||
-rw-r--r-- | coip/urls.py | 4 |
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'), |