diff --git a/forms/user_oauth2_login.go b/forms/user_oauth2_login.go index ae5b2a9d..b337ca5e 100644 --- a/forms/user_oauth2_login.go +++ b/forms/user_oauth2_login.go @@ -152,14 +152,6 @@ func (form *UserOauth2Login) Submit() (*models.User, *auth.AuthUser, error) { return err } } else { - // update the existing user verified state - if !user.Verified { - user.Verified = true - if err := txDao.SaveUser(user); err != nil { - return err - } - } - // update the existing user empty email if the authData has one // (this in case previously the user was created with // an OAuth2 provider that didn't return an email address) @@ -169,6 +161,15 @@ func (form *UserOauth2Login) Submit() (*models.User, *auth.AuthUser, error) { return err } } + + // update the existing user verified state + // (only if the user doesn't have an email or the user email match with the one in authData) + if !user.Verified && (user.Email == "" || user.Email == authData.Email) { + user.Verified = true + if err := txDao.SaveUser(user); err != nil { + return err + } + } } // create ExternalAuth relation if missing diff --git a/ui/.env b/ui/.env index ac8d317e..60fde515 100644 --- a/ui/.env +++ b/ui/.env @@ -4,8 +4,4 @@ PB_PROFILE_COLLECTION = "profiles" PB_INSTALLER_PARAM = "installer" PB_RULES_SYNTAX_DOCS = "https://pocketbase.io/docs/manage-collections#rules-filters-syntax" PB_RELEASES = "https://github.com/pocketbase/pocketbase/releases" -<<<<<<< HEAD PB_VERSION = "v0.6.0" -======= -PB_VERSION = "v0.5.2" ->>>>>>> master diff --git a/ui/src/components/users/ExternalAuthsList.svelte b/ui/src/components/users/ExternalAuthsList.svelte new file mode 100644 index 00000000..de84a03e --- /dev/null +++ b/ui/src/components/users/ExternalAuthsList.svelte @@ -0,0 +1,80 @@ + + +{#if isLoading} +
+ +
+{:else if user?.id && externalAuths.length} +
+ {#each externalAuths as auth} +
+ + {CommonHelper.sentenize(auth.provider, false)} +
ID: {auth.providerId}
+ +
+ {/each} +
+{:else} +

No authorized OAuth2 providers.

+{/if} diff --git a/ui/src/components/users/PageUsers.svelte b/ui/src/components/users/PageUsers.svelte index ca8331c9..ed4fcb7c 100644 --- a/ui/src/components/users/PageUsers.svelte +++ b/ui/src/components/users/PageUsers.svelte @@ -199,17 +199,19 @@
{#if user.email} {user.email} + + {user.verified ? "Verified" : "Unverified"} + {:else}
N/A
+ {#if user.verified} + OAuth2 verified + {/if} {/if} - - - {user.verified ? "Verified" : "Unverified"} -
diff --git a/ui/src/components/users/UserSelectOption.svelte b/ui/src/components/users/UserSelectOption.svelte index 1af87eb3..69eb713b 100644 --- a/ui/src/components/users/UserSelectOption.svelte +++ b/ui/src/components/users/UserSelectOption.svelte @@ -11,5 +11,7 @@
{item.id}
- {item.email} + {#if item.email} + {item.email} + {/if}
diff --git a/ui/src/components/users/UserUpsertPanel.svelte b/ui/src/components/users/UserUpsertPanel.svelte index 24b93ce2..c04728d4 100644 --- a/ui/src/components/users/UserUpsertPanel.svelte +++ b/ui/src/components/users/UserUpsertPanel.svelte @@ -11,9 +11,13 @@ import Field from "@/components/base/Field.svelte"; import Toggler from "@/components/base/Toggler.svelte"; import OverlayPanel from "@/components/base/OverlayPanel.svelte"; + import ExternalAuthsList from "./ExternalAuthsList.svelte"; const dispatch = createEventDispatcher(); + const formId = "user_" + CommonHelper.randomString(5); + const accountTab = "account"; + const providersTab = "providers"; let panel; let user = new User(); @@ -24,6 +28,7 @@ let passwordConfirm = ""; let changePasswordToggle = false; let verificationEmailToggle = true; + let activeTab = accountTab; $: hasChanges = (user.isNew && email != "") || changePasswordToggle || email !== user.email; @@ -41,7 +46,9 @@ function load(model) { setErrors({}); // reset errors + user = model?.clone ? model.clone() : new User(); + reset(); // reset form } @@ -75,6 +82,8 @@ request .then(async (result) => { + user = result; + if (verificationEmailToggle) { sendVerificationEmail(false); } @@ -114,7 +123,7 @@ function sendVerificationEmail(notify = true) { return ApiClient.users - .requestVerification(user.isNew ? email : user.email) + .requestVerification(user.email || email) .then(() => { confirmClose = false; hide(); @@ -130,8 +139,8 @@ { if (hasChanges && confirmClose) { confirm("You have unsaved changes. Do you really want to close the panel?", () => { @@ -146,95 +155,15 @@ on:show > -

- {user.isNew ? "New user" : "Edit user"} -

-
- -
- {#if !user.isNew} - - - - - {/if} - - - - {#if user.verified} -
- -
- {/if} - -
+

{user.isNew ? "New user" : "Edit user"}

{#if !user.isNew} - - - - - {/if} - - {#if user.isNew || changePasswordToggle} -
-
-
- - - - -
-
- - - - -
-
-
- {/if} - - {#if user.isNew} - - - - - {/if} - - - - {#if !user.isNew} - -
{/if} + +
+ {#if !user.isNew} +
+ + +
+ {/if} +
+
+
+ {#if !user.isNew} + + + + + {/if} + + + + {#if user.verified && user.email} +
+ +
+ {/if} + +
+ + {#if !user.isNew && user.email} + + + + + {/if} + + {#if user.isNew || !user.email || changePasswordToggle} +
+
+
+ + + + +
+
+ + + + +
+
+
+ {/if} + + {#if user.isNew || !user.email} + + + + + {/if} + +
+ + {#if !user.isNew} +
+ +
+ {/if} +
+
+ + - + + {#if activeTab === accountTab} + + {/if} diff --git a/ui/src/scss/_form.scss b/ui/src/scss/_form.scss index 37125ac2..45fbcdc4 100644 --- a/ui/src/scss/_form.scss +++ b/ui/src/scss/_form.scss @@ -229,7 +229,7 @@ button { padding: 0; gap: 0; i { - $iconSize: 23px; + $iconSize: 24px; font-size: 1.2857rem; text-align: center; width: $iconSize;