jwt_resource.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. # -*- coding: utf-8 -*-
  2. from __future__ import unicode_literals
  3. from django.conf.urls import url
  4. from tastypie.resources import Resource
  5. from tastypie.utils import trailing_slash
  6. from api.utils import jwt_token
  7. import simplejson as json
  8. '''
  9. '''
  10. class JWTResource(Resource):
  11. class Meta:
  12. allowed_methods = ['post']
  13. resource_name = 'auth'
  14. '''
  15. '''
  16. def prepend_urls(self):
  17. return [
  18. url(r'^%s/get_token%s$' % (self._meta.resource_name, trailing_slash), self.wrap_view('get_token'), name="api_get_token"),
  19. url(r'^%s/check_token%s$' % (self._meta.resource_name, trailing_slash), self.wrap_view('check_token'), name="api_check_token"),
  20. ]
  21. '''
  22. '''
  23. def get_token(self, request, **kwargs):
  24. self.method_check(request, allowed=self._meta.allowed_methods)
  25. # Check content type
  26. if request.content_type != 'application/json':
  27. return self.create_response(request, {
  28. 'error': 'request is not json'
  29. })
  30. # Check body
  31. if not request.body:
  32. return self.create_response(request, {
  33. 'error': 'request body is empty'
  34. })
  35. body = json.loads(request.body)
  36. # Check required parameters
  37. if 'username' not in body or 'password' not in body:
  38. return self.create_response(request, {
  39. 'error': 'username or password not provided in request'
  40. })
  41. token = jwt_token.create_token(body['username'], body['password'])
  42. # Check user
  43. if not token:
  44. return self.create_response(request, {
  45. 'error': 'cannot authenticate user'
  46. })
  47. bundle = self.build_bundle(obj={
  48. 'token': token
  49. }, request=request)
  50. return self.create_response(request, bundle.obj)
  51. '''
  52. '''
  53. def check_token(self, request, **kwargs):
  54. self.method_check(request, allowed=self._meta.allowed_methods)
  55. # Check content type
  56. if request.content_type != 'application/json':
  57. return self.create_response(request, {
  58. 'error': 'request is not json'
  59. })
  60. # Check body
  61. if not request.body:
  62. return self.create_response(request, {
  63. 'error': 'request body is empty'
  64. })
  65. body = json.loads(request.body)
  66. # Check required parameters
  67. if 'token' not in body:
  68. return self.create_response(request, {
  69. 'error': 'token not provided in request'
  70. })
  71. nice_token = jwt_token.check_token(body['token'])
  72. bundle = self.build_bundle(obj={
  73. 'status': nice_token
  74. }, request=request)
  75. return self.create_response(request, bundle.obj)