diff --git a/studio/components/interfaces/Auth/Auth.types.ts b/studio/components/interfaces/Auth/Auth.types.ts index 3c4118ec83b..71ca7e519f2 100644 --- a/studio/components/interfaces/Auth/Auth.types.ts +++ b/studio/components/interfaces/Auth/Auth.types.ts @@ -30,6 +30,10 @@ export interface AuthConfig { EXTERNAL_FACEBOOK_CLIENT_ID: string | null EXTERNAL_FACEBOOK_SECRET: string | null + EXTERNAL_FIGMA_ENABLED: boolean + EXTERNAL_FIGMA_CLIENT_ID: string | null + EXTERNAL_FIGMA_SECRET: string | null + EXTERNAL_GITHUB_ENABLED: false EXTERNAL_GITHUB_CLIENT_ID: string | null EXTERNAL_GITHUB_SECRET: string | null diff --git a/studio/pages/api/auth/[ref]/config.ts b/studio/pages/api/auth/[ref]/config.ts index 66545dba0ae..5832f17f036 100644 --- a/studio/pages/api/auth/[ref]/config.ts +++ b/studio/pages/api/auth/[ref]/config.ts @@ -64,6 +64,9 @@ const handleGetAll = async (req: NextApiRequest, res: NextApiResponse) => { EXTERNAL_FACEBOOK_ENABLED: false, EXTERNAL_FACEBOOK_CLIENT_ID: null, EXTERNAL_FACEBOOK_SECRET: null, + EXTERNAL_FIGMA_ENABLED: false, + EXTERNAL_FIGMA_CLIENT_ID: null, + EXTERNAL_FIGMA_SECRET: null, EXTERNAL_GITHUB_ENABLED: false, EXTERNAL_GITHUB_CLIENT_ID: null, EXTERNAL_GITHUB_SECRET: null, diff --git a/studio/stores/authConfig/schema/AuthProviders/AuthProvidersFormValidation.tsx b/studio/stores/authConfig/schema/AuthProviders/AuthProvidersFormValidation.tsx index 750ff44fa62..08df2bd9299 100644 --- a/studio/stores/authConfig/schema/AuthProviders/AuthProvidersFormValidation.tsx +++ b/studio/stores/authConfig/schema/AuthProviders/AuthProvidersFormValidation.tsx @@ -540,6 +540,44 @@ const EXTERNAL_PROVIDER_FACEBOOK = { }, } +const EXTERNAL_PROVIDER_FIGMA = { + $schema: JSON_SCHEMA_VERSION, + type: 'object', + title: 'Figma', + properties: { + EXTERNAL_FIGMA_ENABLED: { + title: 'Figma enabled', + type: 'boolean', + }, + EXTERNAL_FIGMA_CLIENT_ID: { + title: 'Client ID', + type: 'string', + }, + EXTERNAL_FIGMA_SECRET: { + title: 'Client Secret', + type: 'string', + isSecret: true, + }, + }, + validationSchema: object().shape({ + EXTERNAL_FIGMA_ENABLED: boolean().required(), + EXTERNAL_FIGMA_CLIENT_ID: string().when('EXTERNAL_FIGMA_ENABLED', { + is: true, + then: (schema) => schema.required('Client ID is required'), + otherwise: (schema) => schema, + }), + EXTERNAL_FIGMA_SECRET: string().when('EXTERNAL_FIGMA_ENABLED', { + is: true, + then: (schema) => schema.required('Client Secret is required'), + otherwise: (schema) => schema, + }), + }), + misc: { + iconKey: 'figma-icon', + requiresRedirect: true, + }, +} + const EXTERNAL_PROVIDER_GITHUB = { $schema: JSON_SCHEMA_VERSION, type: 'object', @@ -1060,6 +1098,7 @@ export const PROVIDERS_SCHEMAS = [ EXTERNAL_PROVIDER_BITBUCKET, EXTERNAL_PROVIDER_DISCORD, EXTERNAL_PROVIDER_FACEBOOK, + EXTERNAL_PROVIDER_FIGMA, EXTERNAL_PROVIDER_GITHUB, EXTERNAL_PROVIDER_GITLAB, EXTERNAL_PROVIDER_GOOGLE, diff --git a/studio/stores/jsonSchema/auth_gotrue_config.json b/studio/stores/jsonSchema/auth_gotrue_config.json index a0d00a3deb2..b7dbd41399e 100644 --- a/studio/stores/jsonSchema/auth_gotrue_config.json +++ b/studio/stores/jsonSchema/auth_gotrue_config.json @@ -156,6 +156,18 @@ "title": "Facebook secret", "type": "string" }, + "EXTERNAL_FIGMA_ENABLED": { + "title": "Figma enabled", + "type": "boolean" + }, + "EXTERNAL_FIGMA_CLIENT_ID": { + "title": "Figma client ID", + "type": "string" + }, + "EXTERNAL_FIGMA_SECRET": { + "title": "Figma secret", + "type": "string" + }, "EXTERNAL_GITHUB_ENABLED": { "title": "GitHub enabled", "type": "boolean" diff --git a/supabase/config.toml b/supabase/config.toml index 7b1702d2d8e..f0c3d816b66 100644 --- a/supabase/config.toml +++ b/supabase/config.toml @@ -59,8 +59,8 @@ double_confirm_changes = true enable_confirmations = false # Use an external OAuth provider. The full list of providers are: `apple`, `azure`, `bitbucket`, -# `discord`, `facebook`, `github`, `gitlab`, `google`, `keycloak`, `linkedin`, `notion`, `twitch`, -# `twitter`, `slack`, `spotify`, `workos`, `zoom`. +# `discord`, `facebook`, `figma`, `github`, `gitlab`, `google`, `keycloak`, `linkedin`, `notion`, +# `twitch`, `twitter`, `slack`, `spotify`, `workos`, `zoom`. [auth.external.apple] enabled = false client_id = ""