diff --git a/apps/api/v2/src/modules/oauth-clients/inputs/update-oauth-client.input.ts b/apps/api/v2/src/modules/oauth-clients/inputs/update-oauth-client.input.ts index 596651bdd4..1b2a129576 100644 --- a/apps/api/v2/src/modules/oauth-clients/inputs/update-oauth-client.input.ts +++ b/apps/api/v2/src/modules/oauth-clients/inputs/update-oauth-client.input.ts @@ -1,4 +1,4 @@ -import { IsArray, IsOptional, IsString } from "class-validator"; +import { IsArray, IsBoolean, IsOptional, IsString } from "class-validator"; export class UpdateOAuthClientInput { @IsOptional() @@ -13,4 +13,20 @@ export class UpdateOAuthClientInput { @IsOptional() @IsString({ each: true }) redirectUris?: string[] = []; + + @IsOptional() + @IsString() + bookingRedirectUri?: string; + + @IsOptional() + @IsString() + bookingCancelRedirectUri?: string; + + @IsOptional() + @IsString() + bookingRescheduleRedirectUri?: string; + + @IsOptional() + @IsBoolean() + areEmailsEnabled?: boolean; } diff --git a/apps/web/components/settings/organizations/platform/oauth-clients/OAuthClientCard.tsx b/apps/web/components/settings/organizations/platform/oauth-clients/OAuthClientCard.tsx index c7803a9fee..f57f6b5e65 100644 --- a/apps/web/components/settings/organizations/platform/oauth-clients/OAuthClientCard.tsx +++ b/apps/web/components/settings/organizations/platform/oauth-clients/OAuthClientCard.tsx @@ -11,6 +11,10 @@ type OAuthClientCardProps = { name: string; logo?: Avatar; redirectUris: string[]; + bookingRedirectUri: string | null; + bookingCancelRedirectUri: string | null; + bookingRescheduleRedirectUri: string | null; + areEmailsEnabled: boolean; permissions: number; lastItem: boolean; id: string; @@ -23,13 +27,19 @@ export const OAuthClientCard = ({ name, logo, redirectUris, + bookingRedirectUri, + bookingCancelRedirectUri, + bookingRescheduleRedirectUri, permissions, id, secret, lastItem, onDelete, isLoading, + areEmailsEnabled, }: OAuthClientCardProps) => { + console.log(areEmailsEnabled); + const clientPermissions = Object.values(PERMISSIONS_GROUPED_MAP).map((value, index) => { let permissionsMessage = ""; const hasReadPermission = hasPermission(permissions, value.read); @@ -110,8 +120,26 @@ export const OAuthClientCard = ({ Redirect uris: {redirectUris.map((item, index) => (redirectUris.length === index + 1 ? `${item}` : `${item}, `))} + {bookingRedirectUri && ( +
+ Booking redirect uri: {bookingRedirectUri} +
+ )} + {bookingRescheduleRedirectUri && ( +
+ Booking reschedule uri: {bookingRescheduleRedirectUri} +
+ )} + {bookingCancelRedirectUri && ( +
+ Booking cancel uri: {bookingCancelRedirectUri} +
+ )} +
+ Emails enabled: {areEmailsEnabled ? "Yes" : "No"} +
-
+
*/} +
+ + + +
+
+ + + +
+
+ + + +
+
+ + +

Permissions

diff --git a/apps/web/pages/settings/organizations/platform/oauth-clients/index.tsx b/apps/web/pages/settings/organizations/platform/oauth-clients/index.tsx index 6e5619d65a..3a46e7a960 100644 --- a/apps/web/pages/settings/organizations/platform/oauth-clients/index.tsx +++ b/apps/web/pages/settings/organizations/platform/oauth-clients/index.tsx @@ -62,10 +62,15 @@ export const OAuthClients = () => { <>
{data.map((client, index) => { + console.log(client); + return ( { secret={client.secret} isLoading={isDeleting} onDelete={handleDelete} + areEmailsEnabled={client.areEmailsEnabled} /> ); })} diff --git a/packages/platform/types/oauth-clients.ts b/packages/platform/types/oauth-clients.ts index 836e68400c..1d3aab0663 100644 --- a/packages/platform/types/oauth-clients.ts +++ b/packages/platform/types/oauth-clients.ts @@ -1,4 +1,4 @@ -import { IsArray, IsNumber, IsOptional, IsString } from "class-validator"; +import { IsArray, IsNumber, IsOptional, IsBoolean, IsString } from "class-validator"; import { z } from "zod"; export class CreateOAuthClientInput { @@ -15,6 +15,22 @@ export class CreateOAuthClientInput { @IsNumber() permissions!: number; + + @IsOptional() + @IsString() + bookingRedirectUri?: string; + + @IsOptional() + @IsString() + bookingCancelRedirectUri?: string; + + @IsOptional() + @IsString() + bookingRescheduleRedirectUri?: string; + + @IsOptional() + @IsBoolean() + areEmailsEnabled?: boolean; } export class DeleteOAuthClientInput { diff --git a/packages/prisma/migrations/20240411114622_platform_urls_emails/migration.sql b/packages/prisma/migrations/20240411114622_platform_urls_emails/migration.sql new file mode 100644 index 0000000000..232c86ecbd --- /dev/null +++ b/packages/prisma/migrations/20240411114622_platform_urls_emails/migration.sql @@ -0,0 +1,5 @@ +-- AlterTable +ALTER TABLE "PlatformOAuthClient" ADD COLUMN "areEmailsEnabled" BOOLEAN NOT NULL DEFAULT false, +ADD COLUMN "bookingCancelRedirectUri" TEXT, +ADD COLUMN "bookingRedirectUri" TEXT, +ADD COLUMN "bookingRescheduleRedirectUri" TEXT; diff --git a/packages/prisma/schema.prisma b/packages/prisma/schema.prisma index e3a3d5307f..bebe0e44bf 100644 --- a/packages/prisma/schema.prisma +++ b/packages/prisma/schema.prisma @@ -1228,6 +1228,11 @@ model PlatformOAuthClient { refreshToken RefreshToken[] authorizationTokens PlatformAuthorizationToken[] + bookingRedirectUri String? + bookingCancelRedirectUri String? + bookingRescheduleRedirectUri String? + areEmailsEnabled Boolean @default(false) + createdAt DateTime @default(now()) }