jwt_resource.py 2.7 KB

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