mirror of
https://github.com/vitodeploy/vito.git
synced 2025-07-02 14:36:17 +00:00
Manage site aliases (#206)
* manage site aliases * build assets * fix tests
This commit is contained in:
@ -28,6 +28,10 @@ public function create(Site $site, array $input): void
|
||||
'expires_at' => $input['type'] === SslType::LETSENCRYPT ? now()->addMonths(3) : $input['expires_at'],
|
||||
'status' => SslStatus::CREATING,
|
||||
]);
|
||||
$ssl->domains = [$site->domain];
|
||||
if (isset($input['aliases']) && $input['aliases']) {
|
||||
$ssl->domains = array_merge($ssl->domains, $site->aliases);
|
||||
}
|
||||
$ssl->save();
|
||||
|
||||
dispatch(function () use ($site, $ssl) {
|
||||
|
@ -21,7 +21,7 @@
|
||||
class CreateSite
|
||||
{
|
||||
/**
|
||||
* @throws ValidationException
|
||||
* @throws SourceControlIsNotConnected
|
||||
*/
|
||||
public function create(Server $server, array $input): Site
|
||||
{
|
||||
@ -33,7 +33,7 @@ public function create(Server $server, array $input): Site
|
||||
'server_id' => $server->id,
|
||||
'type' => $input['type'],
|
||||
'domain' => $input['domain'],
|
||||
'aliases' => isset($input['alias']) ? [$input['alias']] : [],
|
||||
'aliases' => $input['aliases'] ?? [],
|
||||
'path' => '/home/'.$server->getSshUser().'/'.$input['domain'],
|
||||
'status' => SiteStatus::INSTALLING,
|
||||
]);
|
||||
@ -115,7 +115,7 @@ private function validateInputs(Server $server, array $input): void
|
||||
return $query->where('server_id', $server->id);
|
||||
}),
|
||||
],
|
||||
'alias' => [
|
||||
'aliases.*' => [
|
||||
new DomainRule(),
|
||||
],
|
||||
];
|
||||
|
33
app/Actions/Site/UpdateAliases.php
Normal file
33
app/Actions/Site/UpdateAliases.php
Normal file
@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace App\Actions\Site;
|
||||
|
||||
use App\Models\Site;
|
||||
use App\SSH\Services\Webserver\Webserver;
|
||||
use App\ValidationRules\DomainRule;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
|
||||
class UpdateAliases
|
||||
{
|
||||
public function update(Site $site, array $input): void
|
||||
{
|
||||
$this->validate($input);
|
||||
|
||||
$site->aliases = $input['aliases'] ?? [];
|
||||
|
||||
/** @var Webserver $webserver */
|
||||
$webserver = $site->server->webserver()->handler();
|
||||
$webserver->updateVHost($site, ! $site->hasSSL());
|
||||
|
||||
$site->save();
|
||||
}
|
||||
|
||||
private function validate(array $input): void
|
||||
{
|
||||
Validator::make($input, [
|
||||
'aliases.*' => [
|
||||
new DomainRule(),
|
||||
],
|
||||
])->validate();
|
||||
}
|
||||
}
|
@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Actions\Site\UpdateAliases;
|
||||
use App\Actions\Site\UpdateSourceControl;
|
||||
use App\Facades\Toast;
|
||||
use App\Helpers\HtmxResponse;
|
||||
@ -83,10 +84,21 @@ public function updateSourceControl(Server $server, Site $site, Request $request
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
$site = app(UpdateSourceControl::class)->update($site, $request->input());
|
||||
app(UpdateSourceControl::class)->update($site, $request->input());
|
||||
|
||||
Toast::success('Source control updated successfully!');
|
||||
|
||||
return htmx()->back();
|
||||
}
|
||||
|
||||
public function updateAliases(Server $server, Site $site, Request $request): HtmxResponse
|
||||
{
|
||||
$this->authorize('manage', $server);
|
||||
|
||||
app(UpdateAliases::class)->update($site, $request->input());
|
||||
|
||||
Toast::success('Aliases updated successfully!');
|
||||
|
||||
return htmx()->back();
|
||||
}
|
||||
}
|
||||
|
@ -278,4 +278,9 @@ public function getEnv(): string
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
public function hasSSL(): bool
|
||||
{
|
||||
return $this->ssls->isNotEmpty();
|
||||
}
|
||||
}
|
||||
|
@ -17,6 +17,7 @@
|
||||
* @property string $status
|
||||
* @property Site $site
|
||||
* @property string $ca_path
|
||||
* @property ?array $domains
|
||||
*/
|
||||
class Ssl extends AbstractModel
|
||||
{
|
||||
@ -30,6 +31,7 @@ class Ssl extends AbstractModel
|
||||
'ca',
|
||||
'expires_at',
|
||||
'status',
|
||||
'domains',
|
||||
];
|
||||
|
||||
protected $casts = [
|
||||
@ -38,6 +40,7 @@ class Ssl extends AbstractModel
|
||||
'pk' => 'encrypted',
|
||||
'ca' => 'encrypted',
|
||||
'expires_at' => 'datetime',
|
||||
'domains' => 'array',
|
||||
];
|
||||
|
||||
public function site(): BelongsTo
|
||||
@ -111,4 +114,16 @@ public function validateSetup(string $result): bool
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function getDomains(): array
|
||||
{
|
||||
if (! empty($this->domains) && is_array($this->domains)) {
|
||||
return $this->domains;
|
||||
}
|
||||
|
||||
$this->domains = [$this->site->domain];
|
||||
$this->save();
|
||||
|
||||
return $this->domains;
|
||||
}
|
||||
}
|
||||
|
@ -117,11 +117,9 @@ public function changePHPVersion(Site $site, $version): void
|
||||
*/
|
||||
public function setupSSL(Ssl $ssl): void
|
||||
{
|
||||
$domains = '-d '.$ssl->site->domain;
|
||||
if ($ssl->site->aliases) {
|
||||
foreach ($ssl->site->aliases as $alias) {
|
||||
$domains .= ' -d '.$alias;
|
||||
}
|
||||
$domains = '';
|
||||
foreach ($ssl->getDomains() as $domain) {
|
||||
$domains .= ' -d '.$domain;
|
||||
}
|
||||
$command = $this->getScript('nginx/create-letsencrypt-ssl.sh', [
|
||||
'email' => $ssl->site->server->creator->email,
|
||||
|
Reference in New Issue
Block a user