Skip to content
This repository was archived by the owner on Oct 2, 2024. It is now read-only.

Commit d506cea

Browse files
committed
Added AuthProvider.redeem_refresh_token method
1 parent daa65b5 commit d506cea

File tree

3 files changed

+40
-7
lines changed

3 files changed

+40
-7
lines changed

src/onedrivesdk/auth_provider.py

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@
3636

3737
class AuthProvider(AuthProviderBase):
3838

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"
4141

4242
def __init__(self, http_provider, client_id=None, scopes=None, access_token=None, session_type=None, loop=None,
4343
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
7373
self._scopes = scopes
7474
self._session_type = Session if session_type is None else session_type
7575
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
7878

7979
if sys.version_info >= (3, 4, 0):
8080
import asyncio
@@ -265,6 +265,41 @@ def refresh_token(self):
265265
rcont["access_token"],
266266
rcont["refresh_token"])
267267

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+
268303
def save_session(self, **save_session_kwargs):
269304
"""Save the current session. Must have already
270305
obtained an access_token.

src/onedrivesdk/helpers/resource_discovery.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,8 @@ def get_service_info(self, access_token):
2121
do not provide access to OneDrive for Business will be excluded (i.e. must have
2222
capability = 'MyFiles' and service_api_version = 'v2.0'
2323
"""
24-
headers = {'Authorization': 'bearer ' + access_token}
24+
headers = {'Authorization': 'Bearer ' + access_token}
2525
response = json.loads(requests.get(self._discovery_service_url, headers=headers).text)
26-
print(response)
2726
service_info_list = [ServiceInfo(x) for x in response['value']]
2827
trimmed_service_info_list = [si for si in service_info_list
2928
if si.capability == 'MyFiles' and si.service_api_version == 'v2.0']

src/onedrivesdk/http_provider.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ def send(self, method, headers, url, data=None, content=None, path=None):
6666
data=data,
6767
json=content)
6868
prepped = request.prepare()
69-
print(prepped.body, prepped.url, prepped.method)
7069
response = session.send(prepped)
7170

7271
custom_response = HttpResponse(response.status_code, response.headers, response.text)

0 commit comments

Comments
 (0)