From f12b0503ff8db26a6ee0a40d7b3ac1d74d00942c Mon Sep 17 00:00:00 2001 From: Jim Laurie Date: Tue, 20 Feb 2018 17:10:25 +0100 Subject: [PATCH] Get and update configs --- .../config/functions/bootstrap.js | 7 --- .../strapi-plugin-upload/config/routes.json | 16 +++++++ .../controllers/Upload.js | 43 ++++++++++++++++++- packages/strapi-plugin-upload/package.json | 4 +- .../strapi-plugin-upload/services/Upload.js | 16 +++++-- packages/strapi-upload-local/lib/index.js | 4 +- packages/strapi-upload-s3/lib/index.js | 4 +- packages/strapi-upload-s3/package.json | 6 ++- 8 files changed, 79 insertions(+), 21 deletions(-) diff --git a/packages/strapi-plugin-upload/config/functions/bootstrap.js b/packages/strapi-plugin-upload/config/functions/bootstrap.js index 805c63afc7..1b70c3761f 100644 --- a/packages/strapi-plugin-upload/config/functions/bootstrap.js +++ b/packages/strapi-plugin-upload/config/functions/bootstrap.js @@ -41,14 +41,7 @@ module.exports = async cb => { const value = _.assign({}, provider, {enabled: true}); await pluginStore.set({key: 'provider', value}); - - strapi.plugins.upload.config.provider = provider; - } else { - strapi.plugins.upload.config.provider = _.find(strapi.plugins.upload.config.providers, {provider: config.provider}); - _.assign(strapi.plugins.upload.config.provider, config); } - - strapi.plugins.upload.config.provider.init(strapi); } catch (err) { strapi.log.error(`Can't laod ${config.provider} upload provider`); strapi.log.warn(`Please install strapi-upload-${config.provider} --save`); diff --git a/packages/strapi-plugin-upload/config/routes.json b/packages/strapi-plugin-upload/config/routes.json index 8c9bdf4f54..649136409b 100644 --- a/packages/strapi-plugin-upload/config/routes.json +++ b/packages/strapi-plugin-upload/config/routes.json @@ -8,6 +8,22 @@ "policies": [] } }, + { + "method": "GET", + "path": "/settings/:environment", + "handler": "Upload.getSettings", + "config": { + "policies": [] + } + }, + { + "method": "PUT", + "path": "/settings/:environment", + "handler": "Upload.updateSettings", + "config": { + "policies": [] + } + }, { "method": "GET", "path": "/files", diff --git a/packages/strapi-plugin-upload/controllers/Upload.js b/packages/strapi-plugin-upload/controllers/Upload.js index dd7f768d69..3e2fb27f09 100644 --- a/packages/strapi-plugin-upload/controllers/Upload.js +++ b/packages/strapi-plugin-upload/controllers/Upload.js @@ -15,11 +15,21 @@ module.exports = { */ index: async (ctx) => { + const config = await strapi.store({ + environment: strapi.config.environment, + type: 'plugin', + name: 'upload' + }).get({key: 'provider'}); + + if (!config.enabled) { + return ctx.badRequest(null, ctx.request.admin ? [{ messages: [{ id: 'Upload.status.disabled' }] }] : 'Upload is disabled!'); + } + const Service = strapi.plugins['upload'].services.upload; const files = await Service.buffurize(ctx.request.body.files); - await Service.upload(files); + await Service.upload(files, config); // Send 200 `ok` ctx.send(files.map((file) => { @@ -34,6 +44,29 @@ module.exports = { })); }, + getSettings: async (ctx) => { + const config = await strapi.store({ + environment: ctx.params.environment, + type: 'plugin', + name: 'upload' + }).get({key: 'provider'}); + + ctx.send({ + providers: strapi.plugins.upload.config.providers, + config + }); + }, + + updateSettings: async (ctx) => { + await strapi.store({ + environment: ctx.params.environment, + type: 'plugin', + name: 'upload' + }).get({key: 'provider'}); + + ctx.send({ok: true}); + }, + find: async (ctx) => { const data = await strapi.plugins['upload'].services.upload.fetchAll(ctx.query); @@ -54,7 +87,13 @@ module.exports = { }, destroy: async (ctx, next) => { - const data = await strapi.plugins['upload'].services.upload.remove(ctx.params); + const config = await strapi.store({ + environment: strapi.config.environment, + type: 'plugin', + name: 'upload' + }).get({key: 'provider'}); + + const data = await strapi.plugins['upload'].services.upload.remove(ctx.params, config); // Send 200 `ok` ctx.send(data); diff --git a/packages/strapi-plugin-upload/package.json b/packages/strapi-plugin-upload/package.json index 3ae7065bbb..031b1c7a4e 100644 --- a/packages/strapi-plugin-upload/package.json +++ b/packages/strapi-plugin-upload/package.json @@ -1,6 +1,6 @@ { "name": "strapi-plugin-upload", - "version": "3.0.0-alpha.10.1", + "version": "3.0.0-alpha.10.2", "description": "This is the description of the plugin.", "strapi": { "name": "upload", @@ -27,7 +27,7 @@ "uuid": "^3.2.1" }, "devDependencies": { - "strapi-helper-plugin": "3.0.0-alpha.10.1" + "strapi-helper-plugin": "3.0.0-alpha.10.2" }, "author": { "name": "A Strapi developer", diff --git a/packages/strapi-plugin-upload/services/Upload.js b/packages/strapi-plugin-upload/services/Upload.js index 3a5594601e..66c63669ae 100644 --- a/packages/strapi-plugin-upload/services/Upload.js +++ b/packages/strapi-plugin-upload/services/Upload.js @@ -39,10 +39,14 @@ module.exports = { ); }, - upload: (files) => { + upload: async (files, config) => { + const provider = _.cloneDeep(_.find(strapi.plugins.upload.config.providers, {provider: config.provider})); + _.assign(provider, config); + const actions = provider.init(strapi, config); + return Promise.all( files.map(async file => { - await strapi.plugins.upload.services.provider.upload(file); + await actions.upload(file); delete file.buffer; @@ -86,10 +90,14 @@ module.exports = { return await strapi.query('file', 'upload').count(); }, - remove: async params => { + remove: async (params, config) => { const file = await strapi.plugins['upload'].services.upload.fetch(params); - await strapi.plugins.upload.services.provider.delete(file); + const provider = _.cloneDeep(_.find(strapi.plugins.upload.config.providers, {provider: config.provider})); + _.assign(provider, config); + const actions = provider.init(strapi, config); + + await actions.delete(file); // Use Content Manager business logic to handle relation. if (strapi.plugins['content-manager']) { diff --git a/packages/strapi-upload-local/lib/index.js b/packages/strapi-upload-local/lib/index.js index f88d3ae628..e6fdc9ff33 100644 --- a/packages/strapi-upload-local/lib/index.js +++ b/packages/strapi-upload-local/lib/index.js @@ -12,8 +12,8 @@ const path = require('path'); module.exports = { provider: 'local', name: 'Local server', - init: (strapi) => { - strapi.plugins.upload.services.provider = { + init: (strapi, config) => { + return { upload: (file) => { return new Promise((resolve, reject) => { fs.writeFile(path.join(strapi.config.appPath, 'public', `uploads/${file.hash}.${file.ext}`), file.buffer, (err) => { diff --git a/packages/strapi-upload-s3/lib/index.js b/packages/strapi-upload-s3/lib/index.js index 957d24e03d..eb70225f67 100644 --- a/packages/strapi-upload-s3/lib/index.js +++ b/packages/strapi-upload-s3/lib/index.js @@ -48,8 +48,8 @@ module.exports = { type: 'text' } }, - init: (strapi) => { - strapi.plugins.upload.services.provider = { + init: (strapi, config) => { + return { upload: (buffers) => { }, diff --git a/packages/strapi-upload-s3/package.json b/packages/strapi-upload-s3/package.json index cbaebd1b4b..62630c617f 100644 --- a/packages/strapi-upload-s3/package.json +++ b/packages/strapi-upload-s3/package.json @@ -1,10 +1,12 @@ { - "name": "strapi-upload-local", + "name": "strapi-upload-s3", "version": "3.0.0-alpha.10.2", - "description": "Local provider for strapi upload", + "description": "AWS S3 provider for strapi upload", "homepage": "http://strapi.io", "keywords": [ "upload", + "aws", + "s3", "strapi" ], "directories": {