improved email setup in admin settings

This commit is contained in:
Čarodej
2022-02-11 10:52:14 +01:00
parent 03730b80c0
commit 3fd43936e7
13 changed files with 329 additions and 222 deletions
@@ -57,7 +57,7 @@ class SetupDevEnvironment extends Command
$this->info('Storing default settings and content...');
($this->seedDefaultPages)();
($this->seedDefaultSettings)($this->argument('type'));
($this->seedDefaultSettings)($this->argument('license'));
($this->seedDefaultLanguage)();
$this->store_default_settings();
@@ -82,6 +82,8 @@ class SetupDevEnvironment extends Command
'--stop-when-empty' => true,
]);
$this->warn('Please make sure your current host/domain where you are running app is included in your .env SANCTUM_STATEFUL_DOMAINS variable.');
$this->info('Everything is done, congratulations! 🥳🥳🥳');
}
@@ -1026,7 +1028,7 @@ class SetupDevEnvironment extends Command
],
[
'name' => 'license',
'value' => $this->argument('type'),
'value' => $this->argument('license'),
],
[
'name' => 'purchase_code',
@@ -8,9 +8,12 @@ use Domain\Pages\Actions\SeedDefaultPagesAction;
use Domain\Settings\Actions\SeedDefaultSettingsAction;
use Domain\Localization\Actions\SeedDefaultLanguageAction;
use Domain\SetupWizard\Actions\CreateDiskDirectoriesAction;
use Illuminate\Foundation\Testing\WithFaker;
class SetupProdEnvironment extends Command
{
use WithFaker;
/**
* The name and signature of the console command.
*/
@@ -30,6 +33,7 @@ class SetupProdEnvironment extends Command
private SeedDefaultPagesAction $seedDefaultPages,
) {
parent::__construct();
$this->setUpFaker();
}
/**
@@ -51,7 +55,7 @@ class SetupProdEnvironment extends Command
$this->store_default_settings();
($this->seedDefaultPages)();
($this->seedDefaultSettings)($this->argument('type'));
($this->seedDefaultSettings)($this->argument('license'));
($this->seedDefaultLanguage)();
$this->info('Creating default admin...');
@@ -60,6 +64,8 @@ class SetupProdEnvironment extends Command
$this->info('Clearing application cache...');
$this->clear_cache();
$this->warn('Please make sure your current host/domain where you are running app is included in your .env SANCTUM_STATEFUL_DOMAINS variable.');
$this->info('Everything is done, congratulations! 🥳🥳🥳');
}
@@ -136,7 +142,7 @@ class SetupProdEnvironment extends Command
],
[
'name' => 'license',
'value' => $this->argument('type'),
'value' => $this->argument('license'),
],
[
'name' => 'purchase_code',
@@ -197,7 +203,15 @@ class SetupProdEnvironment extends Command
$user
->settings()
->create([
'name' => 'Admin',
'first_name' => 'Jane',
'last_name' => 'Doe',
'address' => $this->faker->address,
'state' => $this->faker->state,
'city' => $this->faker->city,
'postal_code' => $this->faker->postcode,
'country' => $this->faker->randomElement(['SK', 'CZ', 'DE', 'FR']),
'phone_number' => $this->faker->phoneNumber,
'timezone' => $this->faker->randomElement(['+1.0', '+2.0', '+3.0']),
]);
// Show user credentials
@@ -218,6 +232,12 @@ class SetupProdEnvironment extends Command
$this->call('key:generate', [
'--force' => true,
]);
$currentHost = request()->getHost() . ',' . request()->getHost() . ':' . request()->getPort();
setEnvironmentValue([
'SANCTUM_STATEFUL_DOMAINS' => "localhost,localhost:8000,127.0.0.1,127.0.0.1:8000,::1,$currentHost",
]);
}
/**
@@ -1,36 +0,0 @@
<?php
namespace Domain\Settings\Controllers;
use Artisan;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class SetEmailController
{
/**
* Set new email credentials to .env file
*/
public function __invoke(Request $request): Response
{
// TODO: pridat validator do requestu
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
if (! app()->runningUnitTests()) {
setEnvironmentValue([
'MAIL_DRIVER' => $request->input('driver'),
'MAIL_HOST' => $request->input('host'),
'MAIL_PORT' => $request->input('port'),
'MAIL_USERNAME' => $request->input('username'),
'MAIL_PASSWORD' => $request->input('password'),
'MAIL_ENCRYPTION' => $request->input('encryption'),
]);
// Clear config cache
Artisan::call('config:clear');
Artisan::call('config:cache');
}
return response('Done', 204);
}
}
@@ -0,0 +1,65 @@
<?php
namespace Domain\Settings\Controllers;
use Artisan;
use Domain\Settings\Requests\StoreEmailCredentialsRequest;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class StoreEmailCredentialsController
{
/**
* Set new email credentials to .env file
*/
public function __invoke(StoreEmailCredentialsRequest $request): Response
{
// Abort in demo mode
abort_if(is_demo(), 204, 'Done.');
if (!app()->runningUnitTests()) {
$mail = [
'log' => [
'MAIL_DRIVER' => 'log',
],
'postmark' => [
'MAIL_DRIVER' => 'postmark',
'POSTMARK_TOKEN' => $request->input('postmark.token'),
],
'smtp' => [
'MAIL_DRIVER' => 'smtp',
'MAIL_HOST' => $request->input('smtp.host'),
'MAIL_PORT' => $request->input('smtp.port'),
'MAIL_USERNAME' => $request->input('smtp.username'),
'MAIL_PASSWORD' => $request->input('smtp.password'),
'MAIL_ENCRYPTION' => $request->input('smtp.encryption'),
],
'ses' => [
'MAIL_DRIVER' => 'ses',
'AWS_ACCESS_KEY_ID' => $request->input('ses.access_key'),
'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'),
],
'mailgun' => [
'MAIL_DRIVER' => 'mailgun',
'MAILGUN_DOMAIN' => $request->input('mailgun.domain'),
'MAILGUN_SECRET' => $request->input('mailgun.secret'),
'MAILGUN_ENDPOINT' => $request->input('mailgun.endpoint'),
],
];
// Store credentials for mail
setEnvironmentValue(
$mail[$request->input('mailDriver')]
);
// Clear config cache
Artisan::call('config:clear');
Artisan::call('config:cache');
}
return response('Done', 204);
}
}
@@ -0,0 +1,33 @@
<?php
namespace Domain\Settings\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreEmailCredentialsRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'mailDriver' => 'required|string',
'smtp' => 'sometimes|array',
'ses' => 'sometimes|array',
'mailgun' => 'sometimes|array',
'postmark' => 'sometimes|array',
];
}
}
@@ -44,6 +44,7 @@ class StoreEnvironmentSettingsController extends Controller
'MAIL_DRIVER' => 'log',
],
'postmark' => [
'MAIL_DRIVER' => 'postmark',
'POSTMARK_TOKEN' => $request->input('postmark.token'),
],
'smtp' => [
@@ -33,9 +33,10 @@ class StoreEnvironmentSetupRequest extends FormRequest
'storage.region' => 'sometimes|nullable|string',
'storage.bucket' => 'sometimes|nullable|string',
'mailDriver' => 'required|string',
'mail' => 'sometimes|array',
'smtp' => 'sometimes|array',
'ses' => 'sometimes|array',
'mailgun' => 'sometimes|array',
'postmark' => 'sometimes|array',
];
}
}