Merge pull request #51834 from nextcloud/backport/46418/stable29

[stable29] fix(users): Improve error handling of some fields update
This commit is contained in:
Louis 2025-04-01 15:26:03 +02:00 committed by GitHub
commit 131ccd0dff
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 54 additions and 41 deletions

View file

@ -640,18 +640,21 @@ export default {
*
* @param {string} displayName The display name
*/
updateDisplayName() {
async updateDisplayName() {
this.loading.displayName = true
this.$store.dispatch('setUserData', {
userid: this.user.id,
key: 'displayname',
value: this.editedDisplayName,
}).then(() => {
this.loading.displayName = false
try {
await this.$store.dispatch('setUserData', {
userid: this.user.id,
key: 'displayname',
value: this.editedDisplayName,
})
if (this.editedDisplayName === this.user.displayname) {
showSuccess(t('settings', 'Display name was successfully changed'))
}
})
} finally {
this.loading.displayName = false
}
},
/**
@ -659,21 +662,23 @@ export default {
*
* @param {string} password The email address
*/
updatePassword() {
async updatePassword() {
this.loading.password = true
if (this.editedPassword.length === 0) {
showError(t('settings', "Password can't be empty"))
this.loading.password = false
} else {
this.$store.dispatch('setUserData', {
userid: this.user.id,
key: 'password',
value: this.editedPassword,
}).then(() => {
this.loading.password = false
try {
await this.$store.dispatch('setUserData', {
userid: this.user.id,
key: 'password',
value: this.editedPassword,
})
this.editedPassword = ''
showSuccess(t('settings', 'Password was successfully changed'))
})
} finally {
this.loading.password = false
}
}
},
@ -682,23 +687,26 @@ export default {
*
* @param {string} mailAddress The email address
*/
updateEmail() {
async updateEmail() {
this.loading.mailAddress = true
if (this.editedMail === '') {
showError(t('settings', "Email can't be empty"))
this.loading.mailAddress = false
this.editedMail = this.user.email
} else {
this.$store.dispatch('setUserData', {
userid: this.user.id,
key: 'email',
value: this.editedMail,
}).then(() => {
this.loading.mailAddress = false
try {
await this.$store.dispatch('setUserData', {
userid: this.user.id,
key: 'email',
value: this.editedMail,
})
if (this.editedMail === this.user.email) {
showSuccess(t('settings', 'Email was successfully changed'))
}
})
} finally {
this.loading.mailAddress = false
}
}
},

View file

@ -636,11 +636,14 @@ const actions = {
* @param {string} userid User id
* @return {Promise}
*/
wipeUserDevices(context, userid) {
return api.requireAdmin().then((response) => {
return api.post(generateOcsUrl('cloud/users/{userid}/wipe', { userid }))
.catch((error) => { throw error })
}).catch((error) => context.commit('API_FAILURE', { userid, error }))
async wipeUserDevices(context, userid) {
try {
await api.requireAdmin()
return await api.post(generateOcsUrl('cloud/users/{userid}/wipe', { userid }))
} catch (error) {
context.commit('API_FAILURE', { userid, error })
return Promise.reject(new Error('Failed to wipe user devices'))
}
},
/**
@ -730,7 +733,7 @@ const actions = {
* @param {string} options.value Value of the change
* @return {Promise}
*/
setUserData(context, { userid, key, value }) {
async setUserData(context, { userid, key, value }) {
const allowedEmpty = ['email', 'displayname', 'manager']
if (['email', 'language', 'quota', 'displayname', 'password', 'manager'].indexOf(key) !== -1) {
// We allow empty email or displayname
@ -740,11 +743,13 @@ const actions = {
|| allowedEmpty.indexOf(key) !== -1
)
) {
return api.requireAdmin().then((response) => {
return api.put(generateOcsUrl('cloud/users/{userid}', { userid }), { key, value })
.then((response) => context.commit('setUserData', { userid, key, value }))
.catch((error) => { throw error })
}).catch((error) => context.commit('API_FAILURE', { userid, error }))
try {
await api.requireAdmin()
await api.put(generateOcsUrl('cloud/users/{userid}', { userid }), { key, value })
return context.commit('setUserData', { userid, key, value })
} catch (error) {
context.commit('API_FAILURE', { userid, error })
}
}
}
return Promise.reject(new Error('Invalid request data'))

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long