John Molakvoæ
2 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with
38 additions and
6 deletions
-
apps/files/lib/Controller/ViewController.php
-
apps/files/src/components/FileEntry.vue
-
apps/files/src/components/NavigationQuota.vue
-
apps/files/tests/Controller/ViewControllerTest.php
-
config/config.sample.php
-
dist/files-main.js
-
dist/files-main.js.map
|
|
|
@ -52,6 +52,7 @@ use OCP\AppFramework\Http\Response; |
|
|
|
use OCP\AppFramework\Http\TemplateResponse; |
|
|
|
use OCP\AppFramework\Services\IInitialState; |
|
|
|
use OCP\Collaboration\Resources\LoadAdditionalScriptsEvent as ResourcesLoadAdditionalScriptsEvent; |
|
|
|
use OCP\Constants; |
|
|
|
use OCP\EventDispatcher\IEventDispatcher; |
|
|
|
use OCP\Files\Folder; |
|
|
|
use OCP\Files\IRootFolder; |
|
|
|
@ -246,6 +247,11 @@ class ViewController extends Controller { |
|
|
|
$filesSortingConfig = json_decode($this->config->getUserValue($userId, 'files', 'files_sorting_configs', '{}'), true); |
|
|
|
$this->initialState->provideInitialState('filesSortingConfig', $filesSortingConfig); |
|
|
|
|
|
|
|
// Forbidden file characters
|
|
|
|
/** @var string[] */ |
|
|
|
$forbiddenCharacters = $this->config->getSystemValue('forbidden_chars', []); |
|
|
|
$this->initialState->provideInitialState('forbiddenCharacters', Constants::FILENAME_INVALID_CHARS . implode('', $forbiddenCharacters)); |
|
|
|
|
|
|
|
$event = new LoadAdditionalScriptsEvent(); |
|
|
|
$this->eventDispatcher->dispatchTyped($event); |
|
|
|
$this->eventDispatcher->dispatchTyped(new ResourcesLoadAdditionalScriptsEvent()); |
|
|
|
|
|
|
|
@ -232,12 +232,15 @@ import CustomElementRender from './CustomElementRender.vue' |
|
|
|
import CustomSvgIconRender from './CustomSvgIconRender.vue' |
|
|
|
import FavoriteIcon from './FavoriteIcon.vue' |
|
|
|
import logger from '../logger.js' |
|
|
|
import { loadState } from '@nextcloud/initial-state' |
|
|
|
|
|
|
|
// The registered actions list |
|
|
|
const actions = getFileActions() |
|
|
|
|
|
|
|
Vue.directive('onClickOutside', vOnClickOutside) |
|
|
|
|
|
|
|
const forbiddenCharacters = loadState('files', 'forbiddenCharacters', '') as string |
|
|
|
|
|
|
|
export default Vue.extend({ |
|
|
|
name: 'FileEntry', |
|
|
|
|
|
|
|
@ -810,6 +813,13 @@ export default Vue.extend({ |
|
|
|
throw new Error(this.t('files', '{newName} already exists.', { newName: name })) |
|
|
|
} |
|
|
|
|
|
|
|
const toCheck = trimmedName.split('') |
|
|
|
toCheck.forEach(char => { |
|
|
|
if (forbiddenCharacters.indexOf(char) !== -1) { |
|
|
|
throw new Error(this.t('files', '"{char}" is not allowed inside a file name.', { char })) |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
return true |
|
|
|
}, |
|
|
|
checkIfNodeExists(name) { |
|
|
|
|
|
|
|
@ -51,8 +51,8 @@ export default { |
|
|
|
|
|
|
|
computed: { |
|
|
|
storageStatsTitle() { |
|
|
|
const usedQuotaByte = formatFileSize(this.storageStats?.used) |
|
|
|
const quotaByte = formatFileSize(this.storageStats?.quota) |
|
|
|
const usedQuotaByte = formatFileSize(this.storageStats?.used, false, false) |
|
|
|
const quotaByte = formatFileSize(this.storageStats?.quota, false, false) |
|
|
|
|
|
|
|
// If no quota set |
|
|
|
if (this.storageStats?.quota < 0) { |
|
|
|
|
|
|
|
@ -51,7 +51,6 @@ use OCP\IURLGenerator; |
|
|
|
use OCP\IUser; |
|
|
|
use OCP\IUserSession; |
|
|
|
use OCP\Share\IManager; |
|
|
|
use OCP\Template; |
|
|
|
use Test\TestCase; |
|
|
|
|
|
|
|
/** |
|
|
|
@ -153,6 +152,12 @@ class ViewControllerTest extends TestCase { |
|
|
|
'owner' => 'MyName', |
|
|
|
'ownerDisplayName' => 'MyDisplayName', |
|
|
|
]); |
|
|
|
|
|
|
|
$this->config |
|
|
|
->expects($this->any()) |
|
|
|
->method('getSystemValue') |
|
|
|
->with('forbidden_chars', []) |
|
|
|
->willReturn([]); |
|
|
|
$this->config |
|
|
|
->method('getUserValue') |
|
|
|
->willReturnMap([ |
|
|
|
|
|
|
|
@ -1933,6 +1933,17 @@ $CONFIG = [ |
|
|
|
*/ |
|
|
|
'blacklisted_files' => ['.htaccess'], |
|
|
|
|
|
|
|
/** |
|
|
|
* Blacklist characters from being used in filenames. This is useful if you |
|
|
|
* have a filesystem or OS which does not support certain characters like windows. |
|
|
|
* |
|
|
|
* Example for windows systems: ``array('?', '<', '>', ':', '*', '|', '"', chr(0), "\n", "\r")`` |
|
|
|
* see https://en.wikipedia.org/wiki/Comparison_of_file_systems#Limits
|
|
|
|
* |
|
|
|
* Defaults to ``array()`` |
|
|
|
*/ |
|
|
|
'forbidden_chars' => [], |
|
|
|
|
|
|
|
/** |
|
|
|
* If you are applying a theme to Nextcloud, enter the name of the theme here. |
|
|
|
* The default location for themes is ``nextcloud/themes/``. |
|
|
|
|