diff --git a/python-django/oauth2demo/oauth/core/filemetadata.py b/python-django/oauth2demo/oauth/core/filemetadata.py index 9dca8ef..cd52c24 100644 --- a/python-django/oauth2demo/oauth/core/filemetadata.py +++ b/python-django/oauth2demo/oauth/core/filemetadata.py @@ -19,4 +19,4 @@ def getfiles_by_type(self, file_type): raise NonAuthorizedException() uri = '%s/DataSourceList?%s=true&shared=true' % (self._oauth_client.auth_parameters.api_uri, file_type) - return do_oauth_secure_get(uri, self._oauth_client.token) + return do_oauth_secure_get(uri, self._oauth_client.get_token()) diff --git a/python-django/oauth2demo/oauth/core/oauthclient.py b/python-django/oauth2demo/oauth/core/oauthclient.py index f9873ed..bc335e6 100644 --- a/python-django/oauth2demo/oauth/core/oauthclient.py +++ b/python-django/oauth2demo/oauth/core/oauthclient.py @@ -1,7 +1,5 @@ import urllib -import sched import time -from threading import Thread from token import Token from ..utils.http import do_basic_secure_post @@ -42,7 +40,6 @@ class DefaultSequencingOAuth2Client(object): def __init__(self, auth_parameters): self.auth_parameters = auth_parameters self.token = None - self._token_refresher = None def http_redirect_parameters(self): attributes = { @@ -74,12 +71,9 @@ def authorize(self, response_code, response_state): access_token = result[self.ATTR_ACCESS_TOKEN] refresh_token = result[self.ATTR_REFRESH_TOKEN] - timelife = int(result[self.ATTR_EXPIRES_IN]) + lifetime = time.time() + int(result[self.ATTR_EXPIRES_IN]) - self.token = Token(access_token, refresh_token, timelife) - - self._token_refresher = self.__TokenRefresher(self, timelife - 60) - self._token_refresher.start() + self.token = Token(access_token, refresh_token, lifetime) return self.token @@ -100,21 +94,11 @@ def _refresh_token(self): access_token = result[self.ATTR_ACCESS_TOKEN] refresh_token = self.token.refresh_token - timelife = result[self.ATTR_EXPIRES_IN] - - self.token = Token(access_token, refresh_token, timelife) - - class __TokenRefresher(Thread): - def __init__(self, outer, frequency): - Thread.__init__(self) - self.outer = outer - self.frequency = frequency - self.scheduler = sched.scheduler(time.time, time.sleep) + lifetime = time.time() + int(result[self.ATTR_EXPIRES_IN]) - def run(self): - self.scheduler.enter(self.frequency, 1, self.__run_refresh_token, ()) - self.scheduler.run() + self.token = Token(access_token, refresh_token, lifetime) - def __run_refresh_token(self): - self.outer._refresh_token() - self.scheduler.enter(self.frequency, 1, self.__run_refresh_token, ()) + def get_token(self): + if self.token.lifetime < time.time(): + self._refresh_token() + return self.token \ No newline at end of file diff --git a/python-django/oauth2demo/views.py b/python-django/oauth2demo/views.py index fb49fd4..ecd0276 100644 --- a/python-django/oauth2demo/views.py +++ b/python-django/oauth2demo/views.py @@ -34,9 +34,8 @@ def auth_callback(request): state = request.GET['state'] oauth_client.authorize(code, state) - - rurl = reverse('api') - return HttpResponseRedirect(rurl) + rurl = reverse('api') + return HttpResponseRedirect(rurl) # We make API requests, using access token.