Pārlūkot izejas kodu

[desktop] Switch api to using request_{GET,POST} to return 405 errors

Erick Tryzelaar 10 gadi atpakaļ
vecāks
revīzija
e0b7d53
2 mainītis faili ar 65 papildinājumiem un 75 dzēšanām
  1. 63 73
      desktop/core/src/desktop/api.py
  2. 2 2
      desktop/core/src/desktop/api_tests.py

+ 63 - 73
desktop/core/src/desktop/api.py

@@ -23,6 +23,7 @@ from collections import defaultdict
 
 from django.utils import html
 from django.utils.translation import ugettext as _
+from django.views.decorators.http import require_GET, require_POST
 
 import desktop.conf
 from desktop.lib.django_util import JsonResponse
@@ -180,14 +181,13 @@ def massaged_documents_for_json(documents, user):
 
   return docs
 
+
+@require_GET
 def get_document(request):
-  if request.method == 'POST':
-    return Http404()
-  elif request.method == 'GET':
-    doc_id = request.GET['id']
-    doc = Document.objects.get(id=doc_id)
-    response = massage_doc_for_json(doc, request.user)
-    return JsonResponse(response)
+  doc_id = request.GET['id']
+  doc = Document.objects.get(id=doc_id)
+  response = massage_doc_for_json(doc, request.user)
+  return JsonResponse(response)
 
 def massage_doc_for_json(document, user, url=''):
   read_perms = document.list_permissions(perm='read')
@@ -212,102 +212,92 @@ def massage_doc_for_json(document, user, url=''):
   return massaged_doc
 
 
+@require_POST
 def add_tag(request):
   response = {'status': -1, 'message': ''}
 
-  if request.method == 'POST':
-    try:
-      tag = DocumentTag.objects.create_tag(request.user, request.POST['name'])
-      response['name'] = request.POST['name']
-      response['id'] = tag.id
-      response['docs'] = []
-      response['owner'] = request.user.username
-      response['status'] = 0
-    except KeyError, e:
-      response['message'] = _('Form is missing %s field') % e.message
-    except Exception, e:
-      response['message'] = force_unicode(e)
-  else:
-    response['message'] = _('POST request only')
+  try:
+    tag = DocumentTag.objects.create_tag(request.user, request.POST['name'])
+    response['name'] = request.POST['name']
+    response['id'] = tag.id
+    response['docs'] = []
+    response['owner'] = request.user.username
+    response['status'] = 0
+  except KeyError, e:
+    response['message'] = _('Form is missing %s field') % e.message
+  except Exception, e:
+    response['message'] = force_unicode(e)
 
   return JsonResponse(response)
 
 
+@require_POST
 def tag(request):
   response = {'status': -1, 'message': ''}
 
-  if request.method == 'POST':
-    request_json = json.loads(request.POST['data'])
-    try:
-      tag = DocumentTag.objects.tag(request.user, request_json['doc_id'], request_json.get('tag'), request_json.get('tag_id'))
-      response['tag_id'] = tag.id
-      response['status'] = 0
-    except KeyError, e:
-      response['message'] = _('Form is missing %s field') % e.message
-    except Exception, e:
-      response['message'] = force_unicode(e)
-  else:
-    response['message'] = _('POST request only')
+  request_json = json.loads(request.POST['data'])
+  try:
+    tag = DocumentTag.objects.tag(request.user, request_json['doc_id'], request_json.get('tag'), request_json.get('tag_id'))
+    response['tag_id'] = tag.id
+    response['status'] = 0
+  except KeyError, e:
+    response['message'] = _('Form is missing %s field') % e.message
+  except Exception, e:
+    response['message'] = force_unicode(e)
 
   return JsonResponse(response)
 
 
+@require_POST
 def update_tags(request):
   response = {'status': -1, 'message': ''}
 
-  if request.method == 'POST':
-    request_json = json.loads(request.POST['data'])
-    try:
-      doc = DocumentTag.objects.update_tags(request.user, request_json['doc_id'], request_json['tag_ids'])
-      response['doc'] = massage_doc_for_json(doc, request.user)
-      response['status'] = 0
-    except KeyError, e:
-      response['message'] = _('Form is missing %s field') % e.message
-    except Exception, e:
-      response['message'] = force_unicode(e)
-  else:
-    response['message'] = _('POST request only')
+  request_json = json.loads(request.POST['data'])
+  try:
+    doc = DocumentTag.objects.update_tags(request.user, request_json['doc_id'], request_json['tag_ids'])
+    response['doc'] = massage_doc_for_json(doc, request.user)
+    response['status'] = 0
+  except KeyError, e:
+    response['message'] = _('Form is missing %s field') % e.message
+  except Exception, e:
+    response['message'] = force_unicode(e)
 
   return JsonResponse(response)
 
 
+@require_POST
 def remove_tag(request):
   response = {'status': -1, 'message': _('Error')}
 
-  if request.method == 'POST':
-    try:
-      DocumentTag.objects.delete_tag(request.POST['tag_id'], request.user)
-      response['message'] = _('Project removed!')
-      response['status'] = 0
-    except KeyError, e:
-      response['message'] = _('Form is missing %s field') % e.message
-    except Exception, e:
-      response['message'] = force_unicode(e)
-  else:
-    response['message'] = _('POST request only')
+  try:
+    DocumentTag.objects.delete_tag(request.POST['tag_id'], request.user)
+    response['message'] = _('Project removed!')
+    response['status'] = 0
+  except KeyError, e:
+    response['message'] = _('Form is missing %s field') % e.message
+  except Exception, e:
+    response['message'] = force_unicode(e)
 
   return JsonResponse(response)
 
 
+@require_POST
 def update_permissions(request):
   response = {'status': -1, 'message': _('Error')}
 
-  if request.method == 'POST':
-    data = json.loads(request.POST['data'])
-    doc_id = request.POST['doc_id']
-    try:
-      doc = Document.objects.get_doc_for_writing(doc_id, request.user)
-      doc.sync_permissions(data)
-
-      response['message'] = _('Permissions updated!')
-      response['status'] = 0
-      response['doc'] = massage_doc_for_json(doc, request.user)
-    except KeyError, e:
-      response['message'] = _('Form is missing %s field') % e.message
-    except Exception, e:
-      LOG.exception(e.message)
-      response['message'] = force_unicode(e)
-  else:
-    response['message'] = _('POST request only')
+  data = json.loads(request.POST['data'])
+  doc_id = request.POST['doc_id']
+  try:
+    doc = Document.objects.get_doc_for_writing(doc_id, request.user)
+    doc.sync_permissions(data)
+
+    response['message'] = _('Permissions updated!')
+    response['status'] = 0
+    response['doc'] = massage_doc_for_json(doc, request.user)
+  except KeyError, e:
+    response['message'] = _('Form is missing %s field') % e.message
+  except Exception, e:
+    LOG.exception(e.message)
+    response['message'] = force_unicode(e)
 
   return JsonResponse(response)

+ 2 - 2
desktop/core/src/desktop/api_tests.py

@@ -79,7 +79,7 @@ class TestDocModelTags():
 
   def test_add_tag(self):
     response = self.client.get("/desktop/api/tag/add_tag")
-    assert_equal(-1, json.loads(response.content)['status'])
+    assert_equal(response.status_code, 405)
 
     response = self.client.post("/desktop/api/tag/add_tag")
     content = json.loads(response.content)
@@ -116,7 +116,7 @@ class TestDocModelTags():
     tag_id = json.loads(response.content)['id']
 
     response = self.client.get("/desktop/api/tag/remove_tag")
-    assert_equal(-1, json.loads(response.content)['status'])
+    assert_equal(response.status_code, 405)
 
     # Only the owner can remove tags.
     response = self.client_not_me.post("/desktop/api/tag/remove_tag", {'tag_id': tag_id})