From 77384a1abead84c81d87afa09496bdd432bbdc3e Mon Sep 17 00:00:00 2001 From: "Ralph J. Smit" <59207045+ralphjsmit@users.noreply.github.com> Date: Tue, 19 Jul 2022 19:04:01 +0200 Subject: [PATCH] Request new certificate automatically after creating new alias --- app/Http/Controllers/SiteAliasController.php | 3 +- app/Http/Requests/SiteAliasRequest.php | 3 + app/Jobs/Aliases/CreateAlias.php | 46 +++++-- public/css/app.css | 3 + resources/js/Pages/Sites/Aliases.vue | 67 +++++----- .../js/components/forms/FormCheckbox.vue | 115 ++++++++++++++++++ 6 files changed, 195 insertions(+), 42 deletions(-) create mode 100644 resources/js/components/forms/FormCheckbox.vue diff --git a/app/Http/Controllers/SiteAliasController.php b/app/Http/Controllers/SiteAliasController.php index 860c5f4..ced308e 100644 --- a/app/Http/Controllers/SiteAliasController.php +++ b/app/Http/Controllers/SiteAliasController.php @@ -6,7 +6,6 @@ use App\Http\Requests\SiteAliasRequest; use App\Http\Resources\SiteAliasResource; use App\Jobs\Aliases\CreateAlias; use App\Jobs\Aliases\DeleteAlias; -use Illuminate\Http\Request; class SiteAliasController extends Controller { @@ -26,7 +25,7 @@ class SiteAliasController extends Controller $site->addAlias($request->input('domain')); - dispatch(new CreateAlias($site, $request->input('domain'))); + dispatch(new CreateAlias($site, $request->input('domain'), $request->boolean('request_new_certicate'))); return redirect()->route('sites.aliases.index', $id)->with('success', __('Alias has been created')); } diff --git a/app/Http/Requests/SiteAliasRequest.php b/app/Http/Requests/SiteAliasRequest.php index f212b8f..003861c 100644 --- a/app/Http/Requests/SiteAliasRequest.php +++ b/app/Http/Requests/SiteAliasRequest.php @@ -19,6 +19,9 @@ class SiteAliasRequest extends FormRequest 'required', 'string', new Hostname, + ], + 'request_new_certicate' => [ + 'required', ] ]; } diff --git a/app/Jobs/Aliases/CreateAlias.php b/app/Jobs/Aliases/CreateAlias.php index 96daf28..2994e6c 100644 --- a/app/Jobs/Aliases/CreateAlias.php +++ b/app/Jobs/Aliases/CreateAlias.php @@ -2,10 +2,12 @@ namespace App\Jobs\Aliases; +use App\Jobs\Certificates\CreateCertificate; +use App\Jobs\Certificates\DeleteCertificate; +use App\Models\Certificate; use App\Models\Site; use App\Traits\HasPloi; use Illuminate\Bus\Queueable; -use Illuminate\Contracts\Queue\ShouldBeUnique; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; @@ -15,14 +17,11 @@ class CreateAlias implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels, HasPloi; - public Site $site; - public string $alias; - - public function __construct(Site $site, $alias) - { - $this->site = $site; - $this->alias = $alias; - } + public function __construct( + public Site $site, + public string $alias, + public bool $requestNewCertificate = false, + ) {} public function handle() { @@ -31,6 +30,35 @@ class CreateAlias implements ShouldQueue ->sites($this->site->ploi_id) ->aliases() ->create([$this->alias]); + + if ($this->requestNewCertificate) { + $currentCertificate = $this + ->site + ->certificates() + ->whereIn('status', [Certificate::STATUS_ACTIVE, Certificate::STATUS_BUSY]) + ->latest() + ->first(); + + if (! $currentCertificate) { + return; + } + + dispatch(new DeleteCertificate($this->site->server->ploi_id, $this->site->ploi_id, $currentCertificate->ploi_id)); + + $newCertificate = $this->site->certificates()->create([ + 'domain' => $currentCertificate->domain . ',' . $this->alias, + 'type' => $currentCertificate->type, + 'certificate' => $currentCertificate->certificate, + 'private' => $currentCertificate->private + ]); + + $currentCertificate->delete(); + + $newCertificate->server_id = $this->site->server_id; + $newCertificate->save(); + + dispatch(new CreateCertificate($newCertificate))->delay(now()->addSeconds(5)); + } } public function failed() diff --git a/public/css/app.css b/public/css/app.css index 9e837bc..af7f9a6 100644 --- a/public/css/app.css +++ b/public/css/app.css @@ -1131,6 +1131,9 @@ select { .mt-2 { margin-top: 0.5rem; } +.ml-4 { + margin-left: 1rem; +} .block { display: block; } diff --git a/resources/js/Pages/Sites/Aliases.vue b/resources/js/Pages/Sites/Aliases.vue index 85cd3d4..ea7b9ab 100644 --- a/resources/js/Pages/Sites/Aliases.vue +++ b/resources/js/Pages/Sites/Aliases.vue @@ -21,6 +21,7 @@