mirror of
https://github.com/nextcloud/server.git
synced 2026-02-27 03:50:37 -05:00
This will enable showing more details what exactly is wrong with the filename. Especially with the new capabilities introduced with Nextcloud 30. Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
41 lines
1.5 KiB
TypeScript
41 lines
1.5 KiB
TypeScript
/*!
|
|
* SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors
|
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
*/
|
|
import { InvalidFilenameError, InvalidFilenameErrorReason, validateFilename } from '@nextcloud/files'
|
|
import { t } from '@nextcloud/l10n'
|
|
|
|
/**
|
|
* Get the validity of a filename (empty if valid).
|
|
* This can be used for `setCustomValidity` on input elements
|
|
* @param name The filename
|
|
* @param escape Escape the matched string in the error (only set when used in HTML)
|
|
*/
|
|
export function getFilenameValidity(name: string, escape = false): string {
|
|
if (name.trim() === '') {
|
|
return t('files', 'Filename must not be empty.')
|
|
}
|
|
|
|
try {
|
|
validateFilename(name)
|
|
return ''
|
|
} catch (error) {
|
|
if (!(error instanceof InvalidFilenameError)) {
|
|
throw error
|
|
}
|
|
|
|
switch (error.reason) {
|
|
case InvalidFilenameErrorReason.Character:
|
|
return t('files', '"{char}" is not allowed inside a filename.', { char: error.segment }, undefined, { escape })
|
|
case InvalidFilenameErrorReason.ReservedName:
|
|
return t('files', '"{segment}" is a reserved name and not allowed for filenames.', { segment: error.segment }, undefined, { escape: false })
|
|
case InvalidFilenameErrorReason.Extension:
|
|
if (error.segment.match(/\.[a-z]/i)) {
|
|
return t('files', '"{extension}" is not an allowed filetype.', { extension: error.segment }, undefined, { escape: false })
|
|
}
|
|
return t('files', 'Filenames must not end with "{extension}".', { extension: error.segment }, undefined, { escape: false })
|
|
default:
|
|
return t('files', 'Invalid filename.')
|
|
}
|
|
}
|
|
}
|