35 |
35 |
|
36 |
36 |
from time import time, mktime
|
37 |
37 |
from urlparse import urlparse, urlsplit, urlunsplit
|
38 |
|
from urllib import quote, unquote
|
|
38 |
from urllib import quote, unquote, urlencode
|
39 |
39 |
|
40 |
40 |
from django.conf import settings
|
41 |
41 |
from django.utils import simplejson as json
|
... | ... | |
76 |
76 |
|
77 |
77 |
conn = get_http_connection(p.netloc, p.scheme)
|
78 |
78 |
try:
|
79 |
|
conn.request('GET', p.path, **kwargs)
|
|
79 |
conn.request('GET', p.path + '?' + p.query, **kwargs)
|
80 |
80 |
response = conn.getresponse()
|
81 |
81 |
headers = response.getheaders()
|
82 |
82 |
headers = dict((unquote(h), unquote(v)) for h,v in headers)
|
... | ... | |
93 |
93 |
|
94 |
94 |
|
95 |
95 |
def authenticate(
|
96 |
|
token, authentication_url='http://127.0.0.1:8000/im/authenticate'):
|
|
96 |
token, authentication_url='http://127.0.0.1:8000/im/authenticate',
|
|
97 |
usage=False):
|
|
98 |
|
|
99 |
if usage:
|
|
100 |
authentication_url += "?usage=1"
|
|
101 |
|
97 |
102 |
return call(token, authentication_url)
|
98 |
103 |
|
|
104 |
|
99 |
105 |
@retry(3)
|
100 |
106 |
def get_username(
|
101 |
107 |
token,
|
... | ... | |
128 |
134 |
return data.get('uuid')
|
129 |
135 |
|
130 |
136 |
|
131 |
|
def user_for_token(token, authentication_url, override_users):
|
|
137 |
def user_for_token(token, authentication_url, override_users, usage=False):
|
132 |
138 |
if not token:
|
133 |
139 |
return None
|
134 |
140 |
|
... | ... | |
139 |
145 |
return None
|
140 |
146 |
|
141 |
147 |
try:
|
142 |
|
return authenticate(token, authentication_url)
|
|
148 |
return authenticate(token, authentication_url, usage=usage)
|
143 |
149 |
except Exception, e:
|
144 |
150 |
# In case of Unauthorized response return None
|
145 |
151 |
if e.args and e.args[-1] == 401:
|
... | ... | |
150 |
156 |
request,
|
151 |
157 |
authentication_url='http://127.0.0.1:8000/im/authenticate',
|
152 |
158 |
override_users={},
|
153 |
|
fallback_token=None):
|
|
159 |
fallback_token=None,
|
|
160 |
usage=False):
|
154 |
161 |
request.user = None
|
155 |
162 |
request.user_uniq = None
|
156 |
163 |
|
157 |
164 |
# Try to find token in a parameter or in a request header.
|
158 |
165 |
user = user_for_token(
|
159 |
|
request.GET.get('X-Auth-Token'), authentication_url, override_users)
|
|
166 |
request.GET.get('X-Auth-Token'), authentication_url, override_users,
|
|
167 |
usage=usage)
|
160 |
168 |
if not user:
|
161 |
169 |
user = user_for_token(
|
162 |
170 |
request.META.get('HTTP_X_AUTH_TOKEN'),
|
163 |
171 |
authentication_url,
|
164 |
|
override_users)
|
|
172 |
override_users,
|
|
173 |
usage=usage)
|
165 |
174 |
if not user:
|
166 |
175 |
user = user_for_token(
|
167 |
|
fallback_token, authentication_url, override_users)
|
|
176 |
fallback_token, authentication_url, override_users,
|
|
177 |
usage=usage)
|
168 |
178 |
if not user:
|
169 |
179 |
logger.warning("Cannot retrieve user details from %s",
|
170 |
180 |
authentication_url)
|
171 |
|
return
|
|
181 |
return None
|
172 |
182 |
|
173 |
183 |
# use user uuid, instead of email, keep email/username reference to user_id
|
174 |
184 |
request.user_uniq = user['uuid']
|