From e0c8b659d8088ce249dffb720ba59ff84aed44ea Mon Sep 17 00:00:00 2001 From: Michael Hackstein Date: Mon, 23 Feb 2015 11:02:13 +0100 Subject: [PATCH] Disallowed mointpoints starting with illegal characters for collection prefixes. Including tests --- .../org/arangodb/foxx/manager-utils.js | 7 ++ .../tests/shell-foxx-manager-install-spec.js | 104 +++++++++++++++++- 2 files changed, 110 insertions(+), 1 deletion(-) diff --git a/js/common/modules/org/arangodb/foxx/manager-utils.js b/js/common/modules/org/arangodb/foxx/manager-utils.js index ad62bcad06..f1bcb044bb 100644 --- a/js/common/modules/org/arangodb/foxx/manager-utils.js +++ b/js/common/modules/org/arangodb/foxx/manager-utils.js @@ -40,6 +40,7 @@ var errors = arangodb.errors; var ArangoError = arangodb.ArangoError; var mountRegEx = /^(\/[a-zA-Z0-9_\-%]+)+$/; var mountAppRegEx = /\/APP(\/|$)/i; +var mountNumberRegEx = /^\/[\d\-%]/; var getStorage = function() { "use strict"; @@ -377,6 +378,12 @@ function validateMount(mount, internal) { errorMessage: "/_ apps are reserved for internal use." }); } + if (mountNumberRegEx.test(mount)) { + throw new ArangoError({ + errorNum: errors.ERROR_INVALID_MOUNTPOINT.code, + errorMessage: "Mointpoints are not allowed to start with a number, - or %." + }); + } if (mountAppRegEx.test(mount)) { throw new ArangoError({ errorNum: errors.ERROR_INVALID_MOUNTPOINT.code, diff --git a/js/common/tests/shell-foxx-manager-install-spec.js b/js/common/tests/shell-foxx-manager-install-spec.js index 7b94253b1e..1c84d25701 100644 --- a/js/common/tests/shell-foxx-manager-install-spec.js +++ b/js/common/tests/shell-foxx-manager-install-spec.js @@ -252,7 +252,6 @@ describe("Foxx Manager install", function() { }); describe("success with", function() { - it("a minimal app", function() { try { FoxxManager.install(fs.join(basePath, "minimal-working-manifest"), "/unittest/broken"); @@ -261,6 +260,109 @@ describe("Foxx Manager install", function() { } FoxxManager.uninstall("/unittest/broken"); }); + }); + + describe("should not install on invalid mountpoint", function() { + + it("starting with _", function() { + var mount = "/_disallowed"; + try { + FoxxManager.install(fs.join(basePath, "minimal-working-manifest"), mount); + expect(true).toBeFalsy("Installed app at invalid mountpoint."); + FoxxManager.uninstall(mount); + } catch(e) { + expect(e.errorNum).toEqual(errors.ERROR_INVALID_MOUNTPOINT.code); + } + }); + + it("starting with %", function() { + var mount = "/%disallowed"; + try { + FoxxManager.install(fs.join(basePath, "minimal-working-manifest"), mount); + expect(true).toBeFalsy("Installed app at invalid mountpoint."); + FoxxManager.uninstall(mount); + } catch(e) { + expect(e.errorNum).toEqual(errors.ERROR_INVALID_MOUNTPOINT.code); + } + }); + + it("starting with a number", function() { + var mount = "/3disallowed"; + try { + FoxxManager.install(fs.join(basePath, "minimal-working-manifest"), mount); + expect(true).toBeFalsy("Installed app at invalid mountpoint."); + FoxxManager.uninstall(mount); + } catch(e) { + expect(e.errorNum).toEqual(errors.ERROR_INVALID_MOUNTPOINT.code); + } + }); + + it("starting with app/", function() { + var mount = "/app"; + try { + FoxxManager.install(fs.join(basePath, "minimal-working-manifest"), mount); + expect(true).toBeFalsy("Installed app at invalid mountpoint."); + FoxxManager.uninstall(mount); + } catch(e) { + expect(e.errorNum).toEqual(errors.ERROR_INVALID_MOUNTPOINT.code); + } + }); + + it("containing /app/", function() { + var mount = "/unittest/app/test"; + try { + FoxxManager.install(fs.join(basePath, "minimal-working-manifest"), mount); + expect(true).toBeFalsy("Installed app at invalid mountpoint."); + FoxxManager.uninstall(mount); + } catch(e) { + expect(e.errorNum).toEqual(errors.ERROR_INVALID_MOUNTPOINT.code); + } + }); + + it("containing a .", function() { + var mount = "/dis.allowed"; + try { + FoxxManager.install(fs.join(basePath, "minimal-working-manifest"), mount); + expect(true).toBeFalsy("Installed app at invalid mountpoint."); + FoxxManager.uninstall(mount); + } catch(e) { + expect(e.errorNum).toEqual(errors.ERROR_INVALID_MOUNTPOINT.code); + } + }); + + it("containing a whitespace", function() { + var mount = "/disal lowed"; + try { + FoxxManager.install(fs.join(basePath, "minimal-working-manifest"), mount); + expect(true).toBeFalsy("Installed app at invalid mountpoint."); + FoxxManager.uninstall(mount); + } catch(e) { + expect(e.errorNum).toEqual(errors.ERROR_INVALID_MOUNTPOINT.code); + } + }); + + it("starting with ?", function() { + var mount = "/disal?lowed"; + try { + FoxxManager.install(fs.join(basePath, "minimal-working-manifest"), mount); + expect(true).toBeFalsy("Installed app at invalid mountpoint."); + FoxxManager.uninstall(mount); + } catch(e) { + expect(e.errorNum).toEqual(errors.ERROR_INVALID_MOUNTPOINT.code); + } + }); + + it("starting with :", function() { + var mount = "/disa:llowed"; + try { + FoxxManager.install(fs.join(basePath, "minimal-working-manifest"), mount); + expect(true).toBeFalsy("Installed app at invalid mountpoint."); + FoxxManager.uninstall(mount); + } catch(e) { + expect(e.errorNum).toEqual(errors.ERROR_INVALID_MOUNTPOINT.code); + } + }); }); + });