From ca8c5c49077e16a7489bb7893c8eb702f502f3f4 Mon Sep 17 00:00:00 2001 From: Fabien O'Carroll Date: Mon, 15 Apr 2019 12:26:51 +0200 Subject: [PATCH] Removed app permissions module and updated loader no-issue The permissions module is no longer necessary as we only suppot internal apps, which have all permissions. This allowed us to delete the module, but required that we update the loader to remove references to it. --- core/server/services/apps/loader.js | 27 +++++------- core/server/services/apps/permissions.js | 56 ------------------------ core/server/services/apps/proxy.js | 4 -- 3 files changed, 10 insertions(+), 77 deletions(-) delete mode 100644 core/server/services/apps/permissions.js diff --git a/core/server/services/apps/loader.js b/core/server/services/apps/loader.js index 68bb10d540..144ef800ab 100644 --- a/core/server/services/apps/loader.js +++ b/core/server/services/apps/loader.js @@ -5,7 +5,6 @@ const config = require('../../config'); const common = require('../../lib/common'); const AppProxy = require('./proxy'); const Sandbox = require('./sandbox'); -const AppPermissions = require('./permissions'); // Get the full path to an app by name function getAppAbsolutePath(name) { @@ -29,13 +28,11 @@ function loadApp(appPath) { return Sandbox.loadApp(appPath); } -function getAppByName(name, permissions) { +function getAppByName(name) { // Grab the app class to instantiate const AppClass = loadApp(getAppRelativePath(name)); const proxy = new AppProxy({ - name, - permissions, - internal: true + name }); // Check for an actual class, otherwise just use whatever was returned @@ -50,19 +47,15 @@ function getAppByName(name, permissions) { module.exports = { // Activate a app and return it activateAppByName: function (name) { - const perms = new AppPermissions(getAppAbsolutePath(name)); + const {app, proxy} = getAppByName(name); - return perms.read().then(function (appPerms) { - const {app, proxy} = getAppByName(name, appPerms); + // Check for an activate() method on the app. + if (!_.isFunction(app.activate)) { + return Promise.reject(new Error(common.i18n.t('errors.apps.noActivateMethodLoadingApp.error', {name: name}))); + } - // Check for an activate() method on the app. - if (!_.isFunction(app.activate)) { - return Promise.reject(new Error(common.i18n.t('errors.apps.noActivateMethodLoadingApp.error', {name: name}))); - } - - // Wrapping the activate() with a when because it's possible - // to not return a promise from it. - return Promise.resolve(app.activate(proxy)).return(app); - }); + // Wrapping the activate() with a when because it's possible + // to not return a promise from it. + return Promise.resolve(app.activate(proxy)).return(app); } }; diff --git a/core/server/services/apps/permissions.js b/core/server/services/apps/permissions.js deleted file mode 100644 index b299616726..0000000000 --- a/core/server/services/apps/permissions.js +++ /dev/null @@ -1,56 +0,0 @@ -const fs = require('fs-extra'); -const Promise = require('bluebird'); -const path = require('path'); -const packageJSON = require('../../lib/fs/package-json'); - -function AppPermissions(appPath) { - this.appPath = appPath; - this.packagePath = path.join(this.appPath, 'package.json'); -} - -AppPermissions.prototype.read = function () { - var self = this; - - return this.checkPackageContentsExists().then(function (exists) { - if (!exists) { - // If no package.json, return default permissions - return Promise.resolve(AppPermissions.DefaultPermissions); - } - - // Read and parse the package.json - return self.getPackageContents().then(function (parsed) { - // If no permissions in the package.json then return the default permissions. - if (!(parsed.ghost && parsed.ghost.permissions)) { - return Promise.resolve(AppPermissions.DefaultPermissions); - } - - // TODO: Validation on permissions object? - - return Promise.resolve(parsed.ghost.permissions); - }); - }); -}; - -AppPermissions.prototype.checkPackageContentsExists = function () { - var self = this; - - // Mostly just broken out for stubbing in unit tests - return new Promise(function (resolve) { - fs.stat(self.packagePath, function (err) { - var exists = !err; - resolve(exists); - }); - }); -}; - -// Get the contents of the package.json in the appPath root -AppPermissions.prototype.getPackageContents = function () { - return packageJSON.parse(this.packagePath); -}; - -// Default permissions for an App. -AppPermissions.DefaultPermissions = { - posts: ['browse', 'read'] -}; - -module.exports = AppPermissions; diff --git a/core/server/services/apps/proxy.js b/core/server/services/apps/proxy.js index 409e6e6775..f5de644d3c 100644 --- a/core/server/services/apps/proxy.js +++ b/core/server/services/apps/proxy.js @@ -79,10 +79,6 @@ function AppProxy(options) { throw new Error(common.i18n.t('errors.apps.mustProvideAppName.error')); } - if (!options.permissions) { - throw new Error(common.i18n.t('errors.apps.mustProvideAppPermissions.error')); - } - _.extend(this, generateProxyFunctions(options.name)); }