summaryrefslogtreecommitdiff
path: root/coip/apps/consumer/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'coip/apps/consumer/views.py')
-rw-r--r--coip/apps/consumer/views.py64
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