Skip to content

Commit d89b662

Browse files
authored
TSDK-366 Hosted Authentication params added (#229)
Hosted Authentication URL parameters were missing redirect_on_error and provider value. I have added them and created two tests for them as well
1 parent b224880 commit d89b662

File tree

2 files changed

+68
-0
lines changed

2 files changed

+68
-0
lines changed

nylas/client/client.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,8 @@ def authentication_url(
152152
login_hint="",
153153
state="",
154154
scopes=("email", "calendar", "contacts"),
155+
provider="",
156+
redirect_on_error=None,
155157
):
156158
args = {
157159
"redirect_uri": redirect_uri,
@@ -165,6 +167,16 @@ def authentication_url(
165167
if isinstance(scopes, str):
166168
scopes = [scopes]
167169
args["scopes"] = ",".join(scopes)
170+
if provider and provider in [
171+
"icloud",
172+
"gmail",
173+
"office365",
174+
"exchange",
175+
"imap",
176+
]:
177+
args["provider"] = provider
178+
if redirect_on_error is not None and isinstance(redirect_on_error, bool):
179+
args["redirect_on_error"] = "true" if redirect_on_error is True else "false"
168180

169181
url = URLObject(self.authorize_url).add_query_params(args.items())
170182
return str(url)

tests/test_client.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,62 @@ def test_client_authentication_url_scopes_none(api_client, api_url):
143143
assert urls_equal(expected, actual)
144144

145145

146+
def test_client_authentication_url_optional_params(api_client, api_url):
147+
expected = (
148+
URLObject(api_url)
149+
.with_path("/oauth/authorize")
150+
.set_query_params(
151+
[
152+
("login_hint", ""),
153+
("state", ""),
154+
("redirect_uri", "/redirect"),
155+
("response_type", "code"),
156+
("client_id", "None"),
157+
("scopes", "email"),
158+
("provider", "gmail"),
159+
("redirect_on_error", "false"),
160+
]
161+
)
162+
)
163+
actual = URLObject(
164+
api_client.authentication_url(
165+
"/redirect", scopes="email", provider="gmail", redirect_on_error=False
166+
)
167+
)
168+
assert urls_equal(expected, actual)
169+
170+
171+
def test_client_authentication_url_invalid_param_values(api_client, api_url):
172+
expected = (
173+
URLObject(api_url)
174+
.with_path("/oauth/authorize")
175+
.set_query_params(
176+
[
177+
("login_hint", ""),
178+
("state", ""),
179+
("redirect_uri", "/redirect"),
180+
("response_type", "code"),
181+
("client_id", "None"),
182+
("scopes", "email"),
183+
]
184+
)
185+
)
186+
actual = URLObject(
187+
api_client.authentication_url("/redirect", scopes="email", provider="Google")
188+
)
189+
assert urls_equal(expected, actual)
190+
191+
expected2 = expected.set_query_param("provider", "gmail")
192+
193+
actual2 = URLObject(
194+
api_client.authentication_url(
195+
"/redirect", scopes="email", provider="gmail", redirect_on_error="true"
196+
)
197+
)
198+
199+
assert urls_equal(expected2, actual2)
200+
201+
146202
def test_client_token_for_code(mocked_responses, api_client, api_url):
147203
endpoint = re.compile(api_url + "/oauth/token")
148204
response_body = json.dumps({"access_token": "hooray"})

0 commit comments

Comments
 (0)