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 @@