Skip to content

Commit 4a37dec

Browse files
feat: update to allow for 3PI credentials (#240)
* Update to allow for 3PI credentials
1 parent 8d53bc3 commit 4a37dec

File tree

4 files changed

+47
-13
lines changed

4 files changed

+47
-13
lines changed

google_auth_oauthlib/helpers.py

+19-9
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import datetime
2525
import json
2626

27+
from google.auth import external_account_authorized_user
2728
import google.oauth2.credentials
2829
import requests_oauthlib
2930

@@ -125,14 +126,23 @@ def credentials_from_session(session, client_config=None):
125126
"There is no access token for this session, did you call " "fetch_token?"
126127
)
127128

128-
credentials = google.oauth2.credentials.Credentials(
129-
session.token["access_token"],
130-
refresh_token=session.token.get("refresh_token"),
131-
id_token=session.token.get("id_token"),
132-
token_uri=client_config.get("token_uri"),
133-
client_id=client_config.get("client_id"),
134-
client_secret=client_config.get("client_secret"),
135-
scopes=session.scope,
136-
)
129+
if "3pi" in client_config:
130+
credentials = external_account_authorized_user.Credentials(
131+
token=session.token["access_token"],
132+
refresh_token=session.token.get("refresh_token"),
133+
token_url=client_config.get("token_uri"),
134+
client_id=client_config.get("client_id"),
135+
client_secret=client_config.get("client_secret"),
136+
)
137+
else:
138+
credentials = google.oauth2.credentials.Credentials(
139+
session.token["access_token"],
140+
refresh_token=session.token.get("refresh_token"),
141+
id_token=session.token.get("id_token"),
142+
token_uri=client_config.get("token_uri"),
143+
client_id=client_config.get("client_id"),
144+
client_secret=client_config.get("client_secret"),
145+
scopes=session.scope,
146+
)
137147
credentials.expiry = datetime.datetime.utcfromtimestamp(session.token["expires_at"])
138148
return credentials

testing/constraints-3.6.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@
55
#
66
# e.g., if setup.py has "foo >= 1.14.0, < 2.0.0dev",
77
# Then this file should have foo==1.14.0
8-
google-auth==1.0.0
8+
google-auth==2.13.0
99
requests-oauthlib==0.7.0
10-
click==6.0.0
10+
click==6.0.0

testing/constraints-3.7.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,6 @@
55
#
66
# e.g., if setup.py has "foo >= 1.14.0, < 2.0.0dev",
77
# Then this file should have foo==1.14.0
8-
google-auth==1.0.0
8+
google-auth==2.13.0
99
requests-oauthlib==0.7.0
10-
click==6.0.0
10+
click==6.0.0

tests/unit/test_helpers.py

+24
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import mock
2020
import pytest
2121

22+
from google.auth import external_account_authorized_user
23+
import google.oauth2.credentials
2224
from google_auth_oauthlib import helpers
2325

2426
DATA_DIR = os.path.join(os.path.dirname(__file__), "data")
@@ -85,6 +87,7 @@ def test_credentials_from_session(session):
8587

8688
credentials = helpers.credentials_from_session(session, CLIENT_SECRETS_INFO["web"])
8789

90+
assert isinstance(credentials, google.oauth2.credentials.Credentials)
8891
assert credentials.token == mock.sentinel.access_token
8992
assert credentials.expiry == datetime.datetime(1990, 5, 29, 8, 20, 0)
9093
assert credentials._refresh_token == mock.sentinel.refresh_token
@@ -94,6 +97,27 @@ def test_credentials_from_session(session):
9497
assert credentials._token_uri == CLIENT_SECRETS_INFO["web"]["token_uri"]
9598

9699

100+
def test_credentials_from_session_3pi(session):
101+
session.token = {
102+
"access_token": mock.sentinel.access_token,
103+
"refresh_token": mock.sentinel.refresh_token,
104+
"id_token": mock.sentinel.id_token,
105+
"expires_at": 643969200.0,
106+
}
107+
108+
client_secrets_info = CLIENT_SECRETS_INFO["web"].copy()
109+
client_secrets_info["3pi"] = True
110+
credentials = helpers.credentials_from_session(session, client_secrets_info)
111+
112+
assert isinstance(credentials, external_account_authorized_user.Credentials)
113+
assert credentials.token == mock.sentinel.access_token
114+
assert credentials.expiry == datetime.datetime(1990, 5, 29, 8, 20, 0)
115+
assert credentials._refresh_token == mock.sentinel.refresh_token
116+
assert credentials._client_id == CLIENT_SECRETS_INFO["web"]["client_id"]
117+
assert credentials._client_secret == CLIENT_SECRETS_INFO["web"]["client_secret"]
118+
assert credentials._token_url == CLIENT_SECRETS_INFO["web"]["token_uri"]
119+
120+
97121
def test_bad_credentials(session):
98122
with pytest.raises(ValueError):
99123
helpers.credentials_from_session(session)

0 commit comments

Comments
 (0)