66# file 'LICENSE.md', which is part of this source code package.
77#
88
9- from datetime import timedelta
10-
11- import requests
9+ try :
10+ from . import settings
11+ except ImportError :
12+ import settings
1213from django .contrib .auth .decorators import login_required
1314from django .http import HttpResponse
1415from django .shortcuts import redirect
1516from django .utils import timezone
1617from django .utils .crypto import get_random_string
17-
18- import _settings
1918from .models import Credentials
19+ from datetime import timedelta
20+ import requests
2021
2122
2223def index (request = None ):
@@ -25,9 +26,9 @@ def index(request=None):
2526
2627@login_required
2728def authorize (request = None ):
28- uid = _get_uid (request )
29- client_id = _settings .REPLYIFY_CLIENT_ID
30- redirect_uri = _settings .REPLYIFY_REDIRECT_URI
29+ uid = getattr (request . user , settings . REPLYIFY_USER_ID_FIELD )
30+ client_id = settings .REPLYIFY_CLIENT_ID
31+ redirect_uri = settings .REPLYIFY_REDIRECT_URI
3132 response_type = 'code'
3233
3334 state = get_random_string (20 , "abcdefghijklmnopqrstuvwxyz0123456789" )
@@ -39,7 +40,7 @@ def authorize(request=None):
3940 "response_type={0}" .format (response_type ),
4041 "state={0}" .format (state )
4142 ]
42- url = "{0}?{1}" .format (_settings .REPLYIFY_AUTH_URL , "&" .join (args ))
43+ url = "{0}?{1}" .format (settings .REPLYIFY_AUTH_URL , "&" .join (args ))
4344
4445 return redirect (url )
4546
@@ -61,39 +62,29 @@ def refresh(request=None):
6162 if 'error' in request .GET :
6263 raise Exception (request .GET ['error' ])
6364
64- uid = _get_uid (request )
65-
6665 try :
67- creds = Credentials .objects .get (uid = uid )
66+ creds = Credentials .objects .get (user = request . user )
6867
6968 data = {
7069 'grant_type' : 'refresh_token' ,
71- 'client_id' : _settings .REPLYIFY_CLIENT_ID ,
72- 'client_secret' : _settings .REPLYIFY_CLIENT_SECRET ,
70+ 'client_id' : settings .REPLYIFY_CLIENT_ID ,
71+ 'client_secret' : settings .REPLYIFY_CLIENT_SECRET ,
7372 'refresh_token' : creds .refresh_token
7473 }
7574
76- url = _settings .REPLYIFY_TOKEN_URL
75+ url = settings .REPLYIFY_TOKEN_URL
7776 r = requests .post (url = url , data = data )
7877 data = r .json ()
7978
80- creds = _store_credentials (uid = uid , data = data )
79+ creds = _store_credentials (user = request . user , data = data )
8180 return HttpResponse (creds )
8281
8382 except Credentials .DoesNotExist :
8483 authorize (request )
8584
8685
87- def _get_uid (request = None ):
88- if hasattr (request .user , 'guid' ):
89- uid = request .user .guid
90- else :
91- uid = request .user .id
92- return uid
93-
94-
9586def _check_state (request = None ):
96- uid = _get_uid (request )
87+ uid = getattr (request . user , settings . REPLYIFY_USER_ID_FIELD )
9788 msg = "Something fishy is happening. Abort ..."
9889
9990 if 'state' not in request .session :
@@ -112,32 +103,21 @@ def _exchange_auth_code(request=None):
112103 data = {
113104 'grant_type' : 'authorization_code' ,
114105 'code' : code ,
115- 'client_id' : _settings .REPLYIFY_CLIENT_ID ,
116- 'redirect_uri' : _settings .REPLYIFY_REDIRECT_URI
106+ 'client_id' : settings .REPLYIFY_CLIENT_ID ,
107+ 'redirect_uri' : settings .REPLYIFY_REDIRECT_URI
117108 }
118- url = _settings .REPLYIFY_TOKEN_URL
109+ url = settings .REPLYIFY_TOKEN_URL
119110 r = requests .post (url = url , data = data )
120111 return r .json ()
121112
122113
123- def _store_credentials (uid = None , data = None ):
124- try :
125- creds = Credentials .objects .get (uid = uid )
126- creds .access_token = data ['access_token' ]
127- creds .refresh_token = data ['refresh_token' ]
128- creds .expires = timezone .now () + timedelta (seconds = data ['expires_in' ])
129- creds .scope = data ['scope' ]
130- creds .token_type = data ['token_type' ]
131- creds .save ()
132-
133- except Credentials .DoesNotExist :
134- creds = Credentials .objects .create (
135- uid = uid ,
136- access_token = data ['access_token' ],
137- refresh_token = data ['refresh_token' ],
138- expires = timezone .now () + timedelta (seconds = data ['expires_in' ]),
139- scope = data ['scope' ],
140- token_type = data ['token_type' ]
141- )
142-
114+ def _store_credentials (user , data = None ):
115+ assert user is not None
116+ creds , _ = Credentials .objects .get_or_create (user = user )
117+ creds .access_token = data ['access_token' ]
118+ creds .refresh_token = data ['refresh_token' ]
119+ creds .expires = timezone .now () + timedelta (seconds = data ['expires_in' ])
120+ creds .scope = data ['scope' ]
121+ creds .token_type = data ['token_type' ]
122+ creds .save ()
143123 return creds
0 commit comments