From 315476e20af0fefa58a5f4f274224ecfe3116c28 Mon Sep 17 00:00:00 2001 From: ryan Date: Sun, 7 Jul 2019 21:59:59 -0700 Subject: [PATCH] validate type and id --- .../src/config/utils/pluginValidation.test.ts | 2 +- .../src/config/utils/pluginValidation.ts | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/packages/grafana-toolkit/src/config/utils/pluginValidation.test.ts b/packages/grafana-toolkit/src/config/utils/pluginValidation.test.ts index f971f5b3f78..6a898bc0dc4 100644 --- a/packages/grafana-toolkit/src/config/utils/pluginValidation.test.ts +++ b/packages/grafana-toolkit/src/config/utils/pluginValidation.test.ts @@ -3,7 +3,7 @@ import { getPluginJson, validatePluginJson } from './pluginValidation'; describe('pluginValdation', () => { describe('plugin.json', () => { test('missing plugin.json file', () => { - expect(() => getPluginJson(`${__dirname}/mocks/missing-plugin-json`)).toThrow('plugin.json file is missing!'); + expect(() => getPluginJson(`${__dirname}/mocks/missing-plugin.json`)).toThrowError(); }); }); diff --git a/packages/grafana-toolkit/src/config/utils/pluginValidation.ts b/packages/grafana-toolkit/src/config/utils/pluginValidation.ts index 217b60ccafd..4f459aef303 100644 --- a/packages/grafana-toolkit/src/config/utils/pluginValidation.ts +++ b/packages/grafana-toolkit/src/config/utils/pluginValidation.ts @@ -22,15 +22,24 @@ export const validatePluginJson = (pluginJson: any) => { if (!pluginJson.info.version) { throw new Error('Plugin info.version is missing in plugin.json'); } + + const types = ['panel', 'datasource', 'app']; + const type = pluginJson.type; + if (!types.includes(type)) { + throw new Error('Invalid plugin type in plugin.json: ' + type); + } + + if (!pluginJson.id.endsWith('-' + type)) { + throw new Error('[plugin.json] id should end with: -' + type); + } }; -export const getPluginJson = (root: string = process.cwd()): PluginJSONSchema => { +export const getPluginJson = (path: string): PluginJSONSchema => { let pluginJson; - try { - pluginJson = require(path.resolve(root, 'src/plugin.json')); + pluginJson = require(path); } catch (e) { - throw new Error('plugin.json file is missing!'); + throw new Error('Unable to find: ' + path); } validatePluginJson(pluginJson);