| 
									
										
										
										
											2021-07-08 11:20:13 +02:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-27 10:01:46 +02:00
										 |  |  | const _ = require('lodash'); | 
					
						
							| 
									
										
										
										
											2021-07-08 11:20:13 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-28 16:54:07 +02:00
										 |  |  | module.exports = async ({ strapi }) => { | 
					
						
							| 
									
										
										
										
											2021-08-19 16:49:33 +02:00
										 |  |  |   // set plugin store
 | 
					
						
							| 
									
										
										
										
											2021-09-13 12:03:12 +02:00
										 |  |  |   const configurator = strapi.store({ type: 'plugin', name: 'upload', key: 'settings' }); | 
					
						
							| 
									
										
										
										
											2021-08-19 16:49:33 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-19 22:27:00 +02:00
										 |  |  |   strapi.plugin('upload').provider = createProvider(strapi.config.get('plugin.upload', {})); | 
					
						
							| 
									
										
										
										
											2021-08-19 16:49:33 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // if provider config does not exist set one by default
 | 
					
						
							|  |  |  |   const config = await configurator.get(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (!config) { | 
					
						
							|  |  |  |     await configurator.set({ | 
					
						
							|  |  |  |       value: { | 
					
						
							|  |  |  |         sizeOptimization: true, | 
					
						
							|  |  |  |         responsiveDimensions: true, | 
					
						
							|  |  |  |         autoOrientation: false, | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   await registerPermissionActions(); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-27 10:01:46 +02:00
										 |  |  | const createProvider = config => { | 
					
						
							|  |  |  |   const { providerOptions, actionOptions = {} } = config; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const providerName = _.toLower(config.provider); | 
					
						
							|  |  |  |   let provider; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   let modulePath; | 
					
						
							| 
									
										
										
										
											2021-08-19 16:49:33 +02:00
										 |  |  |   try { | 
					
						
							| 
									
										
										
										
											2021-09-27 10:01:46 +02:00
										 |  |  |     modulePath = require.resolve(`@strapi/provider-upload-${providerName}`); | 
					
						
							|  |  |  |   } catch (error) { | 
					
						
							|  |  |  |     if (error.code === 'MODULE_NOT_FOUND') { | 
					
						
							|  |  |  |       modulePath = providerName; | 
					
						
							| 
									
										
										
										
											2021-09-27 10:36:21 +02:00
										 |  |  |     } else { | 
					
						
							|  |  |  |       throw error; | 
					
						
							| 
									
										
										
										
											2021-09-27 10:01:46 +02:00
										 |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2021-08-19 16:49:33 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-27 10:01:46 +02:00
										 |  |  |   try { | 
					
						
							|  |  |  |     provider = require(modulePath); | 
					
						
							| 
									
										
										
										
											2021-08-19 16:49:33 +02:00
										 |  |  |   } catch (err) { | 
					
						
							| 
									
										
										
										
											2021-09-27 10:01:46 +02:00
										 |  |  |     throw new Error(`Could not load upload provider "${providerName}".`); | 
					
						
							| 
									
										
										
										
											2021-08-19 16:49:33 +02:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2021-09-27 10:01:46 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   const providerInstance = provider.init(providerOptions); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return Object.assign(Object.create(baseProvider), { | 
					
						
							|  |  |  |     ...providerInstance, | 
					
						
							| 
									
										
										
										
											2021-11-04 10:54:13 +01:00
										 |  |  |     upload(file, options = actionOptions.upload) { | 
					
						
							|  |  |  |       return providerInstance.upload(file, options); | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     delete(file, options = actionOptions.delete) { | 
					
						
							|  |  |  |       return providerInstance.delete(file, options); | 
					
						
							|  |  |  |     }, | 
					
						
							| 
									
										
										
										
											2021-09-27 10:01:46 +02:00
										 |  |  |   }); | 
					
						
							| 
									
										
										
										
											2021-08-19 16:49:33 +02:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const baseProvider = { | 
					
						
							|  |  |  |   extend(obj) { | 
					
						
							|  |  |  |     Object.assign(this, obj); | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   upload() { | 
					
						
							|  |  |  |     throw new Error('Provider upload method is not implemented'); | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  |   delete() { | 
					
						
							|  |  |  |     throw new Error('Provider delete method is not implemented'); | 
					
						
							|  |  |  |   }, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const registerPermissionActions = async () => { | 
					
						
							|  |  |  |   const actions = [ | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       section: 'plugins', | 
					
						
							|  |  |  |       displayName: 'Access the Media Library', | 
					
						
							|  |  |  |       uid: 'read', | 
					
						
							|  |  |  |       pluginName: 'upload', | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       section: 'plugins', | 
					
						
							|  |  |  |       displayName: 'Create (upload)', | 
					
						
							|  |  |  |       uid: 'assets.create', | 
					
						
							|  |  |  |       subCategory: 'assets', | 
					
						
							|  |  |  |       pluginName: 'upload', | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       section: 'plugins', | 
					
						
							|  |  |  |       displayName: 'Update (crop, details, replace) + delete', | 
					
						
							|  |  |  |       uid: 'assets.update', | 
					
						
							|  |  |  |       subCategory: 'assets', | 
					
						
							|  |  |  |       pluginName: 'upload', | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       section: 'plugins', | 
					
						
							|  |  |  |       displayName: 'Download', | 
					
						
							|  |  |  |       uid: 'assets.download', | 
					
						
							|  |  |  |       subCategory: 'assets', | 
					
						
							|  |  |  |       pluginName: 'upload', | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       section: 'plugins', | 
					
						
							|  |  |  |       displayName: 'Copy link', | 
					
						
							|  |  |  |       uid: 'assets.copy-link', | 
					
						
							|  |  |  |       subCategory: 'assets', | 
					
						
							|  |  |  |       pluginName: 'upload', | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       section: 'settings', | 
					
						
							|  |  |  |       displayName: 'Access the Media Library settings page', | 
					
						
							|  |  |  |       uid: 'settings.read', | 
					
						
							|  |  |  |       category: 'media library', | 
					
						
							|  |  |  |       pluginName: 'upload', | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   await strapi.admin.services.permission.actionProvider.registerMany(actions); | 
					
						
							|  |  |  | }; |