From 6d350db854ca0e17bbd0227a9e90e6f89a4e042f Mon Sep 17 00:00:00 2001
From: raishvaria
Date: Mon, 18 Nov 2019 17:30:04 +0530
Subject: [PATCH] add mail configuration
---
.../Controllers/EnvironmentController.php | 12 +-
app/Http/Requests/MailEnvironmentRequest.php | 88 +++++-
app/Space/EnvironmentManager.php | 151 ++++++++--
config/services.php | 4 +
resources/assets/js/plugins/en.js | 10 +
.../assets/js/views/settings/MailConfig.vue | 185 ++----------
.../js/views/settings/mailDriver/Basic.vue | 156 ++++++++++
.../js/views/settings/mailDriver/Mailgun.vue | 276 ++++++++++++++++++
.../js/views/settings/mailDriver/Mandrill.vue | 228 +++++++++++++++
.../js/views/settings/mailDriver/Ses.vue | 251 ++++++++++++++++
.../js/views/settings/mailDriver/Smtp.vue | 251 ++++++++++++++++
.../views/settings/mailDriver/Sparkpost.vue | 231 +++++++++++++++
12 files changed, 1655 insertions(+), 188 deletions(-)
create mode 100644 resources/assets/js/views/settings/mailDriver/Basic.vue
create mode 100644 resources/assets/js/views/settings/mailDriver/Mailgun.vue
create mode 100644 resources/assets/js/views/settings/mailDriver/Mandrill.vue
create mode 100644 resources/assets/js/views/settings/mailDriver/Ses.vue
create mode 100644 resources/assets/js/views/settings/mailDriver/Smtp.vue
create mode 100644 resources/assets/js/views/settings/mailDriver/Sparkpost.vue
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 @@
+
+
+
+