From da872dcf587c3475fc5cd0b2ccb38fd91a0c30e9 Mon Sep 17 00:00:00 2001 From: Aler Denisov Date: Fri, 12 Jan 2024 22:11:23 +0300 Subject: [PATCH] feat: custom redirect urls for app connections --- apps/api/src/secrets/secrets.controller.ts | 13 ++++++++++--- apps/api/src/secrets/secrets.service.ts | 5 +++-- libs/database/src/entities/secrets.entity.ts | 2 ++ .../migrations/1705086423012-secrets-redirects.ts | 14 ++++++++++++++ libs/database/src/migrations/index.ts | 3 ++- 5 files changed, 31 insertions(+), 6 deletions(-) create mode 100644 libs/database/src/migrations/1705086423012-secrets-redirects.ts diff --git a/apps/api/src/secrets/secrets.controller.ts b/apps/api/src/secrets/secrets.controller.ts index 9f6d202..73a507a 100644 --- a/apps/api/src/secrets/secrets.controller.ts +++ b/apps/api/src/secrets/secrets.controller.ts @@ -45,9 +45,16 @@ export class SecretsController { .type('html') .type('text/html') .send( - ` Redirect succuesfully, this window should close now`, + ` + +Redirect succuesfully, this window should close now`, ); } diff --git a/apps/api/src/secrets/secrets.service.ts b/apps/api/src/secrets/secrets.service.ts index ea35159..1287bc9 100644 --- a/apps/api/src/secrets/secrets.service.ts +++ b/apps/api/src/secrets/secrets.service.ts @@ -73,10 +73,11 @@ export class SecretsService { } async claim(dto: ClaimConnectionDto) { - const { clientSecret } = await this.getSecretById(dto.clientId); + const { clientSecret, redirectUrl } = await this.getSecretById(dto.clientId); + const redirect_uri = redirectUrl ?? this.config.getOrThrow('publicUrl') + '/api/secrets/redirect' const body: Record = { - redirect_uri: this.config.getOrThrow('publicUrl') + '/api/secrets/redirect', grant_type: 'authorization_code', + redirect_uri, code: dto.code, }; diff --git a/libs/database/src/entities/secrets.entity.ts b/libs/database/src/entities/secrets.entity.ts index 1076ade..c91157b 100644 --- a/libs/database/src/entities/secrets.entity.ts +++ b/libs/database/src/entities/secrets.entity.ts @@ -19,6 +19,8 @@ export class SecretEntity extends MetaEntity { @Column({ nullable: false }) clientId: string; + @Column({ nullable: true }) + redirectUrl: string; } @CustomRepository(SecretEntity) diff --git a/libs/database/src/migrations/1705086423012-secrets-redirects.ts b/libs/database/src/migrations/1705086423012-secrets-redirects.ts new file mode 100644 index 0000000..bd91db7 --- /dev/null +++ b/libs/database/src/migrations/1705086423012-secrets-redirects.ts @@ -0,0 +1,14 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class SecretsRedirects1705086423012 implements MigrationInterface { + name = 'SecretsRedirects1705086423012' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "secret_entity" ADD "redirectUrl" character varying`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "secret_entity" DROP COLUMN "redirectUrl"`); + } + +} diff --git a/libs/database/src/migrations/index.ts b/libs/database/src/migrations/index.ts index 1e6799c..605a066 100644 --- a/libs/database/src/migrations/index.ts +++ b/libs/database/src/migrations/index.ts @@ -18,4 +18,5 @@ export * from './1697435937767-user-google'; export * from './1697737348969-email'; export * from './1697743613593-roles'; export * from './1699113772938-secrets'; -export * from './1701893634169-pieces'; \ No newline at end of file +export * from './1701893634169-pieces'; +export * from './1705086423012-secrets-redirects'; \ No newline at end of file