diff options
Diffstat (limited to 'coip/apps/consumer/views.py')
-rw-r--r-- | coip/apps/consumer/views.py | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/coip/apps/consumer/views.py b/coip/apps/consumer/views.py new file mode 100644 index 0000000..2d32381 --- /dev/null +++ b/coip/apps/consumer/views.py @@ -0,0 +1,64 @@ +from django.http import HttpResponseBadRequest +from django.shortcuts import get_object_or_404, redirect +from coip.apps.consumer import consumer_providers +from coip.apps.consumer.forms import ConsumerForm +from coip.apps.consumer.models import Consumer +from coip.apps.name.models import Name +from coip.multiresponse import render403, respond_to, json_response + +__author__ = 'leifj' + + +def _consumer2json(c,e): + return { + 'name': c.name, + 'description': c.description, + 'authorization_uri': c.authorization_uri, + 'service_uri': c.service_uri, + 'logo': c.logo, + 'enabled': c in e, + } + +def _consumers(name): + enabled_consumers = Consumer.objects.filter(name=name) + return [_consumer2json(c,enabled_consumers) for c in consumer_providers()] + +def list(request,nid): + name = get_object_or_404(Name,pk=nid) + + if request.method == 'GET': + if not name.has_permission(request.user,'r'): + return render403(request,"You do not have permission to inspect consumers for %s" % name) + + return respond_to(request, + {'application/json': json_response(_consumers(name)), + 'text/html': "apps/consumers/list.html"},{'consumers': _consumers(name)}) + + else: + return HttpResponseBadRequest() + +def add(request,nid): + name = get_object_or_404(Name,pk=nid) + + if not name.has_permission(request.user,'w'): + return render403(request,"You do not have permission to create consumers for %s" % name) + + if request.method == 'POST': + consumer = Consumer(user=request.user,name=name) + form = ConsumerForm(request.POST,instance=consumer) + if form.is_valid(): + consumer = form.save() + return redirect("/name/%d/consumers" % nid) + + return respond_to(request,{'text/html': 'apps/consumers/edit.html'},{'form': form}) + + +def remove(request,nid,cid): + name = get_object_or_404(Name,pk=nid) + + if not name.has_permission(request.user,'w'): + return render403(request,"You do not have permission to remove consumers from %s" % name) + + consumer = get_object_or_404(Consumer,pk=cid) + consumer.delete() + return redirect("/name/%d/consumers" % nid)
\ No newline at end of file |