Skip to content

Commit 24a5448

Browse files
Bars92talaharoni
andauthored
Add Inbound apps (#424)
* add third party app + consents api * add readme * add third party app patch add third party app get secret add third party app rotate secret * Rename to Inbound Applications, add new params, add managementCli * with new files * PR fixes * remove consts * update cr cmments * typo fix * Revert "typo fix" This reverts commit d233e21. * typo fix --------- Co-authored-by: talaharoni <tal@descope.com>
1 parent 2d40c19 commit 24a5448

File tree

7 files changed

+846
-7
lines changed

7 files changed

+846
-7
lines changed

README.md

Lines changed: 89 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -634,29 +634,29 @@ await descopeClient.management.password.configureSettings('my-tenant-id', {
634634
You can create, update, delete or load SSO applications:
635635

636636
```typescript
637-
// Create OIDC sso application
637+
// Create OIDC SSO application
638638
await descopeClient.management.ssoApplication.createOidcApplication({
639639
name: 'My OIDC app name',
640640
loginPageUrl: 'http://dummy.com/login',
641641
});
642642

643-
// Create SAML sso application
643+
// Create SAML SSO application
644644
await descopeClient.management.ssoApplication.createSamlApplication({
645645
name: 'My SAML app name',
646646
loginPageUrl: 'http://dummy.com/login',
647647
useMetadataInfo: true,
648648
metadataUrl: 'http://dummy.com/metadata',
649649
});
650650

651-
// Update OIDC sso application.
651+
// Update OIDC SSO application.
652652
// Update will override all fields as is. Use carefully.
653653
await descopeClient.management.ssoApplication.updateOidcApplication({
654654
id: 'my-app-id',
655655
name: 'My OIDC app name',
656656
loginPageUrl: 'http://dummy.com/login',
657657
});
658658

659-
// Update SAML sso application.
659+
// Update SAML SSO application.
660660
// Update will override all fields as is. Use carefully.
661661
await descopeClient.management.ssoApplication.updateSamlApplication({
662662
id: 'my-app-id',
@@ -669,13 +669,13 @@ await descopeClient.management.ssoApplication.updateSamlApplication({
669669
certificate: 'certificate',
670670
});
671671

672-
// Tenant deletion cannot be undone. Use carefully.
672+
// SSO application deletion cannot be undone. Use carefully.
673673
await descopeClient.management.ssoApplication.delete('my-app-id');
674674

675-
// Load sso application by id
675+
// Load SSO application by id
676676
const app = await descopeClient.management.ssoApplication.load('my-app-id');
677677

678-
// Load all sso applications
678+
// Load all SSO applications
679679
const appsRes = await descopeClient.management.ssoApplication.loadAll();
680680
appsRes.data.forEach((app) => {
681681
// do something
@@ -1259,6 +1259,88 @@ const relations = await descopeClient.management.fga.check([
12591259
]);
12601260
```
12611261

1262+
### Manage Inbound Applications
1263+
1264+
You can create, update, delete or load inbound applications:
1265+
1266+
```typescript
1267+
// Create an inbound application.
1268+
const { id, cleartext: secret } =
1269+
await descopeClient.management.inboundApplication.createApplication({
1270+
name: 'my new app',
1271+
description: 'my desc',
1272+
logo: 'data:image/png;..',
1273+
approvedCallbackUrls: ['dummy.com'],
1274+
permissionsScopes: [
1275+
{
1276+
name: 'read_support',
1277+
description: 'read for support',
1278+
values: ['Support'],
1279+
},
1280+
],
1281+
attributesScopes: [
1282+
{
1283+
name: 'read_email',
1284+
description: 'read user email',
1285+
values: ['email'],
1286+
},
1287+
],
1288+
loginPageUrl: 'http://dummy.com/login',
1289+
});
1290+
1291+
// Update an inbound application.
1292+
// Update will override all fields as is. Use carefully.
1293+
await descopeClient.management.inboundApplication.updateApplication({
1294+
id: 'my-app-id',
1295+
name: 'my updated app',
1296+
loginPageUrl: 'http://dummy.com/login',
1297+
approvedCallbackUrls: ['dummy.com', 'myawesomedomain.com'],
1298+
});
1299+
1300+
// Patch an inbound application.
1301+
// patch will not override all fields, but update only what given.
1302+
await descopeClient.management.inboundApplication.patchApplication({
1303+
id: 'my-app-id',
1304+
name: 'my updated app name',
1305+
description: 'my new description',
1306+
});
1307+
1308+
// delete an inbound application by id.
1309+
// inbound application deletion cannot be undone. Use carefully.
1310+
await descopeClient.management.inboundApplication.deleteApplication('my-app-id');
1311+
1312+
// Load an inbound application by id
1313+
const app = await descopeClient.management.inboundApplication.loadApplication('my-app-id');
1314+
1315+
// Load all inbound applications
1316+
const appsRes = await descopeClient.management.inboundApplication.loadAllApplications();
1317+
appsRes.data.forEach((app) => {
1318+
// do something
1319+
});
1320+
1321+
// Get an inbound application secret by application id.
1322+
const { cleartext } = await descopeClient.management.inboundApplication.getApplicationSecret(
1323+
'my-app-id',
1324+
);
1325+
1326+
// Rotate an inbound application secret by application id.
1327+
const { cleartext } = await descopeClient.management.inboundApplication.rotateApplicationSecret(
1328+
'my-app-id',
1329+
);
1330+
1331+
// Search in all consents. search consents by the given app id and offset to the third page.
1332+
const consentsRes = await descopeClient.management.inboundApplication.searchConsents({
1333+
appId: 'my-app',
1334+
page: 2,
1335+
});
1336+
1337+
// Delete consents. delete all user consents, application consents or specific consents by id.
1338+
// inbound application consents deletion cannot be undone. Use carefully.
1339+
await descopeClient.management.inboundApplication.deleteConsents({
1340+
userIds: ['user'],
1341+
});
1342+
```
1343+
12621344
### Utils for your end to end (e2e) tests and integration tests
12631345

12641346
To ease your e2e tests, we exposed dedicated management methods,

examples/managementCli/src/index.ts

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,135 @@ program
448448
handleSdkRes(await sdk.management.password.getSettings(tenantId));
449449
});
450450

451+
// *** Inbound application commands ***
452+
453+
// inbound-application-create
454+
program
455+
.command('inbound-application-create')
456+
.description('Create a new inbound application')
457+
.argument('<name>', 'Inbound application name')
458+
.argument('<permission-scope-items>', 'Inbound application permission scopes', (val) =>
459+
val?.split(','),
460+
)
461+
.action(async (name, permissionsScopes) => {
462+
handleSdkRes(
463+
await sdk.management.inboundApplication.createApplication({
464+
name,
465+
permissionsScopes: JSON.parse(permissionsScopes)?.map((permissionsScope: any) => {
466+
return {
467+
name: permissionsScope.name,
468+
description: permissionsScope.description,
469+
values: permissionsScope.values,
470+
optional: permissionsScope.optional,
471+
};
472+
}),
473+
}),
474+
);
475+
});
476+
477+
// inbound-application-update
478+
program
479+
.command('inbound-application-update')
480+
.description('Update an inbound application')
481+
.argument('<id>', 'Inbound application ID')
482+
.argument('<name>', 'Inbound application name')
483+
.argument('<permission-scope-items>', 'Inbound application permission scopes', (val) =>
484+
val?.split(','),
485+
)
486+
.action(async (id, name, permissionsScopes) => {
487+
handleSdkRes(
488+
await sdk.management.inboundApplication.updateApplication({
489+
id,
490+
name,
491+
permissionsScopes: JSON.parse(permissionsScopes)?.map((permissionsScope: any) => {
492+
return {
493+
name: permissionsScope.name,
494+
description: permissionsScope.description,
495+
values: permissionsScope.values,
496+
optional: permissionsScope.optional,
497+
};
498+
}),
499+
}),
500+
);
501+
});
502+
503+
// inbound-application-patch
504+
program
505+
.command('inbound-application-patch')
506+
.description('Patch an inbound application')
507+
.argument('<id>', 'Inbound application ID')
508+
.argument('<name>', 'Inbound application name')
509+
.action(async (id, name) => {
510+
handleSdkRes(
511+
await sdk.management.inboundApplication.patchApplication({
512+
id,
513+
name,
514+
}),
515+
);
516+
});
517+
518+
// inbound-application-delete
519+
program
520+
.command('inbound-application-delete')
521+
.description('Delete an inbound application')
522+
.argument('<id>', 'Inbound application ID')
523+
.action(async (id) => {
524+
handleSdkRes(await sdk.management.inboundApplication.deleteApplication(id));
525+
});
526+
527+
// inbound-application-load
528+
program
529+
.command('inbound-application-load')
530+
.description('Load inbound application by id')
531+
.argument('<id>', 'Inbound application ID')
532+
.action(async (id) => {
533+
handleSdkRes(await sdk.management.inboundApplication.loadApplication(id));
534+
});
535+
536+
// inbound-application-load-all
537+
program
538+
.command('inbound-application-load-all')
539+
.description('Load all inbound applications')
540+
.action(async () => {
541+
handleSdkRes(await sdk.management.inboundApplication.loadAllApplications());
542+
});
543+
544+
// inbound-application-secret
545+
program
546+
.command('inbound-application-secret')
547+
.description('Get inbound application secret by id')
548+
.argument('<id>', 'Inbound application ID')
549+
.action(async (id) => {
550+
handleSdkRes(await sdk.management.inboundApplication.getApplicationSecret(id));
551+
});
552+
553+
// inbound-application-rotate-secret
554+
program
555+
.command('inbound-application-rotate-secret')
556+
.description('Rotate inbound application secret by id')
557+
.argument('<id>', 'Inbound application ID')
558+
.action(async (id) => {
559+
handleSdkRes(await sdk.management.inboundApplication.rotateApplicationSecret(id));
560+
});
561+
562+
// inbound-application-consent-search
563+
program
564+
.command('inbound-application-consent-search')
565+
.description('Search inbound application consents')
566+
.argument('<appId>', 'Inbound application ID')
567+
.action(async (appId) => {
568+
handleSdkRes(await sdk.management.inboundApplication.searchConsents({ appId }));
569+
});
570+
571+
// inbound-application-consent-delete
572+
program
573+
.command('inbound-application-consent-delete')
574+
.description('Delete inbound application consents')
575+
.argument('<appId>', 'Inbound application ID')
576+
.action(async (appId) => {
577+
handleSdkRes(await sdk.management.inboundApplication.deleteConsents({ appId }));
578+
});
579+
451580
// *** SSO application commands ***
452581

453582
// sso-application-create-oidc

0 commit comments

Comments
 (0)