diff --git a/circle/occi/views.py b/circle/occi/views.py index a4e6a20..b28612f 100644 --- a/circle/occi/views.py +++ b/circle/occi/views.py @@ -25,6 +25,12 @@ from .occi import ( ) +class CSRFExemptMixin(object): + @method_decorator(csrf_exempt) + def dispatch(self, *args, **kwargs): + return super(CSRFExemptMixin, self).dispatch(*args, **kwargs) + + def get_post_data_from_request(request): """ Returns the post data in an array """ @@ -45,7 +51,7 @@ def get_post_data_from_request(request): return post_data -class QueryInterface(View): +class QueryInterface(CSRFExemptMixin, View): def get(self, request, *args, **kwargs): response = "Category: %s\n" % COMPUTE_KIND.render_values() @@ -70,12 +76,8 @@ class QueryInterface(View): response = HttpResponse(status=501) return response - @method_decorator(csrf_exempt) # decorator on post method doesn't work - def dispatch(self, *args, **kwargs): - return super(QueryInterface, self).dispatch(*args, **kwargs) - -class ComputeInterface(View): +class ComputeInterface(CSRFExemptMixin, View): def get(self, request, *args, **kwargs): response = "\n".join([Compute(instance=i).render_location() @@ -96,12 +98,8 @@ class ComputeInterface(View): ) return response - @method_decorator(csrf_exempt) # decorator on post method doesn't work - def dispatch(self, *args, **kwargs): - return super(ComputeInterface, self).dispatch(*args, **kwargs) - -class VmInterface(DetailView): +class VmInterface(CSRFExemptMixin, DetailView): model = Instance def get_object(self): @@ -130,12 +128,8 @@ class VmInterface(DetailView): return HttpResponse() - @method_decorator(csrf_exempt) # decorator on post method doesn't work - def dispatch(self, *args, **kwargs): - return super(VmInterface, self).dispatch(*args, **kwargs) - -class OsTplInterface(View): +class OsTplInterface(CSRFExemptMixin, View): def get(self, request, *args, **kwargs): response = "\n".join([OsTemplate(template=t).render_location() @@ -148,12 +142,8 @@ class OsTplInterface(View): def post(self, request, *args, **kwargs): pass - @method_decorator(csrf_exempt) # decorator on post method doesn't work - def dispatch(self, *args, **kwargs): - return super(OsTplInterface, self).dispatch(*args, **kwargs) - -class StorageInterface(View): +class StorageInterface(CSRFExemptMixin, View): def get(self, request, *args, **kwargs): response = "\n".join([Storage(disk=d).render_location() @@ -174,12 +164,8 @@ class StorageInterface(View): ) return response - @method_decorator(csrf_exempt) - def dispatch(self, *args, **kwargs): - return super(StorageInterface, self).dispatch(*args, **kwargs) - -class DiskInterface(DetailView): +class DiskInterface(CSRFExemptMixin, DetailView): model = Disk def get(self, request, *args, **kwargs): @@ -203,12 +189,8 @@ class DiskInterface(DetailView): Storage(disk=self.get_object()).delete() return HttpResponse("") - @method_decorator(csrf_exempt) - def dispatch(self, *args, **kwargs): - return super(DiskInterface, self).dispatch(*args, **kwargs) - -class StorageLinkInterface(View): +class StorageLinkInterface(CSRFExemptMixin, View): def get_vm_and_disk(self): vm = get_object_or_404(Instance.objects.filter(destroyed_at=None), @@ -254,12 +236,8 @@ class StorageLinkInterface(View): sl.delete() return HttpResponse("") - @method_decorator(csrf_exempt) - def dispatch(self, *args, **kwargs): - return super(StorageLinkInterface, self).dispatch(*args, **kwargs) - -class NetworkInterface(View): +class NetworkInterface(CSRFExemptMixin, View): def get(self, request, *args, **kwargs): response = "\n".join([Network(vlan=v).render_location() @@ -272,12 +250,8 @@ class NetworkInterface(View): def post(self, request, *args, **kwargs): pass # we don't really want to create networks via OCCI yet - @method_decorator(csrf_exempt) # decorator on post method doesn't work - def dispatch(self, *args, **kwargs): - return super(NetworkInterface, self).dispatch(*args, **kwargs) - -class VlanInterface(DetailView): +class VlanInterface(CSRFExemptMixin, DetailView): model = Vlan slug_field = 'vid' slug_url_kwarg = 'vid' @@ -298,7 +272,3 @@ class VlanInterface(DetailView): Compute(instance=vm).delete() return HttpResponse() - - @method_decorator(csrf_exempt) # decorator on post method doesn't work - def dispatch(self, *args, **kwargs): - return super(VlanInterface, self).dispatch(*args, **kwargs)