diff --git a/actinium_modules/@atomic-reactor/actinium-core/middleware/parse/middleware.js b/actinium_modules/@atomic-reactor/actinium-core/middleware/parse/middleware.js index 4db5b0e..7378ecc 100644 --- a/actinium_modules/@atomic-reactor/actinium-core/middleware/parse/middleware.js +++ b/actinium_modules/@atomic-reactor/actinium-core/middleware/parse/middleware.js @@ -10,6 +10,7 @@ const parseConfig = (hook) => { appId: ENV.APP_ID, appName: ENV.APP_NAME, masterKey: ENV.MASTER_KEY, + masterKeyIps: ENV.MASTER_KEY_IPS, enforcePrivateUsers: false, sessionLength: 31536000000, databaseURI: ENV.DATABASE_URI, @@ -20,7 +21,6 @@ const parseConfig = (hook) => { preserveFileName: ENV.PARSE_PRESERVE_FILENAME, publicServerURL: ENV.PUBLIC_SERVER_URI + ENV.PARSE_MOUNT, allowClientClassCreation: ENV.PARSE_ALLOW_CLIENT_CLASS_CREATION, - masterKeyIps: ENV.MASTER_KEY_IPS, maxUploadSize: ENV.MAX_UPLOAD_SIZE, }; @@ -82,6 +82,7 @@ Actinium.Middleware.register('parse', async (app) => { appId, appName, masterKey, + masterKeyIps, sessionLength, serverURL, publicServerURL, @@ -95,6 +96,7 @@ Actinium.Middleware.register('parse', async (app) => { appId, appName, masterKey, + masterKeyIps, sessionLength, serverURL, publicServerURL, @@ -102,15 +104,14 @@ Actinium.Middleware.register('parse', async (app) => { ], }; - Hook.runSync('parse-dashboard-config', dashboardConfig); - const dashboardOptions = { allowInsecureHTTP: ENV.PARSE_DASHBOARD_ALLOW_INSECURE_HTTP, cookieSessionSecret: 'RhbhlE9ze74MALtA2UtqqZzglN2oWgQ0a7jGSZt4sY6eIXeN0yHG7my0dYpA93cl', }; - Hook.runSync('parse-dashboard-config', dashboardOptions); + Hook.runSync('parse-dashboard-config', dashboardConfig); + Hook.runSync('parse-dashboard-config-options', dashboardOptions); const dashboard = new ParseDashboard(dashboardConfig, dashboardOptions); diff --git a/actinium_modules/@atomic-reactor/actinium-core/package.json b/actinium_modules/@atomic-reactor/actinium-core/package.json index eeb3dd0..f94821c 100644 --- a/actinium_modules/@atomic-reactor/actinium-core/package.json +++ b/actinium_modules/@atomic-reactor/actinium-core/package.json @@ -6,7 +6,7 @@ "version": "5.0.0" }, "name": "@atomic-reactor/actinium-core", - "version": "5.1.17", + "version": "5.1.18", "description": "Actinium Core", "main": "actinium.js", "type": "module", diff --git a/actinium_modules/@atomic-reactor/actinium-users/package.json b/actinium_modules/@atomic-reactor/actinium-users/package.json index 62ee82c..ae90e6a 100644 --- a/actinium_modules/@atomic-reactor/actinium-users/package.json +++ b/actinium_modules/@atomic-reactor/actinium-users/package.json @@ -7,7 +7,7 @@ }, "type": "module", "name": "@atomic-reactor/actinium-users", - "version": "5.0.2", + "version": "5.0.4", "description": "Actinium core plugin", "main": "index.js", "scripts": { diff --git a/actinium_modules/@atomic-reactor/actinium-users/plugin.js b/actinium_modules/@atomic-reactor/actinium-users/plugin.js index c1a3652..998e479 100644 --- a/actinium_modules/@atomic-reactor/actinium-users/plugin.js +++ b/actinium_modules/@atomic-reactor/actinium-users/plugin.js @@ -40,6 +40,10 @@ const MOD = () => { return objects; } + /* + * --------------------------------------------------------------------------------------------------- + // TODO: Figure out a better way to implement this w/o iterating over the objects on every find + * --------------------------------------------------------------------------------------------------- for (let i = 0; i < objects.length; i++) { let user = objects[i]; @@ -52,6 +56,9 @@ const MOD = () => { user.set('capabilities', capabilities); objects[i] = user; } + */ + + await Actinium.Hook.run('user-fetch', objects); return Promise.resolve(objects); }; @@ -77,6 +84,23 @@ const MOD = () => { return Actinium.User.retrieve(req.params, options); }; + const roles = async (req) => { + if (!req.user) return []; + + const options = { useMaskterKey: true, json: false }; + const qry = new Actinium.Query(Actinium.Role); + qry.equalTo('users', req.user); + qry.descending('level'); + + const results = await qry.find(options); + + return results.reduce((roles, item) => { + roles['anonymous'] = 0; + roles[item.get('name')] = item.get('level'); + return roles; + }, {}); + }; + const save = (req) => { const options = CloudRunOptions(req); return Actinium.User.save(req.params, options); @@ -244,6 +268,8 @@ const MOD = () => { Actinium.Cloud.define(PLUGIN.ID, 'user-retrieve', retrieve); + Actinium.Cloud.define(PLUGIN.ID, 'user-roles', roles); + Actinium.Cloud.define(PLUGIN.ID, 'user-save', save); Actinium.Cloud.define(PLUGIN.ID, 'user-trash', trash); diff --git a/package-lock.json b/package-lock.json index 6a30afc..f9a0e3a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,7 @@ "license": "MIT" }, "actinium_modules/@atomic-reactor/actinium-core": { - "version": "5.1.16", + "version": "5.1.18", "license": "MIT", "dependencies": { "@atomic-reactor/dirname": "^1.0.7", diff --git a/src/app/documentation/hooks.js b/src/app/documentation/hooks.js index 8142175..64391d4 100644 --- a/src/app/documentation/hooks.js +++ b/src/app/documentation/hooks.js @@ -80,7 +80,7 @@ Hooks are synchronous and will execute in the order they are registered unless t * @apiParam (Hooks) user-before-find Triggered when the `user-find` cloud function is called. * @apiParam (Hooks) user-before-login Triggered before a sign in attempt. * @apiParam (Hooks) user-before-save Triggered after a Parse.User object is saved. - * @apiParam (Hooks) user-fetch Triggered when a user is fetched from the server. The fetched `Parse.User` object is passed to the hook. + * @apiParam (Hooks) user-fetch Triggered when a users are fetched from the server. The fetched `Parse.User` objects are passed to the hook as an Array. * @apiParam (Hooks) warning Triggered when the startup warnings are logged. */