From 2bb32253d86944e46222b045d2da360319944300 Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Thu, 18 Aug 2022 15:21:55 +0100 Subject: [PATCH] Adding in hash handling for datasource plugins. --- packages/server/src/integrations/index.ts | 6 +++++- packages/server/src/utilities/fileSystem/index.js | 12 ++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/packages/server/src/integrations/index.ts b/packages/server/src/integrations/index.ts index b9523061a4..7b730a1764 100644 --- a/packages/server/src/integrations/index.ts +++ b/packages/server/src/integrations/index.ts @@ -93,7 +93,11 @@ module.exports = { for (let plugin of plugins) { if (plugin.name === integration) { // need to use commonJS require due to its dynamic runtime nature - return getDatasourcePlugin(plugin.name, plugin.jsUrl) + return getDatasourcePlugin( + plugin.name, + plugin.jsUrl, + plugin.schema?.hash + ) } } }, diff --git a/packages/server/src/utilities/fileSystem/index.js b/packages/server/src/utilities/fileSystem/index.js index f937f172b5..096212864c 100644 --- a/packages/server/src/utilities/fileSystem/index.js +++ b/packages/server/src/utilities/fileSystem/index.js @@ -351,13 +351,20 @@ exports.extractPluginTarball = async file => { return { metadata, directory: path } } -exports.getDatasourcePlugin = async (name, url) => { +exports.getDatasourcePlugin = async (name, url, hash) => { if (!fs.existsSync(DATASOURCE_PATH)) { fs.mkdirSync(DATASOURCE_PATH) } const filename = join(DATASOURCE_PATH, name) + const metadataName = `${filename}.bbmetadata` if (fs.existsSync(filename)) { - return require(filename) + const currentHash = fs.readFileSync(metadataName, "utf8") + // if hash is the same return the file, otherwise remove it and re-download + if (currentHash === hash) { + return require(filename) + } else { + fs.unlinkSync(filename) + } } const fullUrl = checkSlashesInUrl( `${env.MINIO_URL}/${ObjectStoreBuckets.PLUGINS}/${url}` @@ -366,6 +373,7 @@ exports.getDatasourcePlugin = async (name, url) => { if (response.status === 200) { const content = await response.text() fs.writeFileSync(filename, content) + fs.writeFileSync(metadataName, hash) require(filename) } else { throw new Error(