|
36 | 36 |
|
37 | 37 | class AuthProvider(AuthProviderBase): |
38 | 38 |
|
39 | | - AUTH_SERVER_URL = "https://login.live.com/oauth20_authorize.srf" |
40 | | - AUTH_TOKEN_URL = "https://login.live.com/oauth20_token.srf" |
| 39 | + MSA_AUTH_SERVER_URL = "https://login.live.com/oauth20_authorize.srf" |
| 40 | + MSA_AUTH_TOKEN_URL = "https://login.live.com/oauth20_token.srf" |
41 | 41 |
|
42 | 42 | def __init__(self, http_provider, client_id=None, scopes=None, access_token=None, session_type=None, loop=None, |
43 | 43 | auth_server_url=None, auth_token_url=None): |
@@ -73,8 +73,8 @@ def __init__(self, http_provider, client_id=None, scopes=None, access_token=None |
73 | 73 | self._scopes = scopes |
74 | 74 | self._session_type = Session if session_type is None else session_type |
75 | 75 | self._session = None |
76 | | - self._auth_server_url = self.AUTH_SERVER_URL if auth_server_url is None else auth_server_url |
77 | | - self._auth_token_url = self.AUTH_TOKEN_URL if auth_token_url is None else auth_token_url |
| 76 | + self._auth_server_url = self.MSA_AUTH_SERVER_URL if auth_server_url is None else auth_server_url |
| 77 | + self._auth_token_url = self.MSA_AUTH_TOKEN_URL if auth_token_url is None else auth_token_url |
78 | 78 |
|
79 | 79 | if sys.version_info >= (3, 4, 0): |
80 | 80 | import asyncio |
@@ -265,6 +265,41 @@ def refresh_token(self): |
265 | 265 | rcont["access_token"], |
266 | 266 | rcont["refresh_token"]) |
267 | 267 |
|
| 268 | + def redeem_refresh_token(self, resource): |
| 269 | + """Redeem a refresh token against a new resource. Used |
| 270 | + only by OneDrive for Business apps. |
| 271 | +
|
| 272 | + Args: |
| 273 | + resource (str): URL to resource to be accessed. |
| 274 | + Can be a 'serviceResourceId' value obtained from |
| 275 | + Discovery Service.""" |
| 276 | + if self._session is None: |
| 277 | + raise RuntimeError("""Session must be authenticated |
| 278 | + before refreshing token.""") |
| 279 | + |
| 280 | + if self._session.refresh_token is None: |
| 281 | + raise RuntimeError("""Refresh token not present.""") |
| 282 | + |
| 283 | + params = { |
| 284 | + "client_id": self._session.client_id, |
| 285 | + "redirect_uri": self._session.redirect_uri, |
| 286 | + "client_secret": self._session.client_secret, |
| 287 | + "refresh_token": self._session.refresh_token, |
| 288 | + "grant_type": "refresh_token", |
| 289 | + "resource": resource |
| 290 | + } |
| 291 | + |
| 292 | + headers = {"Content-Type": "application/x-www-form-urlencoded"} |
| 293 | + response = self._http_provider.send(method="POST", |
| 294 | + headers=headers, |
| 295 | + url=self.auth_token_url, |
| 296 | + data=params) |
| 297 | + rcont = json.loads(response.content) |
| 298 | + self._session.refresh_session(rcont["expires_in"], |
| 299 | + "", |
| 300 | + rcont["access_token"], |
| 301 | + rcont["refresh_token"]) |
| 302 | + |
268 | 303 | def save_session(self, **save_session_kwargs): |
269 | 304 | """Save the current session. Must have already |
270 | 305 | obtained an access_token. |
|
0 commit comments