Skip to content

Commit 22e1743

Browse files
author
RamanjaneyuluIdavalapati
committed
Auth in kwikapi.django
1 parent 9aff072 commit 22e1743

File tree

4 files changed

+58
-11
lines changed

4 files changed

+58
-11
lines changed

.travis.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ deploy:
1010
skip_cleanup: true
1111
api_key:
1212
secure: szU2C7KG3GzWO6x5RleHRf+/OpKvZWpN9Z+JPYb0xr+oSCQfms5/kMG8tTBUxjm5exv6xRsnknAa0vL+DqyeNEo8bPBYt3ZoDbB9pTqZhYuKSqDQnAP9N7xrmaXK7AVtuY07zDVToI6M0pWaqn+7A5YG0c9lqt3EuaCbSosqShzoDEZvO9bY1q4tsmjrP7hC28phsOuXCRzBBSabXEueyNeJInDTVFjfxp+yD1du3zIC1Qy4hi1rurTROSogKVWaChVcR9JJdAdawG/5J4QULtuma8fBvo2GhrJSH6ofTsLI1LXo64IixXqhb+FoAbABMjDkukjOXfOgiovGeay5n1PFuenFvQY3T3OscGJId16HeQPJ8BPd6U1k0b57Ij9Fl2nraUSIVpoC3tpBfyhMfXyF08ZEfXIJJwQl1BU96EZXt7PpgY7Mh9MwUnKh6SZ6E9ykwp1jVQ+YSS47u5nWpdAr6DYkjrCfwxw9hOWqH1tgyiSNw1u0xpA7qWUAl8JrEQrrq1EG9buGrH3aeF0p4eyTg38IdqQGhXNWLVJzo4U+QdVT930hDE6CCwhvc5otFiBKqED3ZAidAOJOq4ECZLPOGc8YIvd/4LXZTsaZEfQ1ovAqJnxTOvS5TnarAGI4CO8OvyqTN3nRdzrcMcYkdK5xyoG/jqHPD2jB3H/5Sls=
13-
name: kwikapi.django-0.2.3
14-
tag_name: 0.2.3
13+
name: kwikapi.django-0.2.4
14+
tag_name: 0.2.4
1515
on:
1616
repo: deep-compute/kwikapi.django
1717
- provider: pypi

kwikapi/django/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
from .kwikapi_django import RequestHandler
1+
from .kwikapi_django import RequestHandler, \
2+
BasicAuthenticator, \
3+
SessionAuthenticator

kwikapi/django/kwikapi_django.py

Lines changed: 52 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,60 @@
22

33
from django.http import HttpResponse
44
from django.http import StreamingHttpResponse
5+
from django.contrib.auth import login, logout, authenticate
6+
from django.contrib.auth.models import User
57

6-
from kwikapi import BaseRequest, BaseResponse, BaseRequestHandler
8+
from requests.structures import CaseInsensitiveDict
9+
10+
from kwikapi import BaseRequest, BaseResponse
11+
from kwikapi import BaseRequestHandler, BaseAuthAPI
12+
from kwikapi import BearerServerAuthenticator
13+
from kwikapi import BasicServerAuthenticator
14+
15+
class BasicAuthenticator(BasicServerAuthenticator):
16+
USER_ATTRS = ('id', 'email', 'first_name', 'last_name')
17+
18+
def authenticate(self, request):
19+
auth = super().authenticate(request)
20+
username = auth.username.decode('utf8')
21+
password = auth.password.decode('utf8')
22+
23+
user = authenticate(request=request.raw_request,
24+
username=username, password=password)
25+
26+
if not user:
27+
return auth
28+
29+
auth.is_authenticated = True
30+
auth.update({ a: getattr(user, a) for a in self.USER_ATTRS })
31+
return auth
32+
33+
class SessionAuthenticator(BearerServerAuthenticator):
34+
# FIXME: this needs to be completed
35+
36+
def authenticate(self, request):
37+
auth = super().authenticate(request)
38+
session_id = auth.token
739

840
class DjangoRequest(BaseRequest):
941
def __init__(self, request):
1042
super().__init__()
1143
self.raw_request = self._request = request
44+
self._headers = self._load_headers()
1245
self.response = DjangoResponse(self._request)
1346

47+
def _load_headers(self):
48+
hdrs = CaseInsensitiveDict()
49+
50+
for k, v in self._request.META.items():
51+
if not k.startswith('HTTP_'):
52+
continue
53+
54+
k = '-'.join(k.split('_')[1:])
55+
hdrs[k] = v
56+
57+
return hdrs
58+
1459
@property
1560
def url(self):
1661
return self._request.get_full_path()
@@ -21,11 +66,11 @@ def method(self):
2166

2267
@property
2368
def body(self):
24-
return self._request
69+
return self._request.body
2570

2671
@property
2772
def headers(self):
28-
return self._request.META
73+
return self._headers
2974

3075
class DjangoResponse(BaseResponse):
3176
def __init__(self, request):
@@ -61,10 +106,10 @@ class RequestHandler(BaseRequestHandler):
61106
PROTOCOL = BaseRequestHandler.DEFAULT_PROTOCOL
62107

63108
def handle_request(self, request):
64-
'''fn = lambda: super().handle_request(DjangoRequest(request))
109+
fn = lambda: super(RequestHandler, self).handle_request(DjangoRequest(request))
65110

66111
if self.api.threadpool:
67-
self.api.threadpool.apply_async(fn)
112+
f = self.api.threadpool.submit(fn)
113+
return f.result()
68114
else:
69-
fn()'''
70-
return super().handle_request(DjangoRequest(request))
115+
return fn()

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from setuptools import setup, find_packages
22

3-
version = '0.2.3'
3+
version = '0.2.4'
44
setup(
55
name="kwikapi-django",
66
version=version,

0 commit comments

Comments
 (0)