refactor: added user.email.remove method, updated email interstitial to handle email removal

This commit is contained in:
Julian Lam
2021-07-28 11:41:55 -04:00
parent 414d733d76
commit ccf004f1f4
2 changed files with 38 additions and 22 deletions

View File

@@ -248,23 +248,22 @@ User.addInterstitials = function (callback) {
data: { email },
callback: async (userData, formData) => {
// Validate and send email confirmation
if (formData.email && formData.email.length) {
if (!utils.isEmailValid(formData.email)) {
throw new Error('[[error:invalid-email]]');
}
if (userData.uid) {
const [isAdminOrGlobalMod, canEdit] = await Promise.all([
User.isAdminOrGlobalMod(data.req.uid),
privileges.users.canEdit(data.req.uid, userData.uid),
]);
if (formData.email && formData.email.length) {
if (!utils.isEmailValid(formData.email)) {
throw new Error('[[error:invalid-email]]');
}
if (userData.uid) {
const current = await User.getUserField(userData.uid, 'email');
if (formData.email === current) {
throw new Error('[[error:email-nochange]]');
}
const [isAdminOrGlobalMod, canEdit] = await Promise.all([
User.isAdminOrGlobalMod(data.req.uid),
privileges.users.canEdit(data.req.uid, userData.uid),
]);
// Admins editing will auto-confirm, unless editing their own email
if (isAdminOrGlobalMod && userData.uid !== data.req.uid) {
await User.setUserField(userData.uid, 'email', formData.email);
@@ -279,9 +278,12 @@ User.addInterstitials = function (callback) {
throw new Error('[[error:no-privileges]]');
}
} else {
// New registrants have the confirm email sent from user.create()
userData.email = formData.email;
// User explicitly clearing their email
await User.email.remove(userData.uid);
}
} else {
// New registrants have the confirm email sent from user.create()
userData.email = formData.email;
}
delete userData.updateEmail;