mirror of
https://github.com/Unleash/unleash.git
synced 2025-04-29 01:15:48 +02:00
fix: Add validation of required parameters
This commit is contained in:
parent
65996e72e0
commit
dcf1224a17
@ -1,6 +1,7 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
const memoize = require('memoizee');
|
const memoize = require('memoizee');
|
||||||
|
const { ValidationError } = require('joi');
|
||||||
const addonProvidersClasses = require('../addons');
|
const addonProvidersClasses = require('../addons');
|
||||||
const events = require('../event-type');
|
const events = require('../event-type');
|
||||||
const { addonSchema } = require('./addon-schema');
|
const { addonSchema } = require('./addon-schema');
|
||||||
@ -147,6 +148,7 @@ class AddonService {
|
|||||||
async createAddon(data, userName) {
|
async createAddon(data, userName) {
|
||||||
const addonConfig = await addonSchema.validateAsync(data);
|
const addonConfig = await addonSchema.validateAsync(data);
|
||||||
await this.validateKnownProvider(addonConfig);
|
await this.validateKnownProvider(addonConfig);
|
||||||
|
await this.validateRequiredParameters(addonConfig);
|
||||||
|
|
||||||
const createdAddon = await this.addonStore.insert(addonConfig);
|
const createdAddon = await this.addonStore.insert(addonConfig);
|
||||||
await this.addTagTypes(createdAddon.provider);
|
await this.addTagTypes(createdAddon.provider);
|
||||||
@ -166,6 +168,7 @@ class AddonService {
|
|||||||
|
|
||||||
async updateAddon(id, data, userName) {
|
async updateAddon(id, data, userName) {
|
||||||
const addonConfig = await addonSchema.validateAsync(data);
|
const addonConfig = await addonSchema.validateAsync(data);
|
||||||
|
await this.validateRequiredParameters(addonConfig);
|
||||||
if (this.sensitiveParams[addonConfig.provider].length > 0) {
|
if (this.sensitiveParams[addonConfig.provider].length > 0) {
|
||||||
const existingConfig = await this.addonStore.get(id);
|
const existingConfig = await this.addonStore.get(id);
|
||||||
addonConfig.parameters = Object.keys(addonConfig.parameters).reduce(
|
addonConfig.parameters = Object.keys(addonConfig.parameters).reduce(
|
||||||
@ -208,6 +211,27 @@ class AddonService {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async validateRequiredParameters({ provider, parameters }) {
|
||||||
|
const providerDefinition = this.addonProviders[provider].definition;
|
||||||
|
|
||||||
|
const requiredParamsMissing = providerDefinition.parameters
|
||||||
|
.filter(p => p.required)
|
||||||
|
.map(p => p.name)
|
||||||
|
.filter(
|
||||||
|
requiredParam =>
|
||||||
|
!Object.keys(parameters).includes(requiredParam),
|
||||||
|
);
|
||||||
|
if (requiredParamsMissing.length > 0) {
|
||||||
|
throw new ValidationError(
|
||||||
|
`Missing required parameters: ${requiredParamsMissing.join(
|
||||||
|
',',
|
||||||
|
)} `,
|
||||||
|
'',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = AddonService;
|
module.exports = AddonService;
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
const test = require('ava');
|
const test = require('ava');
|
||||||
const proxyquire = require('proxyquire').noCallThru();
|
const proxyquire = require('proxyquire').noCallThru();
|
||||||
|
const { ValidationError } = require('joi');
|
||||||
const Addon = require('../addons/addon');
|
const Addon = require('../addons/addon');
|
||||||
|
|
||||||
const store = require('../../test/fixtures/store');
|
const store = require('../../test/fixtures/store');
|
||||||
@ -319,3 +319,46 @@ test('should not overwrite masked values when updating', async t => {
|
|||||||
t.is(updatedConfig.parameters.url, 'http://localhost/wh');
|
t.is(updatedConfig.parameters.url, 'http://localhost/wh');
|
||||||
t.is(updatedConfig.parameters.var, 'some-new-value');
|
t.is(updatedConfig.parameters.var, 'some-new-value');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('should reject addon config with missing required parameter when creating', async t => {
|
||||||
|
const { addonService } = getSetup();
|
||||||
|
|
||||||
|
const config = {
|
||||||
|
provider: 'simple',
|
||||||
|
enabled: true,
|
||||||
|
parameters: {
|
||||||
|
var: 'some-value',
|
||||||
|
},
|
||||||
|
events: [FEATURE_CREATED],
|
||||||
|
};
|
||||||
|
|
||||||
|
await t.throwsAsync(
|
||||||
|
async () => addonService.createAddon(config, 'me@mail.com'),
|
||||||
|
{ instanceOf: ValidationError },
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('should reject updating addon config with missing required parameter', async t => {
|
||||||
|
const { addonService } = getSetup();
|
||||||
|
|
||||||
|
const addonConfig = {
|
||||||
|
provider: 'simple',
|
||||||
|
enabled: true,
|
||||||
|
parameters: {
|
||||||
|
url: 'https://some.site/api',
|
||||||
|
var: 'some-value',
|
||||||
|
},
|
||||||
|
events: [FEATURE_CREATED],
|
||||||
|
};
|
||||||
|
|
||||||
|
const config = await addonService.createAddon(addonConfig, 'me@mail.com');
|
||||||
|
const updated = {
|
||||||
|
...config,
|
||||||
|
parameters: { var: 'some-new-value' },
|
||||||
|
description: 'test',
|
||||||
|
};
|
||||||
|
await t.throwsAsync(
|
||||||
|
async () => addonService.updateAddon(config.id, updated, 'me@mail.com'),
|
||||||
|
{ instanceOf: ValidationError },
|
||||||
|
);
|
||||||
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user