Browse Source

fix(files): encoded source path on actions requests

Signed-off-by: John Molakvoæ <skjnldsv@protonmail.com>
John Molakvoæ 7 months ago
parent
commit
d79e26b25a
83 changed files with 29 additions and 28 deletions
  1. 1 1
      apps/files/src/actions/deleteAction.ts
  2. 2 2
      apps/files/src/actions/moveOrCopyAction.ts
  3. 4 3
      apps/files/src/components/FileEntry.vue
  4. 1 1
      apps/files/src/newMenu/newFolder.ts
  5. 1 2
      apps/files/src/services/Files.ts
  6. 1 1
      apps/files_trashbin/src/actions/restoreAction.ts
  7. 1 1
      apps/files_trashbin/src/services/trashbin.ts
  8. 0 0
      dist/5912-5912.js
  9. 0 0
      dist/5912-5912.js.map
  10. 0 0
      dist/comments-comments-app.js
  11. 0 0
      dist/comments-comments-app.js.map
  12. 0 0
      dist/comments-init.js
  13. 0 0
      dist/comments-init.js.map
  14. 0 0
      dist/core-common.js
  15. 0 0
      dist/core-common.js.map
  16. 0 0
      dist/core-login.js
  17. 0 0
      dist/core-login.js.map
  18. 0 0
      dist/core-main.js
  19. 0 0
      dist/core-main.js.map
  20. 0 0
      dist/core-profile.js
  21. 0 0
      dist/core-profile.js.map
  22. 0 0
      dist/core-unified-search.js
  23. 0 0
      dist/core-unified-search.js.map
  24. 0 0
      dist/dav-settings-personal-availability.js
  25. 0 0
      dist/dav-settings-personal-availability.js.map
  26. 0 0
      dist/federatedfilesharing-vue-settings-admin.js
  27. 0 0
      dist/federatedfilesharing-vue-settings-admin.js.map
  28. 0 0
      dist/federatedfilesharing-vue-settings-personal.js
  29. 0 0
      dist/federatedfilesharing-vue-settings-personal.js.map
  30. 0 0
      dist/files-init.js
  31. 0 0
      dist/files-init.js.map
  32. 0 0
      dist/files-main.js
  33. 0 0
      dist/files-main.js.map
  34. 0 0
      dist/files-personal-settings.js
  35. 0 0
      dist/files-personal-settings.js.map
  36. 0 0
      dist/files-reference-files.js
  37. 0 0
      dist/files-reference-files.js.map
  38. 0 0
      dist/files-sidebar.js
  39. 0 0
      dist/files-sidebar.js.map
  40. 0 0
      dist/files_external-init.js
  41. 0 0
      dist/files_external-init.js.map
  42. 0 0
      dist/files_reminders-main.js
  43. 0 0
      dist/files_reminders-main.js.map
  44. 0 0
      dist/files_sharing-files_sharing_tab.js
  45. 0 0
      dist/files_sharing-files_sharing_tab.js.map
  46. 0 0
      dist/files_sharing-init.js
  47. 0 0
      dist/files_sharing-init.js.map
  48. 0 0
      dist/files_sharing-personal-settings.js
  49. 0 0
      dist/files_sharing-personal-settings.js.map
  50. 0 0
      dist/files_trashbin-main.js
  51. 0 0
      dist/files_trashbin-main.js.map
  52. 0 0
      dist/files_versions-files_versions.js
  53. 0 0
      dist/files_versions-files_versions.js.map
  54. 0 0
      dist/settings-vue-settings-admin-basic-settings.js
  55. 0 0
      dist/settings-vue-settings-admin-basic-settings.js.map
  56. 0 0
      dist/settings-vue-settings-admin-delegation.js
  57. 0 0
      dist/settings-vue-settings-admin-delegation.js.map
  58. 0 0
      dist/settings-vue-settings-admin-security.js
  59. 0 0
      dist/settings-vue-settings-admin-security.js.map
  60. 0 0
      dist/settings-vue-settings-apps-users-management.js
  61. 0 0
      dist/settings-vue-settings-apps-users-management.js.map
  62. 0 0
      dist/settings-vue-settings-personal-info.js
  63. 0 0
      dist/settings-vue-settings-personal-info.js.map
  64. 0 0
      dist/settings-vue-settings-personal-password.js
  65. 0 0
      dist/settings-vue-settings-personal-password.js.map
  66. 0 0
      dist/settings-vue-settings-personal-security.js
  67. 0 0
      dist/settings-vue-settings-personal-security.js.map
  68. 0 0
      dist/sharebymail-vue-settings-admin-sharebymail.js
  69. 0 0
      dist/sharebymail-vue-settings-admin-sharebymail.js.map
  70. 0 0
      dist/systemtags-init.js
  71. 0 0
      dist/systemtags-init.js.map
  72. 0 0
      dist/theming-personal-theming.js
  73. 0 0
      dist/theming-personal-theming.js.map
  74. 0 0
      dist/updatenotification-updatenotification.js
  75. 0 0
      dist/updatenotification-updatenotification.js.map
  76. 0 0
      dist/user_status-menu.js
  77. 0 0
      dist/user_status-menu.js.map
  78. 0 0
      dist/weather_status-weather-status.js
  79. 0 0
      dist/weather_status-weather-status.js.map
  80. 0 0
      dist/workflowengine-workflowengine.js
  81. 0 0
      dist/workflowengine-workflowengine.js.map
  82. 17 16
      package-lock.json
  83. 1 1
      package.json

+ 1 - 1
apps/files/src/actions/deleteAction.ts

@@ -44,7 +44,7 @@ export const action = new FileAction({
 
 	async exec(node: Node) {
 		try {
-			await axios.delete(node.source)
+			await axios.delete(node.encodedSource)
 
 			// Let's delete even if it's moved to the trashbin
 			// since it has been removed from the current view

+ 2 - 2
apps/files/src/actions/moveOrCopyAction.ts

@@ -86,7 +86,7 @@ export const handleCopyMoveNodeTo = async (node: Node, destination: Folder, meth
 	}
 
 	const relativePath = join(destination.path, node.basename)
-	const destinationUrl = generateRemoteUrl(`dav/files/${getCurrentUser()?.uid}${relativePath}`)
+	const destinationUrl = generateRemoteUrl(encodePath(`dav/files/${getCurrentUser()?.uid}${relativePath}`))
 	logger.debug(`${method} ${node.basename} to ${destinationUrl}`)
 
 	// Set loading state
@@ -97,7 +97,7 @@ export const handleCopyMoveNodeTo = async (node: Node, destination: Folder, meth
 		try {
 			await axios({
 				method: method === MoveCopyAction.COPY ? 'COPY' : 'MOVE',
-				url: encodeURI(node.source),
+				url: node.encodedSource,
 				headers: {
 					Destination: encodeURI(destinationUrl),
 					Overwrite: overwrite ? undefined : 'F',

+ 4 - 3
apps/files/src/components/FileEntry.vue

@@ -845,7 +845,7 @@ export default Vue.extend({
 		// Rename and move the file
 		async onRename() {
 			const oldName = this.source.basename
-			const oldSource = this.source.source
+			const oldEncodedSource = this.source.encodedSource
 			const newName = this.newName.trim?.() || ''
 			if (newName === '') {
 				showError(this.t('files', 'Name cannot be empty'))
@@ -870,12 +870,13 @@ export default Vue.extend({
 			// Update node
 			this.source.rename(newName)
 
+			logger.debug('Moving file to', { destination: this.source.encodedSource, oldEncodedSource })
 			try {
 				await axios({
 					method: 'MOVE',
-					url: oldSource,
+					url: oldEncodedSource,
 					headers: {
-						Destination: encodeURI(this.source.source),
+						Destination: this.source.encodedSource,
 					},
 				})
 

+ 1 - 1
apps/files/src/newMenu/newFolder.ts

@@ -70,7 +70,7 @@ export const entry = {
 	async handler(context: Folder, content: Node[]) {
 		const contentNames = content.map((node: Node) => node.basename)
 		const name = getUniqueName(t('files', 'New folder'), contentNames)
-		const { fileid, source } = await createNewFolder(context.source, name)
+		const { fileid, source } = await createNewFolder(context.encodedSource, encodeURIComponent(name))
 
 		// Create the folder in the store
 		const folder = new Folder({

+ 1 - 2
apps/files/src/services/Files.ts

@@ -30,7 +30,6 @@ import { getCurrentUser } from '@nextcloud/auth'
 import { getClient, rootPath } from './WebdavClient'
 import { hashCode } from '../utils/hashUtils'
 import logger from '../logger'
-import { encodePath } from '@nextcloud/paths'
 
 const client = getClient()
 
@@ -45,7 +44,7 @@ export const resultToNode = function(node: FileStat): File | Folder {
 	const permissions = davParsePermissions(props?.permissions)
 	const owner = getCurrentUser()?.uid as string
 
-	const source = generateRemoteUrl(encodePath('dav' + rootPath + node.filename))
+	const source = generateRemoteUrl('dav' + rootPath + node.filename)
 	const id = props?.fileid < 0
 		? hashCode(source)
 		: props?.fileid as number || 0

+ 1 - 1
apps/files_trashbin/src/actions/restoreAction.ts

@@ -54,7 +54,7 @@ registerFileAction(new FileAction({
 			const destination = generateRemoteUrl(encodePath(`dav/trashbin/${getCurrentUser()?.uid}/restore/${node.basename}`))
 			await axios({
 				method: 'MOVE',
-				url: node.source,
+				url: node.encodedSource,
 				headers: {
 					destination,
 				},

+ 1 - 1
apps/files_trashbin/src/services/trashbin.ts

@@ -46,7 +46,7 @@ const resultToNode = function(node: FileStat): File | Folder {
 
 	const nodeData = {
 		id: node.props?.fileid as number || 0,
-		source: generateRemoteUrl(encodePath('dav' + rootPath + node.filename)),
+		source: generateRemoteUrl('dav' + rootPath + node.filename),
 		// do not show the mtime column
 		// mtime: new Date(node.lastmod),
 		mime: node.mime as string,

File diff suppressed because it is too large
+ 0 - 0
dist/5912-5912.js


File diff suppressed because it is too large
+ 0 - 0
dist/5912-5912.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/comments-comments-app.js


File diff suppressed because it is too large
+ 0 - 0
dist/comments-comments-app.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/comments-init.js


File diff suppressed because it is too large
+ 0 - 0
dist/comments-init.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/core-common.js


File diff suppressed because it is too large
+ 0 - 0
dist/core-common.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/core-login.js


File diff suppressed because it is too large
+ 0 - 0
dist/core-login.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/core-main.js


File diff suppressed because it is too large
+ 0 - 0
dist/core-main.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/core-profile.js


File diff suppressed because it is too large
+ 0 - 0
dist/core-profile.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/core-unified-search.js


File diff suppressed because it is too large
+ 0 - 0
dist/core-unified-search.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/dav-settings-personal-availability.js


File diff suppressed because it is too large
+ 0 - 0
dist/dav-settings-personal-availability.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/federatedfilesharing-vue-settings-admin.js


File diff suppressed because it is too large
+ 0 - 0
dist/federatedfilesharing-vue-settings-admin.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/federatedfilesharing-vue-settings-personal.js


File diff suppressed because it is too large
+ 0 - 0
dist/federatedfilesharing-vue-settings-personal.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/files-init.js


File diff suppressed because it is too large
+ 0 - 0
dist/files-init.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/files-main.js


File diff suppressed because it is too large
+ 0 - 0
dist/files-main.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/files-personal-settings.js


File diff suppressed because it is too large
+ 0 - 0
dist/files-personal-settings.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/files-reference-files.js


File diff suppressed because it is too large
+ 0 - 0
dist/files-reference-files.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/files-sidebar.js


File diff suppressed because it is too large
+ 0 - 0
dist/files-sidebar.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/files_external-init.js


File diff suppressed because it is too large
+ 0 - 0
dist/files_external-init.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/files_reminders-main.js


File diff suppressed because it is too large
+ 0 - 0
dist/files_reminders-main.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/files_sharing-files_sharing_tab.js


File diff suppressed because it is too large
+ 0 - 0
dist/files_sharing-files_sharing_tab.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/files_sharing-init.js


File diff suppressed because it is too large
+ 0 - 0
dist/files_sharing-init.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/files_sharing-personal-settings.js


File diff suppressed because it is too large
+ 0 - 0
dist/files_sharing-personal-settings.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/files_trashbin-main.js


File diff suppressed because it is too large
+ 0 - 0
dist/files_trashbin-main.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/files_versions-files_versions.js


File diff suppressed because it is too large
+ 0 - 0
dist/files_versions-files_versions.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-admin-basic-settings.js


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-admin-basic-settings.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-admin-delegation.js


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-admin-delegation.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-admin-security.js


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-admin-security.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-apps-users-management.js


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-apps-users-management.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-personal-info.js


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-personal-info.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-personal-password.js


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-personal-password.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-personal-security.js


File diff suppressed because it is too large
+ 0 - 0
dist/settings-vue-settings-personal-security.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/sharebymail-vue-settings-admin-sharebymail.js


File diff suppressed because it is too large
+ 0 - 0
dist/sharebymail-vue-settings-admin-sharebymail.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/systemtags-init.js


File diff suppressed because it is too large
+ 0 - 0
dist/systemtags-init.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/theming-personal-theming.js


File diff suppressed because it is too large
+ 0 - 0
dist/theming-personal-theming.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/updatenotification-updatenotification.js


File diff suppressed because it is too large
+ 0 - 0
dist/updatenotification-updatenotification.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/user_status-menu.js


File diff suppressed because it is too large
+ 0 - 0
dist/user_status-menu.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/weather_status-weather-status.js


File diff suppressed because it is too large
+ 0 - 0
dist/weather_status-weather-status.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/workflowengine-workflowengine.js


File diff suppressed because it is too large
+ 0 - 0
dist/workflowengine-workflowengine.js.map


+ 17 - 16
package-lock.json

@@ -19,7 +19,7 @@
         "@nextcloud/capabilities": "^1.0.4",
         "@nextcloud/dialogs": "^5.0.0-beta.4",
         "@nextcloud/event-bus": "^3.1.0",
-        "@nextcloud/files": "^3.0.0-beta.22",
+        "@nextcloud/files": "^3.0.0-beta.25",
         "@nextcloud/initial-state": "^2.0.0",
         "@nextcloud/l10n": "^2.1.0",
         "@nextcloud/logger": "^2.5.0",
@@ -3396,15 +3396,15 @@
       "integrity": "sha512-rxzuSL2RSt/pWWnFnUFQi5GJArm2tHMhx20Gee3Ydn+xT2bqbR4syfgdPrq2b+j+n5LjC7C8Fb1QDM6LKeF0cA=="
     },
     "node_modules/@nextcloud/auth": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npmjs.org/@nextcloud/auth/-/auth-2.1.0.tgz",
-      "integrity": "sha512-wf5xQrWQu6fkl3MGegVdyR5mh/EdSQKJByH3m2Url2K2xbML9Y4Y7LAff9jjJAcMt2MkzzJEM463ZBbgTqs0lg==",
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/@nextcloud/auth/-/auth-2.2.1.tgz",
+      "integrity": "sha512-zYtgrg9NMZfN8kmL5JPCsh5jDhpTCEslhnZWMvbhTiQ7hrOnji/67ok6VMK0CTJ1a92Vr67Ow72lW7YRX69zEA==",
       "dependencies": {
         "@nextcloud/event-bus": "^3.1.0"
       },
       "engines": {
-        "node": "^16.0.0",
-        "npm": "^7.0.0 || ^8.0.0"
+        "node": "^20.0.0",
+        "npm": "^9.0.0"
       }
     },
     "node_modules/@nextcloud/axios": {
@@ -3662,13 +3662,14 @@
       "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
     },
     "node_modules/@nextcloud/files": {
-      "version": "3.0.0-beta.22",
-      "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-3.0.0-beta.22.tgz",
-      "integrity": "sha512-Y/F3d3sigGJf/2HOTy8PLMgyQnVtMsQVUM+ul7GXgfdMPEVOpQViU9t6K37UjDAVu5v4CvKA++BVKt09KSGxwA==",
+      "version": "3.0.0-beta.25",
+      "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-3.0.0-beta.25.tgz",
+      "integrity": "sha512-Bw0PRxb3P4wAEybhubFWmlnVihDi2CTc/tQXayWvAz3cAUh8zBK2drnhsF7UQgJGJTZ4l2sdBhgXONUwab75kw==",
       "dependencies": {
-        "@nextcloud/auth": "^2.1.0",
+        "@nextcloud/auth": "^2.2.1",
         "@nextcloud/l10n": "^2.2.0",
-        "@nextcloud/logger": "^2.5.0",
+        "@nextcloud/logger": "^2.7.0",
+        "@nextcloud/paths": "^2.1.0",
         "@nextcloud/router": "^2.1.2",
         "is-svg": "^5.0.0",
         "webdav": "^5.3.0"
@@ -3704,16 +3705,16 @@
       }
     },
     "node_modules/@nextcloud/logger": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npmjs.org/@nextcloud/logger/-/logger-2.5.0.tgz",
-      "integrity": "sha512-vJx5YxPyS9/tg3YoqA8CBN7YTZFHfuhMKJIIWFV28phxXqKhGwKVKh+/Ir8ZIPweIM5n8VNT6JOJq1JjGiMg2w==",
+      "version": "2.7.0",
+      "resolved": "https://registry.npmjs.org/@nextcloud/logger/-/logger-2.7.0.tgz",
+      "integrity": "sha512-DSJg9H1jT2zfr7uoP4tL5hKncyY+LOuxJzLauj0M/f6gnpoXU5WG1Zw8EFPOrRWjkC0ZE+NCqrMnITgdRRpXJQ==",
       "dependencies": {
         "@nextcloud/auth": "^2.0.0",
         "core-js": "^3.6.4"
       },
       "engines": {
-        "node": "^16.0.0",
-        "npm": "^7.0.0 || ^8.0.0"
+        "node": "^20.0.0",
+        "npm": "^9.0.0"
       }
     },
     "node_modules/@nextcloud/moment": {

+ 1 - 1
package.json

@@ -46,7 +46,7 @@
     "@nextcloud/capabilities": "^1.0.4",
     "@nextcloud/dialogs": "^5.0.0-beta.4",
     "@nextcloud/event-bus": "^3.1.0",
-    "@nextcloud/files": "^3.0.0-beta.22",
+    "@nextcloud/files": "^3.0.0-beta.25",
     "@nextcloud/initial-state": "^2.0.0",
     "@nextcloud/l10n": "^2.1.0",
     "@nextcloud/logger": "^2.5.0",

Some files were not shown because too many files changed in this diff