From 4af7e83cdc5034916f06070e618094c6cb97e5ce Mon Sep 17 00:00:00 2001 From: Nikolai Onken Date: Mon, 25 Apr 2016 15:35:59 +0200 Subject: [PATCH] Revert "Vfs fix extend" --- configs/client-default.js | 5 ++++ package.json | 10 +++---- plugins/c9.ide.plugins/loader.js | 4 +-- plugins/c9.ide.ui/codebox.js | 3 +- plugins/c9.vfs.client/vfs.log.js | 2 -- plugins/c9.vfs.client/vfs.ping.js | 18 +++++------- .../c9.vfs.server/vfs.connect.standalone.js | 1 + plugins/c9.vfs.server/vfs.js | 3 ++ plugins/c9.vfs.server/vfs_wrapper.js | 29 +++++++------------ plugins/c9.vfs.standalone/standalone.js | 2 +- 10 files changed, 37 insertions(+), 40 deletions(-) diff --git a/configs/client-default.js b/configs/client-default.js index f532d9e7..50593d86 100644 --- a/configs/client-default.js +++ b/configs/client-default.js @@ -35,6 +35,8 @@ module.exports = function(options) { var devel = options.standalone && !options.local || options.mode === "devel" || options.mode == "onlinedev" || options.dev; var localExtendFiles = options.localExtend || options.standalone; + // allow extend code access only to C9-deveoped plugins + var extendToken = options.extendToken || "token"; var plugins = [ // C9 @@ -410,6 +412,7 @@ module.exports = function(options) { "plugins/c9.ide.language.go/go", { packagePath: "plugins/c9.ide.language.jsonalyzer/jsonalyzer", + extendToken: extendToken, workspaceDir: workspaceDir, homeDir: options.home, bashBin: options.bashBin, @@ -784,6 +787,7 @@ module.exports = function(options) { }, { packagePath: "plugins/c9.ide.pubsub/pubsub-client", + extendToken: extendToken }, { packagePath: "plugins/c9.ide.collab/notifications/bubble", @@ -864,6 +868,7 @@ module.exports = function(options) { plugins.push( { packagePath: "plugins/c9.ide.collab/connect", + extendToken: extendToken, enable: collab, debug: debug, localServerFile: localExtendFiles, diff --git a/package.json b/package.json index 98538f18..d6ec6adf 100644 --- a/package.json +++ b/package.json @@ -65,9 +65,9 @@ "c9.ide.language.javascript.eslint": "#4de5457db1", "c9.ide.language.javascript.tern": "#b55d0069bb", "c9.ide.language.javascript.infer": "#18acb93a3a", - "c9.ide.language.jsonalyzer": "#23457a0bf6", + "c9.ide.language.jsonalyzer": "#724bf6919d", "c9.ide.language.codeintel": "#253ae15f5e", - "c9.ide.collab": "#763cbbfe3f", + "c9.ide.collab": "#b05e428616", "c9.ide.local": "#10eb45842a", "c9.ide.find": "#e33fbaed2f", "c9.ide.find.infiles": "#c0a13737ef", @@ -90,17 +90,17 @@ "c9.ide.help.support": "#932fbb3743", "c9.ide.imgeditor": "#612e75ef4f", "c9.ide.immediate": "#19758abe08", - "c9.ide.installer": "#4ec5341876", + "c9.ide.installer": "#462c535ff0", "c9.ide.language.python": "#330b80e3b2", "c9.ide.language.go": "#6ce1c7a7ef", "c9.ide.mount": "#4c39359b87", - "c9.ide.navigate": "#3941d604b9", + "c9.ide.navigate": "#113b38a061", "c9.ide.newresource": "#981a408a7b", "c9.ide.openfiles": "#2ae85a9e33", "c9.ide.preview": "#5f5fff0185", "c9.ide.preview.browser": "#897177be7f", "c9.ide.preview.markdown": "#c3174d86e0", - "c9.ide.pubsub": "#b20bdfb12a", + "c9.ide.pubsub": "#b19163ae34", "c9.ide.readonly": "#719881e192", "c9.ide.recentfiles": "#7c099abf40", "c9.ide.remote": "#301d2ab519", diff --git a/plugins/c9.ide.plugins/loader.js b/plugins/c9.ide.plugins/loader.js index e025d3b9..7ce2afb4 100644 --- a/plugins/c9.ide.plugins/loader.js +++ b/plugins/c9.ide.plugins/loader.js @@ -92,9 +92,9 @@ define(function(require, exports, module) { delete extraPackages[config.packagePath]; } }); - Object.keys(extraPackages).forEach(function(packagePath) { + Object.keys(extraPackages).forEach(function(extraConfig) { console.warn("[c9.ide.loader] Package " - + packagePath + " should be installed, according " + + extraConfig.packagePath + " should be installed, according " + "to the database, but was not found on the filesystem. " + "Try reinstalling it."); }); diff --git a/plugins/c9.ide.ui/codebox.js b/plugins/c9.ide.ui/codebox.js index 18eca48b..504a0aab 100644 --- a/plugins/c9.ide.ui/codebox.js +++ b/plugins/c9.ide.ui/codebox.js @@ -91,13 +91,11 @@ apf.codebox = function(struct, tagName) { var checkInitial = function() { var value = ace.getValue(); if (value && ace.renderer.initialMessageNode) { - ace.renderer.off("afterRender", checkInitial); dom.removeCssClass(ace.container, "ace_initialMsg"); ace.renderer.scroller.removeChild(ace.renderer.initialMessageNode); ace.renderer.initialMessageNode = null; } else if (!value && !ace.renderer.initialMessageNode) { - ace.renderer.on("afterRender", checkInitial); dom.addCssClass(ace.container, "ace_initialMsg"); var el = document.createElement("div"); el.className = "tb_textboxInitialMsg"; @@ -105,6 +103,7 @@ apf.codebox = function(struct, tagName) { ace.renderer.initialMessageNode = el; ace.renderer.scroller.appendChild(ace.renderer.initialMessageNode); } + }; ace.on("input", checkInitial); diff --git a/plugins/c9.vfs.client/vfs.log.js b/plugins/c9.vfs.client/vfs.log.js index 5ab2d214..3d3c453a 100644 --- a/plugins/c9.vfs.client/vfs.log.js +++ b/plugins/c9.vfs.client/vfs.log.js @@ -20,8 +20,6 @@ define(function (require, exports, module) { if (loaded) return false; loaded = true; - if (c9.readonly) return false; - ext.loadRemotePlugin("log", { code: require("text!./log-service.js"), redefine: true diff --git a/plugins/c9.vfs.client/vfs.ping.js b/plugins/c9.vfs.client/vfs.ping.js index 4e02ade7..fcebcf6e 100644 --- a/plugins/c9.vfs.client/vfs.ping.js +++ b/plugins/c9.vfs.client/vfs.ping.js @@ -1,7 +1,7 @@ define(function(require, exports, module) { "use strict"; - main.consumes = ["Plugin", "ext", "c9", "vfs"]; + main.consumes = ["Plugin", "ext", "c9", "vfs", "metrics"]; main.provides = ["vfs.ping"]; return main; @@ -9,6 +9,7 @@ define(function(require, exports, module) { var Plugin = imports.Plugin; var c9 = imports.c9; var ext = imports.ext; + var metrics = imports.metrics; /***** Initialization *****/ @@ -16,18 +17,15 @@ define(function(require, exports, module) { var api; var loaded = false; - function load(oldVfs) { - if (loaded && !oldVfs) return; + function load(){ + if (loaded) return; loaded = true; - + ext.loadRemotePlugin("ping", { - file: oldVfs ? undefined : "c9.vfs.client/ping-service.js", - code: oldVfs ? require("text!./ping-service.js") : undefined + code: require("text!./ping-service.js"), + redefine: true }, function(err, remote) { - if (!remote && !oldVfs) - return load(true); - - if (!remote) + if (err) return console.error(err); api = remote; diff --git a/plugins/c9.vfs.server/vfs.connect.standalone.js b/plugins/c9.vfs.server/vfs.connect.standalone.js index 51096d8a..82807063 100644 --- a/plugins/c9.vfs.server/vfs.connect.standalone.js +++ b/plugins/c9.vfs.server/vfs.connect.standalone.js @@ -56,6 +56,7 @@ define(function(require, exports, module) { projectDir: vfsOptions.projectDir, extendDirectory: options.extendDirectory, extendOptions: projectOptions.extendOptions, + extendToken: "not_needed", collab: options.collab, vfsOptions: vfsOptions, public: true diff --git a/plugins/c9.vfs.server/vfs.js b/plugins/c9.vfs.server/vfs.js index 8cf16b1e..8a6107cf 100644 --- a/plugins/c9.vfs.server/vfs.js +++ b/plugins/c9.vfs.server/vfs.js @@ -24,6 +24,7 @@ function Vfs(vfs, master, options) { this.public = options.public || false; this.vfsOptions = options.vfsOptions || {}; this.pid = this.vfsOptions.pid; + var extendToken = options.extendToken; this.homeDir = options.homeDir; this.workspaceDir = options.projectDir; @@ -35,12 +36,14 @@ function Vfs(vfs, master, options) { blocked: this.readonly, extendDirectory: options.extendDirectory, extendOptions: options.extendOptions, + extendToken: extendToken }); this.vfsWorkspace = wrapVfs(vfs, { root: this.workspaceDir, readonly: this.readonly, extendDirectory: options.extendDirectory, extendOptions: options.extendOptions, + extendToken: extendToken }); var vfsProxy = proxyVfs(Object.keys(this.vfsHome), this.vfsHome, this.vfsWorkspace); diff --git a/plugins/c9.vfs.server/vfs_wrapper.js b/plugins/c9.vfs.server/vfs_wrapper.js index 1b4182c3..8fe1192a 100644 --- a/plugins/c9.vfs.server/vfs_wrapper.js +++ b/plugins/c9.vfs.server/vfs_wrapper.js @@ -8,6 +8,7 @@ module.exports = function(vfs, options) { var methods = options.methods || Object.keys(vfs); var readonly = "readonly" in options ? options.readonly : false; var blocked = !!options.blocked; + var extendToken = options.extendToken; var roMethods = { resolve: 1, @@ -73,26 +74,18 @@ module.exports = function(vfs, options) { options[key] = extendOptions[key]; } - if (readonly) { - var whitelist = { - "c9.ide.collab/server/collab-server.js": true, - "c9.ide.pubsub/pubsub-service.js": true, - "c9.vfs.client/ping-service.js": true, - }; - if (!options.file || !whitelist[options.file]) - return callback(new error.Forbidden("VFS extend: " + name + " is not authorized in read only mode")); - } - - // localfs extend checks for file, then code, then stream - if (!options.file) { - if (options.code || options.stream) + if (options.code || options.stream) { + if (readonly && (!extendToken || extendToken !== options.extendToken)) + return callback(new error.Forbidden("VFS extend: " + name + " with options 'stream' or 'code' not authorized in read only mode")); + else return vfs.extend(name, options, callback); - - return callback(new error.Forbidden("Option 'file' is missing")); } - - if (typeof options.file != "string") - return callback(new error.Forbidden("Invalid option 'file'")); + + if (!options.file) + return callback(new error.Forbidden("Option 'file' is missing")); + + if (typeof options.file != "string") + return callback(new error.Forbidden("Invalid option 'file'")); if (extendDirectory) { var file = options.file = path.normalize(path.join(extendDirectory, options.file)); diff --git a/plugins/c9.vfs.standalone/standalone.js b/plugins/c9.vfs.standalone/standalone.js index 8da836c9..7470c8ab 100644 --- a/plugins/c9.vfs.standalone/standalone.js +++ b/plugins/c9.vfs.standalone/standalone.js @@ -255,7 +255,7 @@ function plugin(options, imports, register) { }; api.updatConfig = api.updatConfig || function(opts, params) { var id = params.token; - opts.accessToken = id || "token"; + opts.accessToken = opts.extendToken = id || "token"; var user = opts.extendOptions.user; user.id = id || -1; user.name = id ? "user" + id : "johndoe";