|
@@ -0,0 +1,93 @@
|
|
|
+# -*- coding: utf-8 -*-
|
|
|
+from __future__ import unicode_literals
|
|
|
+from django.conf.urls import url
|
|
|
+from tastypie.resources import Resource
|
|
|
+from api.utils import jwt_token
|
|
|
+import simplejson as json
|
|
|
+
|
|
|
+'''
|
|
|
+'''
|
|
|
+class JWTResource(Resource):
|
|
|
+ class Meta:
|
|
|
+ allowed_methods = ['post']
|
|
|
+ resource_name = 'auth'
|
|
|
+
|
|
|
+ '''
|
|
|
+ '''
|
|
|
+ def prepend_urls(self):
|
|
|
+ return [
|
|
|
+ url(r'^%s/get_token/$' % self._meta.resource_name, self.wrap_view('get_token'), name="api_get_token"),
|
|
|
+ url(r'^%s/check_token/$' % self._meta.resource_name, self.wrap_view('check_token'), name="api_check_token"),
|
|
|
+ ]
|
|
|
+
|
|
|
+ '''
|
|
|
+ '''
|
|
|
+ def get_token(self, request, **kwargs):
|
|
|
+ self.method_check(request, allowed=self._meta.allowed_methods)
|
|
|
+
|
|
|
+ # Check content type
|
|
|
+ if request.content_type != 'application/json':
|
|
|
+ return self.create_response(request, {
|
|
|
+ 'error': 'request is not json'
|
|
|
+ })
|
|
|
+
|
|
|
+ # Check body
|
|
|
+ if not request.body:
|
|
|
+ return self.create_response(request, {
|
|
|
+ 'error': 'request body is empty'
|
|
|
+ })
|
|
|
+
|
|
|
+ body = json.loads(request.body)
|
|
|
+
|
|
|
+ # Check required parameters
|
|
|
+ if 'username' not in body or 'password' not in body:
|
|
|
+ return self.create_response(request, {
|
|
|
+ 'error': 'username or password not provided in request'
|
|
|
+ })
|
|
|
+
|
|
|
+ token = jwt_token.create_token(body['username'], body['password'])
|
|
|
+
|
|
|
+ # Check user
|
|
|
+ if not token:
|
|
|
+ return self.create_response(request, {
|
|
|
+ 'error': 'cannot authenticate user'
|
|
|
+ })
|
|
|
+
|
|
|
+ bundle = self.build_bundle(obj={
|
|
|
+ 'token': token
|
|
|
+ }, request=request)
|
|
|
+
|
|
|
+ return self.create_response(request, bundle.obj)
|
|
|
+
|
|
|
+ '''
|
|
|
+ '''
|
|
|
+ def check_token(self, request, **kwargs):
|
|
|
+ self.method_check(request, allowed=self._meta.allowed_methods)
|
|
|
+
|
|
|
+ # Check content type
|
|
|
+ if request.content_type != 'application/json':
|
|
|
+ return self.create_response(request, {
|
|
|
+ 'error': 'request is not json'
|
|
|
+ })
|
|
|
+
|
|
|
+ # Check body
|
|
|
+ if not request.body:
|
|
|
+ return self.create_response(request, {
|
|
|
+ 'error': 'request body is empty'
|
|
|
+ })
|
|
|
+
|
|
|
+ body = json.loads(request.body)
|
|
|
+
|
|
|
+ # Check required parameters
|
|
|
+ if 'token' not in body:
|
|
|
+ return self.create_response(request, {
|
|
|
+ 'error': 'token not provided in request'
|
|
|
+ })
|
|
|
+
|
|
|
+ nice_token = jwt_token.check_token(body['token'])
|
|
|
+
|
|
|
+ bundle = self.build_bundle(obj={
|
|
|
+ 'status': nice_token
|
|
|
+ }, request=request)
|
|
|
+
|
|
|
+ return self.create_response(request, bundle.obj)
|