diff --git a/app/Http/Controllers/EnvironmentController.php b/app/Http/Controllers/EnvironmentController.php index 8a8317b9..4f3be3cf 100755 --- a/app/Http/Controllers/EnvironmentController.php +++ b/app/Http/Controllers/EnvironmentController.php @@ -75,9 +75,19 @@ class EnvironmentController extends Controller 'mail_port' => config('mail.port'), 'mail_username' => config('mail.username'), 'mail_password' => config('mail.password'), - 'mail_encryption' => config('mail.encryption') + 'mail_encryption' => config('mail.encryption'), + 'from_name' => config('mail.from.name'), + 'from_mail' => config('mail.from.address'), + 'mail_mailgun_endpoint' => config('services.mailgun.endpoint'), + 'mail_mailgun_domain' => config('services.mailgun.domain'), + 'mail_mailgun_secret' => config('services.mailgun.secret'), + 'mail_sparkpost_secret' => config('services.sparkpost.secret'), + 'mail_ses_key' => config('services.ses.key'), + 'mail_ses_secret' => config('services.ses.secret'), + 'mail_mandrill_secret' => config('services.mandrill.secret'), ]; + return response()->json($MailData); } diff --git a/app/Http/Requests/MailEnvironmentRequest.php b/app/Http/Requests/MailEnvironmentRequest.php index 039841ab..cc911c6e 100644 --- a/app/Http/Requests/MailEnvironmentRequest.php +++ b/app/Http/Requests/MailEnvironmentRequest.php @@ -23,13 +23,85 @@ class MailEnvironmentRequest extends FormRequest */ public function rules() { - return [ - 'mail_driver' => 'required|string|max:50', - 'mail_host' => 'required|string|max:50', - 'mail_port' => 'required|max:50', - 'mail_username' => 'required|string|max:50', - 'mail_password' => 'required|string|max:50', - 'mail_encryption' => 'required|string|max:50', - ]; + switch ($this->get('mail_driver')) { + case 'smtp': + return [ + 'mail_driver' => 'required|string|max:50', + 'mail_host' => 'required|string|max:50', + 'mail_port' => 'required|max:50', + 'mail_username' => 'required|string|max:50', + 'mail_password' => 'required|string|max:50', + 'mail_encryption' => 'required|string|max:50', + 'from_name' => 'required|string|max:50', + 'from_mail' => 'required|string|max:50', + ]; + break; + + case 'mailgun': + return [ + 'mail_driver' => 'required|string|max:50', + 'mail_host' => 'required|string|max:50', + 'mail_port' => 'required|max:50', + 'mail_mailgun_domain' => 'required|string|max:50', + 'mail_mailgun_secret' => 'required|string|max:50', + 'mail_mailgun_endpoint' => 'required|string|max:50', + 'mail_encryption' => 'required|string|max:50', + 'from_name' => 'required|string|max:50', + 'from_mail' => 'required|string|max:50', + ]; + break; + + case 'sparkpost': + return [ + 'mail_driver' => 'required|string|max:50', + 'mail_host' => 'required|string|max:50', + 'mail_port' => 'required|max:50', + 'mail_sparkpost_secret' => 'required|string|max:50', + 'mail_encryption' => 'required|string|max:50', + 'from_name' => 'required|string|max:50', + 'from_mail' => 'required|string|max:50', + ]; + break; + + case 'ses': + return [ + 'mail_driver' => 'required|string|max:50', + 'mail_host' => 'required|string|max:50', + 'mail_port' => 'required|max:50', + 'mail_ses_key' => 'required|string|max:50', + 'mail_ses_secret' => 'required|string|max:50', + 'mail_encryption' => 'required|string|max:50', + 'from_name' => 'required|string|max:50', + 'from_mail' => 'required|string|max:50', + ]; + break; + + case 'mail': + return [ + 'from_name' => 'required|string|max:50', + 'from_mail' => 'required|string|max:50', + ]; + break; + + case 'sendmail': + return [ + 'from_name' => 'required|string|max:50', + 'from_mail' => 'required|string|max:50', + ]; + break; + + case 'mandrill': + return [ + 'mail_driver' => 'required|string|max:50', + 'mail_host' => 'required|string|max:50', + 'mail_port' => 'required|max:50', + 'mail_mandrill_secret' => 'required|string|max:50', + 'mail_encryption' => 'required|string|max:50', + 'from_name' => 'required|string|max:50', + 'from_mail' => 'required|string|max:50', + ]; + break; + } + } } diff --git a/app/Space/EnvironmentManager.php b/app/Space/EnvironmentManager.php index 5e30e577..4f1bd799 100755 --- a/app/Space/EnvironmentManager.php +++ b/app/Space/EnvironmentManager.php @@ -94,33 +94,14 @@ class EnvironmentManager */ public function saveMailVariables(MailEnvironmentRequest $request) { - $oldMailData = - 'MAIL_DRIVER='.config('mail.driver')."\n". - 'MAIL_HOST='.config('mail.host')."\n". - 'MAIL_PORT='.config('mail.port')."\n". - 'MAIL_USERNAME='.config('mail.username')."\n". - 'MAIL_PASSWORD='.config('mail.password')."\n". - 'MAIL_ENCRYPTION='.config('mail.encryption')."\n\n"; - $newMailData = - 'MAIL_DRIVER='.$request->mail_driver."\n". - 'MAIL_HOST='.$request->mail_host."\n". - 'MAIL_PORT='.$request->mail_port."\n". - 'MAIL_USERNAME='.$request->mail_username."\n". - 'MAIL_PASSWORD='.$request->mail_password."\n". - 'MAIL_ENCRYPTION='.$request->mail_encryption."\n\n"; + $mailData = $this->getMailData($request); try { file_put_contents($this->envPath, str_replace( - $oldMailData, - $newMailData, - file_get_contents($this->envPath) - )); - - file_put_contents($this->envPath, str_replace( - $oldMailData, - $newMailData, + $mailData['old_mail_data'], + $mailData['new_mail_data'], file_get_contents($this->envPath) )); @@ -135,6 +116,132 @@ class EnvironmentManager ]; } + private function getMailData($request) + { + $mailCredential = ""; + $otherCredential = ""; + $oldMailOtherCredential = ""; + + if(env('MAIL_FROM_ADDRESS') && env('MAIL_FROM_NAME')) { + $oldMailOtherCredential = + 'MAIL_FROM_ADDRESS='.config('mail.from.address')."\n". + 'MAIL_FROM_NAME='.config('mail.from.name')."\n\n"; + } + + $oldMailCredential = + 'MAIL_USERNAME='.config('mail.username')."\n". + 'MAIL_PASSWORD='.config('mail.password')."\n"; + + switch ($request->mail_driver) { + case 'smtp': + $mailCredential= + 'MAIL_USERNAME='.$request->mail_username."\n". + 'MAIL_PASSWORD='.$request->mail_password."\n"; + break; + + case 'mailgun': + $mailCredential = $oldMailCredential; + $otherCredential= + 'MAILGUN_DOMAIN='.$request->mail_mailgun_domain."\n". + 'MAILGUN_SECRET='.$request->mail_mailgun_secret."\n". + 'MAILGUN_ENDPOINT='.$request->mail_mailgun_endpoint."\n\n"; + + if(env('MAILGUN_DOMAIN') && env('MAILGUN_SECRET') && env('MAILGUN_ENDPOINT')) { + $oldMailOtherCredential = + 'MAILGUN_DOMAIN='.config('services.mailgun.domain')."\n". + 'MAILGUN_SECRET='.config('services.mailgun.secret')."\n". + 'MAILGUN_ENDPOINT='.config('services.mailgun.endpoint')."\n\n"; + } + + break; + + case 'sparkpost': + $mailCredential = $oldMailCredential; + $otherCredential= + 'SPARKPOST_SECRET='.$request->mail_sparkpost_secret."\n\n"; + + if(env('SPARKPOST_SECRET')) { + $oldMailOtherCredential = + 'SPARKPOST_SECRET='.config('services.sparkpost.secret')."\n\n"; + } + break; + + case 'ses': + $mailCredential = $oldMailCredential; + $otherCredential= + 'SES_KEY='.$request->mail_ses_key."\n". + 'SES_SECRET='.$request->mail_ses_secret."\n\n"; + + if(env('SES_KEY') && env('SES_SECRET')) { + $oldMailOtherCredential = + 'SES_KEY='.config('services.ses.key')."\n". + 'SES_SECRET='.config('services.ses.secret')."\n\n"; + } + break; + + case 'mail': + $existMailData = 'MAIL_DRIVER='.$request->mail_driver."\n". + 'MAIL_HOST='.config('mail.host')."\n". + 'MAIL_PORT='.config('mail.port')."\n". + $oldMailCredential. + 'MAIL_ENCRYPTION='.config('mail.encryption')."\n\n". + 'MAIL_FROM_ADDRESS='.$request->from_mail."\n". + 'MAIL_FROM_NAME='.$request->from_name."\n\n". + $otherCredential; + break; + + case 'sendmail': + $existMailData = 'MAIL_DRIVER='.$request->mail_driver."\n". + 'MAIL_HOST='.config('mail.host')."\n". + 'MAIL_PORT='.config('mail.port')."\n". + $oldMailCredential. + 'MAIL_ENCRYPTION='.config('mail.encryption')."\n\n". + 'MAIL_FROM_ADDRESS='.$request->from_mail."\n". + 'MAIL_FROM_NAME='.$request->from_name."\n\n". + $otherCredential; + break; + + case 'mandrill': + $mailCredential = $oldMailCredential; + $otherCredential= + 'MANDRILL_API_KEY='.$request->mail_mandrill_secret."\n\n"; + + if(env('MANDRILL_API_KEY')) { + $oldMailOtherCredential = + 'MANDRILL_API_KEY='.config('services.mandrill.secret')."\n\n"; + } + break; + + default: + $mailCredential = "\n"; + $otherCredential = "\n"; + break; + } + + $oldMailData = + 'MAIL_DRIVER='.config('mail.driver')."\n". + 'MAIL_HOST='.config('mail.host')."\n". + 'MAIL_PORT='.config('mail.port')."\n". + $oldMailCredential. + 'MAIL_ENCRYPTION='.config('mail.encryption')."\n\n". + $oldMailOtherCredential; + + $newMailData = $existMailData ?? + 'MAIL_DRIVER='.$request->mail_driver."\n". + 'MAIL_HOST='.$request->mail_host."\n". + 'MAIL_PORT='.$request->mail_port."\n". + $mailCredential. + 'MAIL_ENCRYPTION='.$request->mail_encryption."\n\n". + 'MAIL_FROM_ADDRESS='.$request->from_mail."\n". + 'MAIL_FROM_NAME='.$request->from_name."\n\n". + $otherCredential; + + return [ + 'old_mail_data' => $oldMailData, + 'new_mail_data' => $newMailData + ]; + } + /** * * @param DatabaseEnvironmentRequest $request diff --git a/config/services.php b/config/services.php index bc4699d8..319fdc05 100644 --- a/config/services.php +++ b/config/services.php @@ -34,6 +34,10 @@ return [ 'api_key' => env('SENDGRID_API_KEY'), ], + 'mandrill' => [ + 'secret' => env('MANDRILL_API_KEY'), + ], + 'stripe' => [ 'model' => Crater\User::class, 'key' => env('STRIPE_KEY'), diff --git a/resources/assets/js/plugins/en.js b/resources/assets/js/plugins/en.js index 4dea2c36..9b56b1f3 100644 --- a/resources/assets/js/plugins/en.js +++ b/resources/assets/js/plugins/en.js @@ -565,9 +565,19 @@ export default { host: 'Mail Host', port: 'Mail Port', driver: 'Mail Driver', + domain: 'Domain', + secret: 'Secret', + sparkpost_secret: 'Sparkpost Secret', + mailgin_secret: 'Mailgun Secret', + ses_secret: 'SES Secret', + mandrill_secret: 'Mandrill Secret', + ses_key: 'SES Key', password: 'Mail Password', username: 'Mail Username', + endpoint: 'Mail Endpoint', mail_config: 'Mail Configuration', + from_name: 'From Mail Name', + from_mail: 'From Mail Address', encryption: 'Mail Encryption', mail_config_desc: 'Below details will be used to update the mail environment. Also you can change the details anytime after logging in.' }, diff --git a/resources/assets/js/views/settings/MailConfig.vue b/resources/assets/js/views/settings/MailConfig.vue index afbf481b..3ba22956 100644 --- a/resources/assets/js/views/settings/MailConfig.vue +++ b/resources/assets/js/views/settings/MailConfig.vue @@ -7,175 +7,49 @@ {{ $t('settings.mail.mail_config_desc') }}
- + :mail-drivers="mail_drivers" + @on-change-driver="(val) => mail_driver = mailConfigData.mail_driver = val" + @submit-data="saveEmailConfig" + /> + diff --git a/resources/assets/js/views/settings/mailDriver/Mailgun.vue b/resources/assets/js/views/settings/mailDriver/Mailgun.vue new file mode 100644 index 00000000..7194463d --- /dev/null +++ b/resources/assets/js/views/settings/mailDriver/Mailgun.vue @@ -0,0 +1,276 @@ + + + + diff --git a/resources/assets/js/views/settings/mailDriver/Mandrill.vue b/resources/assets/js/views/settings/mailDriver/Mandrill.vue new file mode 100644 index 00000000..ce496984 --- /dev/null +++ b/resources/assets/js/views/settings/mailDriver/Mandrill.vue @@ -0,0 +1,228 @@ + + + + diff --git a/resources/assets/js/views/settings/mailDriver/Ses.vue b/resources/assets/js/views/settings/mailDriver/Ses.vue new file mode 100644 index 00000000..17f517de --- /dev/null +++ b/resources/assets/js/views/settings/mailDriver/Ses.vue @@ -0,0 +1,251 @@ + + + + diff --git a/resources/assets/js/views/settings/mailDriver/Smtp.vue b/resources/assets/js/views/settings/mailDriver/Smtp.vue new file mode 100644 index 00000000..84fa896e --- /dev/null +++ b/resources/assets/js/views/settings/mailDriver/Smtp.vue @@ -0,0 +1,251 @@ + + + + diff --git a/resources/assets/js/views/settings/mailDriver/Sparkpost.vue b/resources/assets/js/views/settings/mailDriver/Sparkpost.vue new file mode 100644 index 00000000..68f78611 --- /dev/null +++ b/resources/assets/js/views/settings/mailDriver/Sparkpost.vue @@ -0,0 +1,231 @@ + + + +