diff --git a/src/Routers/FeaturesRouter.js b/src/Routers/FeaturesRouter.js index db9a77d786..48361a3840 100644 --- a/src/Routers/FeaturesRouter.js +++ b/src/Routers/FeaturesRouter.js @@ -2,15 +2,17 @@ import { version } from '../../package.json'; import PromiseRouter from '../PromiseRouter'; import * as middleware from "../middlewares"; +const isGlobalConfigEnabled = !!(process.env.PARSE_EXPERIMENTAL_CONFIG_ENABLED || process.env.TESTING) + export class FeaturesRouter extends PromiseRouter { mountRoutes() { this.route('GET','/serverInfo', middleware.promiseEnforceMasterKeyAccess, req => { const features = { globalConfig: { - create: false, - read: false, - update: false, - delete: false, + create: isGlobalConfigEnabled, + read: isGlobalConfigEnabled, + update: isGlobalConfigEnabled, + delete: isGlobalConfigEnabled, }, hooks: { create: false, diff --git a/src/Routers/GlobalConfigRouter.js b/src/Routers/GlobalConfigRouter.js index 156cecf694..8cc2646346 100644 --- a/src/Routers/GlobalConfigRouter.js +++ b/src/Routers/GlobalConfigRouter.js @@ -18,8 +18,19 @@ export class GlobalConfigRouter extends PromiseRouter { } updateGlobalConfig(req) { + const params = req.body.params; + const update = Object.keys(params).reduce((acc, key) => { + if(params[key] && params[key].__op && params[key].__op === "Delete") { + if (!acc.$unset) acc.$unset = {}; + acc.$unset[`params.${key}`] = ""; + } else { + if (!acc.$set) acc.$set = {}; + acc.$set[`params.${key}`] = params[key]; + } + return acc; + }, {}); return req.config.database.adaptiveCollection('_GlobalConfig') - .then(coll => coll.upsertOne({ _id: 1 }, { $set: req.body })) + .then(coll => coll.upsertOne({ _id: 1 }, update)) .then(() => ({ response: { result: true } })); }