From 5f2bc31d2cec22f62981fd0444e2339fdf7cfe44 Mon Sep 17 00:00:00 2001 From: David Disu Date: Wed, 16 Mar 2022 11:28:59 +0100 Subject: [PATCH 1/3] Prevent paste in within ancestor folder --- apps/remix-ide/src/app/files/fileManager.ts | 8 +++++++- apps/remix-ide/src/app/files/remixDProvider.js | 9 +++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/apps/remix-ide/src/app/files/fileManager.ts b/apps/remix-ide/src/app/files/fileManager.ts index 2ad2ea4aa9..da8f97c8b0 100644 --- a/apps/remix-ide/src/app/files/fileManager.ts +++ b/apps/remix-ide/src/app/files/fileManager.ts @@ -272,7 +272,13 @@ class FileManager extends Plugin { await this._handleIsDir(src, `Cannot copy from ${src}. Path is not a directory.`) await this._handleExists(dest, `Cannot paste content into ${dest}. Path does not exist.`) await this._handleIsDir(dest, `Cannot paste content into ${dest}. Path is not directory.`) - await this.inDepthCopy(src, dest) + + const provider = this.fileProviderOf(src) + if (provider.isSubDirectory(src, dest)) { + this.call('notification', 'toast', 'File(s) to paste is an ancestor of the destination folder') + } else { + await this.inDepthCopy(src, dest) + } } catch (e) { throw new Error(e) } diff --git a/apps/remix-ide/src/app/files/remixDProvider.js b/apps/remix-ide/src/app/files/remixDProvider.js index c52055e04f..27e4534263 100644 --- a/apps/remix-ide/src/app/files/remixDProvider.js +++ b/apps/remix-ide/src/app/files/remixDProvider.js @@ -1,5 +1,6 @@ 'use strict' const FileProvider = require('./fileProvider') +const pathModule = require('path') module.exports = class RemixDProvider extends FileProvider { constructor (appManager) { @@ -207,4 +208,12 @@ module.exports = class RemixDProvider extends FileProvider { if (!this._isReady) throw new Error('provider not ready') return await this._appManager.call('remixd', 'isFile', { path: unprefixedpath }) } + + isSubDirectory (parent, child) { + if (!parent) return false + if (parent === child) return true + const relative = pathModule.relative(parent, child) + + return !!relative && relative.split(pathModule.sep)[0] !== '..' + } } From 72c16efa064f2f204983c26c37f56c39d84a6313 Mon Sep 17 00:00:00 2001 From: David Disu Date: Wed, 16 Mar 2022 12:04:21 +0100 Subject: [PATCH 2/3] Remove duplicate tab --- apps/remix-ide/src/app/panels/tab-proxy.js | 9 --------- 1 file changed, 9 deletions(-) diff --git a/apps/remix-ide/src/app/panels/tab-proxy.js b/apps/remix-ide/src/app/panels/tab-proxy.js index c3a897b7d6..bc8a7c4c8f 100644 --- a/apps/remix-ide/src/app/panels/tab-proxy.js +++ b/apps/remix-ide/src/app/panels/tab-proxy.js @@ -190,15 +190,6 @@ export class TabProxy extends Plugin { } renameTab (oldName, newName) { - this.addTab(newName, '', async () => { - await this.fileManager.open(newName) - this.event.emit('openFile', newName) - }, - async () => { - await this.fileManager.closeFile(newName) - this.event.emit('closeFile', newName) - this.emit('closeFile', newName) - }) this.removeTab(oldName) } From 89d35a20238f691b200d02c69f7e27a76f61cae0 Mon Sep 17 00:00:00 2001 From: David Disu Date: Wed, 16 Mar 2022 15:23:39 +0100 Subject: [PATCH 3/3] Move isSubDirectory function to fileProvider class. --- apps/remix-ide/src/app/files/fileProvider.js | 9 +++++++++ apps/remix-ide/src/app/files/remixDProvider.js | 9 --------- apps/remix-ide/src/app/files/workspaceFileProvider.js | 8 -------- 3 files changed, 9 insertions(+), 17 deletions(-) diff --git a/apps/remix-ide/src/app/files/fileProvider.js b/apps/remix-ide/src/app/files/fileProvider.js index 2176bc53b8..61e751ee62 100644 --- a/apps/remix-ide/src/app/files/fileProvider.js +++ b/apps/remix-ide/src/app/files/fileProvider.js @@ -3,6 +3,7 @@ import { CompilerImports } from '@remix-project/core-plugin' const EventManager = require('events') const remixLib = require('@remix-project/remix-lib') +const pathModule = require('path') const Storage = remixLib.Storage class FileProvider { @@ -308,6 +309,14 @@ class FileProvider { _normalizePath (path) { return this.type + path } + + isSubDirectory (parent, child) { + if (!parent) return false + if (parent === child) return true + const relative = pathModule.relative(parent, child) + + return !!relative && relative.split(pathModule.sep)[0] !== '..' + } } module.exports = FileProvider diff --git a/apps/remix-ide/src/app/files/remixDProvider.js b/apps/remix-ide/src/app/files/remixDProvider.js index 27e4534263..c52055e04f 100644 --- a/apps/remix-ide/src/app/files/remixDProvider.js +++ b/apps/remix-ide/src/app/files/remixDProvider.js @@ -1,6 +1,5 @@ 'use strict' const FileProvider = require('./fileProvider') -const pathModule = require('path') module.exports = class RemixDProvider extends FileProvider { constructor (appManager) { @@ -208,12 +207,4 @@ module.exports = class RemixDProvider extends FileProvider { if (!this._isReady) throw new Error('provider not ready') return await this._appManager.call('remixd', 'isFile', { path: unprefixedpath }) } - - isSubDirectory (parent, child) { - if (!parent) return false - if (parent === child) return true - const relative = pathModule.relative(parent, child) - - return !!relative && relative.split(pathModule.sep)[0] !== '..' - } } diff --git a/apps/remix-ide/src/app/files/workspaceFileProvider.js b/apps/remix-ide/src/app/files/workspaceFileProvider.js index 505be72b8c..3fcd635fcf 100644 --- a/apps/remix-ide/src/app/files/workspaceFileProvider.js +++ b/apps/remix-ide/src/app/files/workspaceFileProvider.js @@ -49,14 +49,6 @@ class WorkspaceFileProvider extends FileProvider { return ret } - isSubDirectory (parent, child) { - if (!parent) return false - if (parent === child) return true - const relative = pathModule.relative(parent, child) - - return !!relative && relative.split(pathModule.sep)[0] !== '..' - } - resolveDirectory (path, callback) { super.resolveDirectory(path, (error, files) => { if (error) return callback(error)