diff --git a/src/lib/stores/oauth-providers.ts b/src/lib/stores/oauth-providers.ts index 1a2143a178..f1b8d699dc 100644 --- a/src/lib/stores/oauth-providers.ts +++ b/src/lib/stores/oauth-providers.ts @@ -1,5 +1,6 @@ import type { Component } from 'svelte'; import Main from '$routes/(console)/project-[region]-[project]/auth/(providers)/mainOAuth.svelte'; +import Google from '$routes/(console)/project-[region]-[project]/auth/(providers)/googleOAuth.svelte'; export type Provider = { name: string; @@ -129,13 +130,13 @@ export const oAuthProviders: Record = { name: 'Google', icon: 'google', docs: 'https://support.google.com/googleapi/answer/6158849', - component: Main + component: Google }, googleImagine: { name: 'Google', icon: 'google', docs: 'https://support.google.com/googleapi/answer/6158849', - component: Main, + component: Google, internal: true }, keycloak: { diff --git a/src/routes/(console)/project-[region]-[project]/auth/(providers)/googleOAuth.svelte b/src/routes/(console)/project-[region]-[project]/auth/(providers)/googleOAuth.svelte new file mode 100644 index 0000000000..12bcf06c55 --- /dev/null +++ b/src/routes/(console)/project-[region]-[project]/auth/(providers)/googleOAuth.svelte @@ -0,0 +1,193 @@ + + + +

+ To use Google authentication in your application, first fill in this form. For more info you + can + visit the docs. +

+ + + + {#if appIdParam} + + {/if} + + {#if !showSecretInput} +
+ (showSecretInput = true)}> + Update Client Secret + +
+ {:else} + + + + + Client Secret + + + + This field is write-only. Enter a new value to update it. + + + + + + + + + + + {/if} + + + + + + + To complete set up, add this OAuth2 redirect URI to your Google app configuration. + + + + + + + +
diff --git a/src/routes/(console)/project-[region]-[project]/auth/(providers)/googlePromptPicker.svelte b/src/routes/(console)/project-[region]-[project]/auth/(providers)/googlePromptPicker.svelte new file mode 100644 index 0000000000..f7f04d9abb --- /dev/null +++ b/src/routes/(console)/project-[region]-[project]/auth/(providers)/googlePromptPicker.svelte @@ -0,0 +1,41 @@ + + + + Prompt + + {#each options as option (option.val)} + toggle(option.val)}> + {option.label} + + {/each} + + diff --git a/src/routes/(console)/project-[region]-[project]/auth/(providers)/mainOAuth.svelte b/src/routes/(console)/project-[region]-[project]/auth/(providers)/mainOAuth.svelte index 574cc3d29f..7dd6181888 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/(providers)/mainOAuth.svelte +++ b/src/routes/(console)/project-[region]-[project]/auth/(providers)/mainOAuth.svelte @@ -148,7 +148,7 @@ } function isOidcAdvancedParam(id: string): boolean { - return id === 'authorizationURL' || id === 'tokenUrl' || id === 'userInfoUrl'; + return id !== 'wellKnownURL' && id.toLowerCase().includes('url'); } async function handleP8FileUpload(id: string, event: Event) { @@ -245,21 +245,6 @@ bind:value={fieldValues[param.$id]} /> {/each} - {#if advancedDetailParams.length > 0} - - - {#each advancedDetailParams as param} - - {/each} - - - {/if} - {#if secretParams.length > 0} {#if !showSecretInput}
@@ -372,6 +357,21 @@ {/if} {/if} + {#if advancedDetailParams.length > 0} + + + {#each advancedDetailParams as param} + + {/each} + + + {/if} + To complete set up, add this OAuth2 redirect URI to your {provider.name} app configuration. diff --git a/src/routes/(console)/project-[region]-[project]/auth/updateOAuth.ts b/src/routes/(console)/project-[region]-[project]/auth/updateOAuth.ts index 59d50a55bc..17e62ddba1 100644 --- a/src/routes/(console)/project-[region]-[project]/auth/updateOAuth.ts +++ b/src/routes/(console)/project-[region]-[project]/auth/updateOAuth.ts @@ -4,7 +4,11 @@ import { Dependencies } from '$lib/constants'; import { isValueOfStringEnum } from '$lib/helpers/types'; import { addNotification } from '$lib/stores/notifications'; import { sdk } from '$lib/stores/sdk'; -import { OAuthProvider, type Models as ConsoleModels } from '@appwrite.io/console'; +import { + OAuthProvider, + ProjectOAuth2GooglePrompt, + type Models as ConsoleModels +} from '@appwrite.io/console'; type ProjectOAuthProvider = ConsoleModels.OAuth2ProviderList['providers'][number]; @@ -21,6 +25,7 @@ type Args = { secret: string | null; details: Record; enabled: boolean; + promptValues?: ProjectOAuth2GooglePrompt[]; }; type Return = { @@ -45,7 +50,8 @@ async function updateProjectOAuth({ appId, secret, details, - enabled + enabled, + promptValues }: Args) { const projectSdk = sdk.forProject(region, projectId).project; const parsedSecret = parseSecret(secret); @@ -184,6 +190,7 @@ async function updateProjectOAuth({ return projectSdk.updateOAuth2Google({ clientId: getAppId(), clientSecret: getSecret(), + prompt: promptValues ?? [], enabled }); case OAuthProvider.Keycloak: @@ -345,14 +352,24 @@ export async function updateOAuth({ appId, secret, details, - enabled + enabled, + promptValues }: Args): Promise { try { if (!isValueOfStringEnum(OAuthProvider, provider.key)) { throw new Error(`Invalid OAuth2 provider: ${provider.key}`); } - await updateProjectOAuth({ region, projectId, provider, appId, secret, details, enabled }); + await updateProjectOAuth({ + region, + projectId, + provider, + appId, + secret, + details, + enabled, + promptValues + }); await invalidate(Dependencies.PROJECT); addNotification({ diff --git a/src/routes/(public)/(guest)/login/+page.svelte b/src/routes/(public)/(guest)/login/+page.svelte index 529fcf685e..e45ae0b080 100644 --- a/src/routes/(public)/(guest)/login/+page.svelte +++ b/src/routes/(public)/(guest)/login/+page.svelte @@ -1,6 +1,7 @@