| 
									
										
										
										
											2021-07-20 12:12:30 +02:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-19 16:49:33 +02:00
										 |  |  | const _ = require('lodash'); | 
					
						
							| 
									
										
										
										
											2021-07-20 12:12:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-19 16:49:33 +02:00
										 |  |  | const createProvider = emailConfig => { | 
					
						
							|  |  |  |   const providerName = _.toLower(emailConfig.provider); | 
					
						
							|  |  |  |   let provider; | 
					
						
							| 
									
										
										
										
											2021-09-27 10:01:46 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   let modulePath; | 
					
						
							| 
									
										
										
										
											2021-08-19 16:49:33 +02:00
										 |  |  |   try { | 
					
						
							| 
									
										
										
										
											2021-09-27 10:01:46 +02:00
										 |  |  |     modulePath = require.resolve(`@strapi/provider-email-${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
										 |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   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 email provider "${providerName}".`); | 
					
						
							| 
									
										
										
										
											2021-08-19 16:49:33 +02:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2021-09-27 10:01:46 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-19 16:49:33 +02:00
										 |  |  |   return provider.init(emailConfig.providerOptions, emailConfig.settings); | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-28 16:54:07 +02:00
										 |  |  | module.exports = async ({ strapi }) => { | 
					
						
							| 
									
										
										
										
											2021-08-19 16:49:33 +02:00
										 |  |  |   const emailConfig = strapi.config.get('plugin.email'); | 
					
						
							| 
									
										
										
										
											2021-08-19 22:27:00 +02:00
										 |  |  |   strapi.plugin('email').provider = createProvider(emailConfig); | 
					
						
							| 
									
										
										
										
											2021-08-19 16:49:33 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // Add permissions
 | 
					
						
							|  |  |  |   const actions = [ | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       section: 'settings', | 
					
						
							|  |  |  |       category: 'email', | 
					
						
							|  |  |  |       displayName: 'Access the Email Settings page', | 
					
						
							|  |  |  |       uid: 'settings.read', | 
					
						
							|  |  |  |       pluginName: 'email', | 
					
						
							|  |  |  |     }, | 
					
						
							|  |  |  |   ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   await strapi.admin.services.permission.actionProvider.registerMany(actions); | 
					
						
							|  |  |  | }; |