From 5422abdf8672149fcf63180deb0e659f2dd6b31c Mon Sep 17 00:00:00 2001 From: joostdecock Date: Sun, 5 Nov 2023 12:43:06 +0100 Subject: [PATCH 1/2] fix(org/backend): Fix issue with email change. Closes #5420 --- sites/backend/src/models/user.mjs | 6 +++++- sites/org/pages/confirm/emailchange.mjs | 22 ++++++++-------------- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/sites/backend/src/models/user.mjs b/sites/backend/src/models/user.mjs index 7be841ec611..ea83405599a 100644 --- a/sites/backend/src/models/user.mjs +++ b/sites/backend/src/models/user.mjs @@ -1432,9 +1432,13 @@ UserModel.prototype.guardedUpdate = async function ({ body, user }) { * Update the email address and ehash */ await this.update({ - email: this.encrypt(data.email.new), + email: data.email.new, ehash: hash(clean(data.email.new)), }) + /* + * Remove the confirmation + */ + await this.Confirmation.delete() } } diff --git a/sites/org/pages/confirm/emailchange.mjs b/sites/org/pages/confirm/emailchange.mjs index 5c97422e4ab..ac1beb2229c 100644 --- a/sites/org/pages/confirm/emailchange.mjs +++ b/sites/org/pages/confirm/emailchange.mjs @@ -23,7 +23,7 @@ const ns = nsMerge(pageNs, 'account', 'susi') const ConfirmSignUpPage = ({ page }) => { // Hooks - const { setAccount, setToken, token } = useAccount() + const { setAccount, token } = useAccount() const backend = useBackend() const { setLoadingStatus } = useContext(LoadingStatusContext) const { t } = useTranslation(ns) @@ -33,6 +33,7 @@ const ConfirmSignUpPage = ({ page }) => { const [error, setError] = useState(false) const [id, setId] = useState() const [check, setCheck] = useState() + const [updated, setUpdated] = useState() useEffect(() => { const newId = getSearchParam('id') @@ -47,30 +48,23 @@ const ConfirmSignUpPage = ({ page }) => { const confirmEmail = async () => { setLoadingStatus([true, 'status:contactingBackend']) const confirmation = await backend.loadConfirmation({ id, check }) - if (confirmation?.result === 'success' && confirmation.confirmation) { + if (confirmation.success && confirmation.data.confirmation) { const result = await backend.updateAccount({ confirm: 'emailchange', - confirmation: confirmation.confirmation.id, - check: confirmation.confirmation.check, + confirmation: confirmation.data.confirmation.id, + check: confirmation.data.confirmation.check, }) - if (result.success) { + if (result.success && !updated) { setLoadingStatus([true, 'status:settingsSaved', true, true]) setAccount(result.data.account) - setToken(result.data.token) setError(false) router.push('/account') - } else { - setLoadingStatus([true, 'status:backendError', true, false]) - setError(true) } - } else { - setLoadingStatus([true, 'status:backendError', true, false]) - setError(true) } } // Call async methods - if (token) confirmEmail() - }, [id, check, token, backend, router, setAccount, setToken]) + if (token && id && check && !updated) confirmEmail() + }, [id, check, backend, router, setAccount]) // Update path with dynamic ID if (!page) return null From 4419e0e5350a9945e9bd25598dec3a31fcc3e5d6 Mon Sep 17 00:00:00 2001 From: joostdecock Date: Sun, 5 Nov 2023 13:02:48 +0100 Subject: [PATCH 2/2] chore(backend): Remove lint --- sites/backend/src/models/user.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sites/backend/src/models/user.mjs b/sites/backend/src/models/user.mjs index ea83405599a..2eec2e853da 100644 --- a/sites/backend/src/models/user.mjs +++ b/sites/backend/src/models/user.mjs @@ -1519,7 +1519,7 @@ UserModel.prototype.guardedMfaUpdate = async function ({ body, user, ip }) { this.clear.data.mfaScratchCodes ) let result, mfaScratchCodes - if (Array.isArray(check)) [result, mfaScratchCodes] = check + if (Array.isArray(check)) [result] = check else result = check if (result) { /* @@ -1557,7 +1557,7 @@ UserModel.prototype.guardedMfaUpdate = async function ({ body, user, ip }) { */ const check = await this.mfa.verify(body.token, this.clear.mfaSecret, false) let result, mfaScratchCodes - if (Array.isArray(check)) [result, mfaScratchCodes] = check + if (Array.isArray(check)) [result] = check else result = check if (body.secret === this.clear.mfaSecret && result) { /*