Skip to content

Commit 2a863dd

Browse files
committed
Add support for scope parameter on start_connect_account
1 parent b5154aa commit 2a863dd

3 files changed

Lines changed: 45 additions & 0 deletions

File tree

src/auth0_server_python/auth_server/server_client.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1318,12 +1318,14 @@ async def start_connect_account(
13181318

13191319
connect_request = ConnectAccountRequest(
13201320
connection=options.connection,
1321+
scope=" ".join(options.scope) if options.scope else None,
13211322
redirect_uri = redirect_uri,
13221323
code_challenge=code_challenge,
13231324
code_challenge_method="S256",
13241325
state=state,
13251326
authorization_params=options.authorization_params
13261327
)
1328+
13271329
access_token = await self.get_access_token(
13281330
audience=self._my_account_client.audience_identifier,
13291331
scope="create:me:connected_accounts",

src/auth0_server_python/auth_types/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,11 +219,13 @@ class ConnectParams(BaseModel):
219219
class ConnectAccountOptions(BaseModel):
220220
connection: str
221221
redirect_uri: Optional[str] = None
222+
scope: Optional[list[str]] = None
222223
app_state: Optional[Any] = None
223224
authorization_params: Optional[dict[str, Any]] = None
224225

225226
class ConnectAccountRequest(BaseModel):
226227
connection: str
228+
scope: Optional[str] = None
227229
redirect_uri: Optional[str] = None
228230
state: Optional[str] = None
229231
code_challenge: Optional[str] = None

src/auth0_server_python/tests/test_server_client.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1324,6 +1324,47 @@ async def test_start_connect_account_calls_connect_and_builds_url(mocker):
13241324
options=ANY
13251325
)
13261326

1327+
@pytest.mark.asyncio
1328+
async def test_start_connect_account_with_scope(mocker):
1329+
# Setup
1330+
mock_transaction_store = AsyncMock()
1331+
mock_state_store = AsyncMock()
1332+
1333+
client = ServerClient(
1334+
domain="auth0.local",
1335+
client_id="<client_id>",
1336+
client_secret="<client_secret>",
1337+
state_store=mock_state_store,
1338+
transaction_store=mock_transaction_store,
1339+
secret="some-secret"
1340+
)
1341+
1342+
mocker.patch.object(client, "get_access_token", AsyncMock(return_value="<access_token>"))
1343+
mock_my_account_client = AsyncMock(MyAccountClient)
1344+
mocker.patch.object(client, "_my_account_client", mock_my_account_client)
1345+
mock_my_account_client.connect_account.return_value = ConnectAccountResponse(
1346+
auth_session="<auth_session>",
1347+
connect_uri="http://auth0.local/connected_accounts/connect",
1348+
connect_params=ConnectParams(
1349+
ticket="ticket123"
1350+
),
1351+
expires_in=300
1352+
)
1353+
1354+
# Act
1355+
await client.start_connect_account(
1356+
options=ConnectAccountOptions(
1357+
connection="<connection>",
1358+
scope=["scope1", "scope2", "scope3"],
1359+
redirect_uri="/test_redirect_uri"
1360+
)
1361+
)
1362+
1363+
# Assert
1364+
mock_my_account_client.connect_account.assert_awaited()
1365+
request = mock_my_account_client.connect_account.mock_calls[0].kwargs["request"]
1366+
assert request.scope == "scope1 scope2 scope3"
1367+
13271368
@pytest.mark.asyncio
13281369
async def test_start_connect_account_default_redirect_uri(mocker):
13291370
# Setup

0 commit comments

Comments
 (0)