1414"""
1515
1616from abc import ABCMeta , abstractmethod , abstractproperty
17+ from oauth .models import oauthuser
1718from django .conf import settings
1819import requests
1920import json
@@ -192,7 +193,7 @@ def get_authorization_url(self):
192193 'client_id' : self .client_id ,
193194 'response_type' : 'code' ,
194195 'redirect_uri' : self .callback_url ,
195- 'scope' : 'user:email' ,
196+ 'scope' : 'user'
196197 }
197198 url = self .AUTH_URL + "?" + urllib .parse .urlencode (params , quote_via = urllib .parse .quote )
198199 return url
@@ -208,16 +209,45 @@ def get_access_token_by_code(self, code):
208209 }
209210 rsp = self .do_post (self .TOKEN_URL , params )
210211 print (rsp )
211- obj = json .loads (rsp )
212- self .access_token = str (obj ['access_token' ])
213- self .openid = str (obj ['id_token' ])
212+ try :
213+ from urllib import parse
214+ r = parse .parse_qs (rsp )
215+ self .access_token = (r ['access_token' ][0 ])
216+ return self .access_token
217+ except :
218+ return None
214219
215220 def get_oauth_userinfo (self ):
216- if not self .is_authorized :
217- return None
221+
218222 params = {
219223 'access_token' : self .access_token
220224 }
221225 rsp = self .do_get (self .API_URL , params )
222226 print (rsp )
223- return json .loads (rsp )
227+ try :
228+ datas = json .loads (rsp )
229+ user = oauthuser ()
230+ user .picture = datas ['avatar_url' ]
231+ user .nikename = datas ['name' ]
232+ user .openid = datas ['id' ]
233+ user .type = 'github'
234+ if datas ['email' ]:
235+ user .email = datas ['email' ]
236+
237+ return user
238+ except :
239+ logger .info ('github oauth error.rsp:' + rsp )
240+ return None
241+
242+
243+ def get_oauth_apps ():
244+ applications = BaseOauthManager .__subclasses__ ()
245+ return list (map (lambda x : x (), applications ))
246+
247+
248+ def get_manager_by_type (type ):
249+ applications = get_oauth_apps ()
250+ finds = list (filter (lambda x : x .ICON_NAME .lower () == type .lower (), applications ))
251+ if finds :
252+ return finds [0 ]
253+ return None
0 commit comments