# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.conf.urls import url from tastypie.resources import Resource from tastypie.utils import trailing_slash 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%s$' % (self._meta.resource_name, trailing_slash), self.wrap_view('get_token'), name="api_get_token"), url(r'^%s/check_token%s$' % (self._meta.resource_name, trailing_slash), 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)