Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions src/tools/auth0/handlers/connections.ts
Original file line number Diff line number Diff line change
Expand Up @@ -448,12 +448,15 @@ export default class ConnectionsHandler extends DefaultAPIHandler {

getFormattedOptions(connection, clients) {
try {
const { idpinitiated } = connection.options;
return {
options: {
...connection.options,
idpinitiated: {
...connection.options.idpinitiated,
client_id: convertClientNameToId(connection.options.idpinitiated.client_id, clients),
...idpinitiated,
...(idpinitiated.client_id && {
client_id: convertClientNameToId(idpinitiated.client_id, clients),
}),
},
},
};
Expand Down
7 changes: 5 additions & 2 deletions src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -334,12 +334,15 @@ export const decodeBase64ToCertString = (base64Cert: string) => {
// Format connection options by converting client IDs to client names for SAML connections
export const getFormattedOptions = (connection, clients) => {
try {
const { idpinitiated } = connection.options;
return {
options: {
...connection.options,
idpinitiated: {
...connection.options.idpinitiated,
client_id: convertClientIdToName(connection.options.idpinitiated.client_id, clients),
...idpinitiated,
...(idpinitiated.client_id && {
client_id: convertClientIdToName(idpinitiated.client_id, clients),
}),
},
},
};
Expand Down
25 changes: 25 additions & 0 deletions test/context/directory/connections.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,31 @@ describe('#directory context connections', () => {
);
});

it('should dump samlp connection with idpinitiated login disabled', async () => {
const dir = path.join(testDataDir, 'directory', 'connectionsDump');
cleanThenMkdir(dir);
const context = new Context({ AUTH0_INPUT_FILE: dir }, mockMgmtClient());

context.assets.connections = [
{
name: 'someSamlConnectionIdpInitiatedDisabled',
strategy: 'samlp',
enabled_clients: [],
options: {
passwordPolicy: 'testPolicy',
idpinitiated: { enabled: false },
},
},
];

await handler.dump(context);
const connectionsFolder = path.join(dir, constants.CONNECTIONS_DIRECTORY);
expect(
loadJSON(path.join(connectionsFolder, 'someSamlConnectionIdpInitiatedDisabled.json')).options
.idpinitiated
).to.deep.equal({ enabled: false });
});

it('should dump connections sanitized', async () => {
const dir = path.join(testDataDir, 'directory', 'connectionsDump');
cleanThenMkdir(dir);
Expand Down
22 changes: 22 additions & 0 deletions test/context/yaml/connections.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,17 @@ describe('#YAML context connections', () => {
},
},
},
{
name: 'someSamlConnectionIdpInitiatedDisabled',
strategy: 'samlp',
enabled_clients: [],
options: {
passwordPolicy: 'testPolicy',
idpinitiated: {
enabled: false,
},
},
},
];

const target = [
Expand Down Expand Up @@ -238,6 +249,17 @@ describe('#YAML context connections', () => {
},
},
},
{
name: 'someSamlConnectionIdpInitiatedDisabled',
strategy: 'samlp',
enabled_clients: [],
options: {
passwordPolicy: 'testPolicy',
idpinitiated: {
enabled: false,
},
},
},
];

const clients = [
Expand Down
16 changes: 16 additions & 0 deletions test/tools/auth0/handlers/connections.tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -1476,6 +1476,22 @@ describe('#connections handler', () => {
await stageFn.apply(handler, [{ connections: data }]);
});

it('should not add a client_id to idpinitiated when login is disabled', () => {
const handler = new connections.default({ client: pageClient({ pool }), config });
const connection = {
options: {
passwordPolicy: 'testPolicy',
idpinitiated: { enabled: false },
},
};

const formatted = handler.getFormattedOptions(connection, [
{ name: 'client1', client_id: 'client1-id' },
]);

expect(formatted.options.idpinitiated).to.deep.equal({ enabled: false });
});

// If client is excluded and in the existing connection this client is enabled, it should keep enabled
// If client is excluded and in the existing connection this client is disabled, it should keep disabled
it('should handle excluded clients properly', async () => {
Expand Down