mirror of
https://github.com/nextcloud/server.git
synced 2026-04-15 22:11:17 -04:00
fix(files_sharing): ensure the server share API errors are shown
- fix https://github.com/nextcloud/server/issues/58359 To reproduce: 1. Setup password policy. 2. Try to set a share password like `1234` 3. See that no visual error message is show but only in the console Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
This commit is contained in:
parent
ea9e2bb161
commit
e73e990ed2
3 changed files with 106 additions and 323 deletions
|
|
@ -3,16 +3,13 @@
|
|||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
|
||||
import axios from '@nextcloud/axios'
|
||||
import axios, { isAxiosError } from '@nextcloud/axios'
|
||||
import { showError } from '@nextcloud/dialogs'
|
||||
import { emit } from '@nextcloud/event-bus'
|
||||
import { generateOcsUrl } from '@nextcloud/router'
|
||||
import Share from '../models/Share.ts'
|
||||
import logger from '../services/logger.ts'
|
||||
|
||||
// TODO: remove when ie not supported
|
||||
import 'url-search-params-polyfill'
|
||||
|
||||
const shareUrl = generateOcsUrl('apps/files_sharing/api/v1/shares')
|
||||
|
||||
export default {
|
||||
|
|
@ -45,13 +42,9 @@ export default {
|
|||
emit('files_sharing:share:created', { share })
|
||||
return share
|
||||
} catch (error) {
|
||||
logger.error('Error while creating share', { error })
|
||||
const errorMessage = error?.response?.data?.ocs?.meta?.message
|
||||
showError(
|
||||
errorMessage ? t('files_sharing', 'Error creating the share: {errorMessage}', { errorMessage }) : t('files_sharing', 'Error creating the share'),
|
||||
{ type: 'error' },
|
||||
)
|
||||
throw error
|
||||
const errorMessage = getErrorMessage(error) ?? t('files_sharing', 'Error creating the share')
|
||||
showError(errorMessage)
|
||||
throw new Error(errorMessage, { cause: error })
|
||||
}
|
||||
},
|
||||
|
||||
|
|
@ -70,13 +63,9 @@ export default {
|
|||
emit('files_sharing:share:deleted', { id })
|
||||
return true
|
||||
} catch (error) {
|
||||
logger.error('Error while deleting share', { error })
|
||||
const errorMessage = error?.response?.data?.ocs?.meta?.message
|
||||
OC.Notification.showTemporary(
|
||||
errorMessage ? t('files_sharing', 'Error deleting the share: {errorMessage}', { errorMessage }) : t('files_sharing', 'Error deleting the share'),
|
||||
{ type: 'error' },
|
||||
)
|
||||
throw error
|
||||
const errorMessage = getErrorMessage(error) ?? t('files_sharing', 'Error deleting the share')
|
||||
showError(errorMessage)
|
||||
throw new Error(errorMessage, { cause: error })
|
||||
}
|
||||
},
|
||||
|
||||
|
|
@ -97,16 +86,26 @@ export default {
|
|||
}
|
||||
} catch (error) {
|
||||
logger.error('Error while updating share', { error })
|
||||
if (error.response.status !== 400) {
|
||||
const errorMessage = error?.response?.data?.ocs?.meta?.message
|
||||
OC.Notification.showTemporary(
|
||||
errorMessage ? t('files_sharing', 'Error updating the share: {errorMessage}', { errorMessage }) : t('files_sharing', 'Error updating the share'),
|
||||
{ type: 'error' },
|
||||
)
|
||||
}
|
||||
const message = error.response.data.ocs.meta.message
|
||||
throw new Error(message)
|
||||
const errorMessage = getErrorMessage(error) ?? t('files_sharing', 'Error updating the share')
|
||||
// the error will be shown in apps/files_sharing/src/mixins/SharesMixin.js
|
||||
throw new Error(errorMessage, { cause: error })
|
||||
}
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle an error response from the server and show a notification with the error message if possible
|
||||
*
|
||||
* @param {unknown} error - The received error
|
||||
* @return {string|undefined} the error message if it could be extracted from the response, otherwise undefined
|
||||
*/
|
||||
function getErrorMessage(error) {
|
||||
if (isAxiosError(error) && error.response.data?.ocs) {
|
||||
/** @type {import('@nextcloud/typings/ocs').OCSResponse} */
|
||||
const response = error.response.data
|
||||
if (response.ocs.meta?.message) {
|
||||
return response.ocs.meta.message
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
375
build/frontend-legacy/package-lock.json
generated
375
build/frontend-legacy/package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
|
@ -79,7 +79,6 @@
|
|||
"regenerator-runtime": "^0.14.1",
|
||||
"throttle-debounce": "^5.0.2",
|
||||
"underscore": "1.13.7",
|
||||
"url-search-params-polyfill": "^8.2.5",
|
||||
"v-click-outside": "^3.2.0",
|
||||
"v-tooltip": "^2.1.3",
|
||||
"vue": "^2.7.16",
|
||||
|
|
|
|||
Loading…
Reference in a new issue