diff --git a/src/authorization-client/authorization-client.spec.ts b/src/authorization-client/authorization-client.spec.ts index 41ad05c..a28863e 100644 --- a/src/authorization-client/authorization-client.spec.ts +++ b/src/authorization-client/authorization-client.spec.ts @@ -44,6 +44,7 @@ test('AuthorizationClient.getGroupMembers should get group members', async (t) = test('AuthorizationClient.getConnections should get connections', async (t) => { const { authorizationClient, counter } = setupTest(); const connections = await authorizationClient.getConnections(); + console.log(connections) t.truthy(connections); }); @@ -53,6 +54,30 @@ test('AuthorizationClient.getGroups should get groups', async (t) => { t.truthy(response.groups); }); +test('AuthorizationClient.enableConnection should enable application for specified connection', async (t) => { + const testConnectionId = 'con_RuQniJyhsNJhzggX'; + const defaultAppId = 'ZEBLdpFpHXg55cejEFEKphF03fo9-zJ8' + const { authorizationClient, counter } = setupTest(); + const response = await authorizationClient.enableConnection( + { + connectionId: testConnectionId, + applicationId: defaultAppId + } + ); + t.truthy(response.enabled_clients.length); +}); + +test('AuthorizationClient.disableConnection should disable all applications for specified connection', async (t) => { + const testConnectionId = 'con_RuQniJyhsNJhzggX'; + const { authorizationClient, counter } = setupTest(); + const response = await authorizationClient.disableConnection( + { + connectionId: testConnectionId + } + ); + t.truthy(!response.enabled_clients.length); +}); + // Returns a new instance of AuthorizationClient and a counter counting the number of times getAccessToken is called. function setupTest() { const dummyAccessToken = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlJFWXlNVEV3UWtFNVJrVTVNVVU1TXpaQ1JFRkdNMEl3UTBNM05EY3hNRFExUXpZd01USTJNZyJ9.eyJpc3MiOiJ4eHgiLCJzdWIiOiJ4eHgiLCJhdWQiOiJ4eHgiLCJpYXQiOjE1NTg1MDQ2NjMsImV4cCI6MTU1ODUwNDY2Mywibm9uY2UiOiJYWFgifQ.iPNiKdnMfuSz6GD83FfKqB2dMmvlrFtCjDiQ7pgN0Qpyk1XyO0z72ZMG88yH1OGZCGswdw-f8KRjOZ5lSLeiXfePjOYGkPT9izBjYJtzzOBAQ4mx936BwFK8NB204AhhqpTsC7JYsw4vm7r1EjUcN1fMmCSAqxOrPNmq0R9lOiN_aSkQdJlCcqTkUlEorufqjRr_uUbNKHHcx93PhFKezTAbiIOA910yUFbCiDLIYwTkmdbkFZSyeDA12Pl9ZFW9v61k3azmH9AhyDc6QKPLb92CX7k7ZKnJw0GQ5wf5j2wfxtYjRGz7CPNwNXPVUJu67w7HuBCDT8unI-rO7W2okA'; diff --git a/src/authorization-client/authorization-client.ts b/src/authorization-client/authorization-client.ts index 41ec3a3..99052c1 100644 --- a/src/authorization-client/authorization-client.ts +++ b/src/authorization-client/authorization-client.ts @@ -42,6 +42,8 @@ import { removeUserFromRoles, Input as IRemoveUserFromRolesInput } from '../user import { calculateRoles, Input as ICalculateRolesInput } from '../users/calculate-roles'; // Connections import { getConnections } from '../connections/get-connections'; +import { disableConnection, Input as IDisableConnectionInput } from '../connections/disable-connection'; +import { enableConnection, Input as IEnableConnectionInput } from '../connections/enable-connection'; export class AuthorizationClient { private _options: IAuthorizationClientOptions; @@ -207,6 +209,14 @@ export class AuthorizationClient { return getConnections(this._options.extensionUrl, await this._getAccessToken())(); } + public async disableConnection(input: IDisableConnectionInput) { + return disableConnection(this._options.extensionUrl, await this._getAccessToken())(input); + } + + public async enableConnection(input: IEnableConnectionInput) { + return enableConnection(this._options.extensionUrl, await this._getAccessToken())(input); + } + // Return cached access token unless it does not exist or is expired. // If there is a pending request to get access token, wait for that // request to finish before continuing. diff --git a/src/connections/disable-connection.ts b/src/connections/disable-connection.ts new file mode 100644 index 0000000..a3f36c1 --- /dev/null +++ b/src/connections/disable-connection.ts @@ -0,0 +1,18 @@ +import { IAuth0AuthorizationApiConnection } from '../interfaces'; +import { patch } from '../common/request'; + +export interface Input { + connectionId: string; +} + +export function disableConnection(extensionUrl: string, accessToken: string) { + return (input: Input): Promise => { + return patch({ + accessToken, + url: `${extensionUrl}/connections/${input.connectionId}`, + body: { + "enabled_clients": [] + } + }); + } +} diff --git a/src/connections/enable-connection.ts b/src/connections/enable-connection.ts new file mode 100644 index 0000000..f84b91d --- /dev/null +++ b/src/connections/enable-connection.ts @@ -0,0 +1,20 @@ +import { IAuth0AuthorizationApiConnection } from '../interfaces'; +import { patch } from '../common/request'; + +export interface Input { + connectionId: string; + applicationId: string; +} + +export function enableConnection(extensionUrl: string, accessToken: string) { + return (input: Input): Promise => { + console.log("!!!" + `${extensionUrl}/connections/${input.connectionId}`) + return patch({ + accessToken, + url: `${extensionUrl}/connections/${input.connectionId}`, + body: { + "enabled_clients": [`"${input.applicationId}"`] + } + }); + } +} diff --git a/src/interfaces.ts b/src/interfaces.ts index 7806b21..961a35c 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -42,4 +42,5 @@ export interface IAuth0AuthorizationApiConnection { name: string; display_name: string; id: string; + enabled_clients: string[]; } \ No newline at end of file