diff --git a/backend/src/api/guilds.ts b/backend/src/api/guilds.ts index bb1f5c4a..6eabfa24 100644 --- a/backend/src/api/guilds.ts +++ b/backend/src/api/guilds.ts @@ -76,12 +76,14 @@ export function initGuildsAPI(app: express.Express) { parsedConfig = {}; } - const errors = validateGuildConfig(parsedConfig); + const errors = await validateGuildConfig(parsedConfig); + if (errors) { return res.status(422).json({ errors }); } await configs.saveNewRevision(`guild-${req.params.guildId}`, config, req.user.userId); + ok(res); }); diff --git a/backend/src/configValidator.ts b/backend/src/configValidator.ts index b6931819..3a0227b9 100644 --- a/backend/src/configValidator.ts +++ b/backend/src/configValidator.ts @@ -3,7 +3,7 @@ import { guildPlugins } from "./plugins/availablePlugins"; import { decodeAndValidateStrict, StrictValidationError } from "./validatorUtils"; import { ZeppelinPlugin } from "./plugins/ZeppelinPlugin"; import { IZeppelinGuildConfig } from "./types"; -import { PluginOptions } from "knub"; +import { configUtils, PluginOptions } from "knub"; const pluginNameToPlugin = new Map(); for (const plugin of guildPlugins) { @@ -26,7 +26,7 @@ const globalConfigRootSchema = t.type({ const partialMegaTest = t.partial({ name: t.string }); -export function validateGuildConfig(config: any): string[] | null { +export async function validateGuildConfig(config: any): Promise { const validationResult = decodeAndValidateStrict(partialGuildConfigRootSchema, config); if (validationResult instanceof StrictValidationError) return validationResult.getErrors(); @@ -40,7 +40,8 @@ export function validateGuildConfig(config: any): string[] | null { const plugin = pluginNameToPlugin.get(pluginName); try { - plugin.configPreprocessor(pluginOptions as PluginOptions); + const mergedOptions = configUtils.mergeConfig(plugin.defaultOptions || {}, pluginOptions); + await plugin.configPreprocessor(mergedOptions as PluginOptions); } catch (err) { if (err instanceof StrictValidationError) { return err.getErrors().map(err => { diff --git a/backend/src/pluginUtils.ts b/backend/src/pluginUtils.ts index 86fbba80..60bd504f 100644 --- a/backend/src/pluginUtils.ts +++ b/backend/src/pluginUtils.ts @@ -40,6 +40,7 @@ export function getPluginConfigPreprocessor( ? decodeAndValidateStrict(blueprint.configSchema, options.config) : options.config; if (decodedConfig instanceof StrictValidationError) { + console.log("o", options); throw decodedConfig; }