mirror of
https://github.com/VueFileManager/vuefilemanager.git
synced 2026-04-17 15:52:15 +00:00
Test ses connection before storing credentials into the app
This commit is contained in:
38
src/Domain/Settings/Actions/TestSESConnectionAction.php
Normal file
38
src/Domain/Settings/Actions/TestSESConnectionAction.php
Normal file
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
namespace Domain\Settings\Actions;
|
||||
|
||||
use Mail;
|
||||
use Exception;
|
||||
use Domain\Settings\Mail\TestMail;
|
||||
use Symfony\Component\Mailer\Exception\LogicException;
|
||||
use Symfony\Component\Mailer\Exception\TransportException;
|
||||
|
||||
class TestSESConnectionAction
|
||||
{
|
||||
public function __invoke(array $credentials)
|
||||
{
|
||||
try {
|
||||
// Set temporary mail connection
|
||||
config([
|
||||
'mail.driver' => 'ses',
|
||||
'mail.from.address' => $credentials['identity'],
|
||||
'mail.from.name' => $credentials['identity'],
|
||||
'services.ses.key' => $credentials['access_key'],
|
||||
'services.ses.secret' => $credentials['secret_access_key'],
|
||||
'services.ses.region' => $credentials['default_region'],
|
||||
'services.ses.token' => $credentials['session_token'] ?? null,
|
||||
]);
|
||||
|
||||
// Send test email
|
||||
Mail::to($credentials['identity'])->send(new TestMail($credentials['identity']));
|
||||
} catch (TransportException | LogicException | Exception $error) {
|
||||
abort(
|
||||
response()->json([
|
||||
'type' => 'mailer-connection-error',
|
||||
'title' => 'Mail Connection Error',
|
||||
'message' => $error->getMessage(),
|
||||
], 401)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ namespace Domain\Settings\Controllers;
|
||||
|
||||
use Artisan;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Domain\Settings\Actions\TestSESConnectionAction;
|
||||
use Domain\Settings\Actions\TestSMTPConnectionAction;
|
||||
use Domain\Settings\Actions\TestMailgunConnectionAction;
|
||||
use Domain\Settings\Actions\TestPostmarkConnectionAction;
|
||||
@@ -14,6 +15,7 @@ class StoreEmailCredentialsController
|
||||
private TestPostmarkConnectionAction $testPostmarkConnection,
|
||||
private TestMailgunConnectionAction $testMailgunConnection,
|
||||
private TestSMTPConnectionAction $testSMTPConnection,
|
||||
private TestSESConnectionAction $testSESConnection,
|
||||
) {
|
||||
}
|
||||
|
||||
@@ -46,11 +48,18 @@ class StoreEmailCredentialsController
|
||||
'token' => $request->input('postmark.token'),
|
||||
'sender' => $request->input('postmark.sender'),
|
||||
]),
|
||||
'ses' => ($this->testSESConnection)([
|
||||
'access_key' => $request->input('ses.access_key'),
|
||||
'secret_access_key' => $request->input('ses.secret_access_key'),
|
||||
'default_region' => $request->input('ses.default_region'),
|
||||
'session_token' => $request->input('ses.session_token'),
|
||||
'identity' => $request->input('ses.sender'),
|
||||
]),
|
||||
};
|
||||
|
||||
$mail = [
|
||||
'log' => [
|
||||
'MAIL_DRIVER' => 'log',
|
||||
'MAIL_DRIVER' => 'log',
|
||||
],
|
||||
'postmark' => [
|
||||
'MAIL_DRIVER' => 'postmark',
|
||||
@@ -74,6 +83,8 @@ class StoreEmailCredentialsController
|
||||
'AWS_SECRET_ACCESS_KEY' => $request->input('ses.secret_access_key'),
|
||||
'AWS_DEFAULT_REGION' => $request->input('ses.default_region'),
|
||||
'AWS_SESSION_TOKEN' => $request->input('ses.session_token'),
|
||||
'MAIL_FROM_ADDRESS' => $request->input('ses.sender'),
|
||||
'MAIL_FROM_NAME' => $request->input('ses.sender'),
|
||||
],
|
||||
'mailgun' => [
|
||||
'MAIL_DRIVER' => 'mailgun',
|
||||
|
||||
@@ -6,6 +6,7 @@ use Illuminate\Http\JsonResponse;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Domain\Settings\DTO\S3CredentialsData;
|
||||
use Domain\Settings\Actions\TestS3ConnectionAction;
|
||||
use Domain\Settings\Actions\TestSESConnectionAction;
|
||||
use Domain\Settings\Actions\TestSMTPConnectionAction;
|
||||
use Domain\Settings\Actions\TestMailgunConnectionAction;
|
||||
use Domain\Settings\Actions\TestPostmarkConnectionAction;
|
||||
@@ -15,6 +16,7 @@ class StoreEnvironmentSettingsController extends Controller
|
||||
{
|
||||
public function __construct(
|
||||
private TestS3ConnectionAction $testS3Connection,
|
||||
private TestSESConnectionAction $testSESConnection,
|
||||
private TestSMTPConnectionAction $testSMTPConnection,
|
||||
private TestMailgunConnectionAction $testMailgunConnection,
|
||||
private TestPostmarkConnectionAction $testPostmarkConnection,
|
||||
@@ -53,6 +55,13 @@ class StoreEnvironmentSettingsController extends Controller
|
||||
'token' => $request->input('postmark.token'),
|
||||
'sender' => $request->input('postmark.sender'),
|
||||
]),
|
||||
'ses' => ($this->testSESConnection)([
|
||||
'access_key' => $request->input('ses.access_key'),
|
||||
'secret_access_key' => $request->input('ses.secret_access_key'),
|
||||
'default_region' => $request->input('ses.default_region'),
|
||||
'session_token' => $request->input('ses.session_token'),
|
||||
'identity' => $request->input('ses.sender'),
|
||||
]),
|
||||
};
|
||||
|
||||
$setup = [
|
||||
@@ -116,6 +125,8 @@ class StoreEnvironmentSettingsController extends Controller
|
||||
'AWS_SECRET_ACCESS_KEY' => $request->input('ses.secret_access_key'),
|
||||
'AWS_DEFAULT_REGION' => $request->input('ses.default_region'),
|
||||
'AWS_SESSION_TOKEN' => $request->input('ses.session_token'),
|
||||
'MAIL_FROM_ADDRESS' => $request->input('ses.sender'),
|
||||
'MAIL_FROM_NAME' => $request->input('ses.sender'),
|
||||
],
|
||||
'mailgun' => [
|
||||
'MAIL_DRIVER' => 'mailgun',
|
||||
|
||||
Reference in New Issue
Block a user