This commit is contained in:
Saeed Vaziry
2023-07-02 12:47:50 +02:00
commit 5c72f12490
825 changed files with 41659 additions and 0 deletions

View File

@ -0,0 +1,35 @@
<?php
namespace App\Http\Livewire\Application;
use App\Actions\Site\UpdateBranch;
use App\Models\Site;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class ChangeBranch extends Component
{
use RefreshComponentOnBroadcast;
public Site $site;
public string $branch;
public function mount(): void
{
$this->branch = $this->site->branch;
}
public function change(): void
{
app(UpdateBranch::class)->update($this->site, $this->all());
session()->flash('status', 'updating-branch');
}
public function render(): View
{
return view('livewire.application.change-branch');
}
}

View File

@ -0,0 +1,40 @@
<?php
namespace App\Http\Livewire\Application;
use App\Exceptions\SourceControlIsNotConnected;
use App\Models\Site;
use App\Traits\HasToast;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class Deploy extends Component
{
use RefreshComponentOnBroadcast;
use HasToast;
public Site $site;
public function deploy(): void
{
try {
$this->site->deploy();
$this->toast()->success(__('Deployment started!'));
$this->emitTo(DeploymentsList::class, '$refresh');
$this->emitTo(DeploymentScript::class, '$refresh');
} catch (SourceControlIsNotConnected $e) {
session()->flash('toast.type', 'error');
session()->flash('toast.message', $e->getMessage());
$this->redirect(route('source-controls'));
}
}
public function render(): View
{
return view('livewire.application.deploy');
}
}

View File

@ -0,0 +1,37 @@
<?php
namespace App\Http\Livewire\Application;
use App\Actions\Site\UpdateDeploymentScript;
use App\Models\Site;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class DeploymentScript extends Component
{
use RefreshComponentOnBroadcast;
public Site $site;
public string $script;
public function mount(): void
{
$this->script = $this->site->deploymentScript->content;
}
public function save(): void
{
app(UpdateDeploymentScript::class)->update($this->site, $this->all());
session()->flash('status', 'script-updated');
$this->emit(Deploy::class, '$refresh');
}
public function render(): View
{
return view('livewire.application.deployment-script');
}
}

View File

@ -0,0 +1,34 @@
<?php
namespace App\Http\Livewire\Application;
use App\Models\Site;
use App\Traits\HasCustomPaginationView;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class DeploymentsList extends Component
{
use RefreshComponentOnBroadcast;
use HasCustomPaginationView;
public Site $site;
public string $logContent;
public function showLog(int $id): void
{
$deployment = $this->site->deployments()->findOrFail($id);
$this->logContent = $deployment->log->content;
$this->dispatchBrowserEvent('open-modal', 'show-log');
}
public function render(): View
{
return view('livewire.application.deployments-list', [
'deployments' => $this->site->deployments()->latest()->simplePaginate(10),
]);
}
}

View File

@ -0,0 +1,20 @@
<?php
namespace App\Http\Livewire\Application;
use App\Models\Site;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class LaravelApp extends Component
{
use RefreshComponentOnBroadcast;
public Site $site;
public function render(): View
{
return view('livewire.application.laravel-app');
}
}

View File

@ -0,0 +1,20 @@
<?php
namespace App\Http\Livewire\Application;
use App\Models\Site;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class PhpApp extends Component
{
use RefreshComponentOnBroadcast;
public Site $site;
public function render(): View
{
return view('livewire.application.php-app');
}
}

View File

@ -0,0 +1,20 @@
<?php
namespace App\Http\Livewire\Application;
use App\Models\Site;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class WordpressApp extends Component
{
use RefreshComponentOnBroadcast;
public Site $site;
public function render(): View
{
return view('livewire.application.wordpress-app');
}
}

View File

@ -0,0 +1,34 @@
<?php
namespace App\Http\Livewire\Cronjobs;
use App\Models\Server;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class CreateCronjob extends Component
{
public Server $server;
public string $user = '';
public string $command;
public string $frequency = '';
public string $custom;
public function create(): void
{
app(\App\Actions\CronJob\CreateCronJob::class)->create($this->server, $this->all());
$this->emitTo(CronjobsList::class, '$refresh');
$this->dispatchBrowserEvent('created', true);
}
public function render(): View
{
return view('livewire.cronjobs.create-cronjob');
}
}

View File

@ -0,0 +1,35 @@
<?php
namespace App\Http\Livewire\Cronjobs;
use App\Models\Server;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class CronjobsList extends Component
{
use RefreshComponentOnBroadcast;
public Server $server;
public int $deleteId;
public function delete(): void
{
$cronjob = $this->server->cronJobs()->where('id', $this->deleteId)->firstOrFail();
$cronjob->removeFromServer();
$this->refreshComponent([]);
$this->dispatchBrowserEvent('confirmed', true);
}
public function render(): View
{
return view('livewire.cronjobs.cronjobs-list', [
'cronjobs' => $this->server->cronJobs,
]);
}
}

View File

@ -0,0 +1,65 @@
<?php
namespace App\Http\Livewire\Databases;
use App\Actions\Database\CreateDatabase;
use App\Actions\Database\CreateDatabaseUser;
use App\Models\Database;
use App\Models\Server;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class DatabaseList extends Component
{
use RefreshComponentOnBroadcast;
public Server $server;
public int $deleteId;
public string $name;
public bool $user;
public string $username;
public string $password;
public bool $remote = false;
public string $host = '%';
public function create(): void
{
app(CreateDatabase::class)->create($this->server, $this->all());
if ($this->all()['user']) {
app(CreateDatabaseUser::class)->create($this->server, $this->all());
}
$this->refreshComponent([]);
$this->dispatchBrowserEvent('database-created', true);
}
public function delete(): void
{
$database = Database::query()->findOrFail($this->deleteId);
$database->deleteFromServer();
$this->refreshComponent([]);
$this->emitTo(DatabaseUserList::class, '$refresh');
$this->dispatchBrowserEvent('confirmed', true);
}
public function render(): View
{
return view('livewire.databases.database-list', [
'databases' => $this->server->databases,
]);
}
}

View File

@ -0,0 +1,94 @@
<?php
namespace App\Http\Livewire\Databases;
use App\Actions\Database\CreateDatabaseUser;
use App\Actions\Database\LinkUser;
use App\Models\DatabaseUser;
use App\Models\Server;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class DatabaseUserList extends Component
{
use RefreshComponentOnBroadcast;
public Server $server;
public int $deleteId;
public string $username;
public string $password;
public bool $remote;
public string $host = '%';
public int $linkId;
public array $link = [];
public string $viewPassword = '';
public function create(): void
{
app(CreateDatabaseUser::class)->create($this->server, $this->all());
$this->refreshComponent([]);
$this->dispatchBrowserEvent('database-user-created', true);
}
public function delete(): void
{
$databaseUser = DatabaseUser::query()->findOrFail($this->deleteId);
$databaseUser->deleteFromServer();
$this->refreshComponent([]);
$this->emitTo(DatabaseList::class, '$refresh');
$this->dispatchBrowserEvent('confirmed', true);
}
public function viewPassword(int $id): void
{
$databaseUser = DatabaseUser::query()->findOrFail($id);
$this->viewPassword = $databaseUser->password;
$this->dispatchBrowserEvent('open-modal', 'database-user-password');
}
public function showLink(int $id): void
{
$databaseUser = DatabaseUser::query()->findOrFail($id);
$this->linkId = $id;
$this->link = $databaseUser->databases;
$this->dispatchBrowserEvent('open-modal', 'link-database-user');
}
public function link(): void
{
$databaseUser = DatabaseUser::query()->findOrFail($this->linkId);
app(LinkUser::class)->link($databaseUser, $this->link);
$this->refreshComponent([]);
$this->dispatchBrowserEvent('linked', true);
}
public function render(): View
{
return view('livewire.databases.database-user-list', [
'databases' => $this->server->databases,
'databaseUsers' => $this->server->databaseUsers,
]);
}
}

View File

@ -0,0 +1,40 @@
<?php
namespace App\Http\Livewire\Firewall;
use App\Actions\FirewallRule\CreateRule;
use App\Models\Server;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class CreateFirewallRule extends Component
{
use RefreshComponentOnBroadcast;
public Server $server;
public string $type = 'allow';
public string $protocol = 'tcp';
public string $port;
public string $source = '0.0.0.0';
public string $mask = '0';
public function create(): void
{
app(CreateRule::class)->create($this->server, $this->all());
$this->emitTo(FirewallRulesList::class, '$refresh');
$this->dispatchBrowserEvent('created', true);
}
public function render(): View
{
return view('livewire.firewall.create-firewall-rule');
}
}

View File

@ -0,0 +1,36 @@
<?php
namespace App\Http\Livewire\Firewall;
use App\Models\FirewallRule;
use App\Models\Server;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class FirewallRulesList extends Component
{
use RefreshComponentOnBroadcast;
public Server $server;
public int $deleteId;
public function delete(): void
{
$rule = FirewallRule::query()->findOrFail($this->deleteId);
$rule->removeFromServer();
$this->refreshComponent([]);
$this->dispatchBrowserEvent('confirmed', true);
}
public function render(): View
{
return view('livewire.firewall.firewall-rules-list', [
'rules' => $this->server->firewallRules,
]);
}
}

View File

@ -0,0 +1,34 @@
<?php
namespace App\Http\Livewire\NotificationChannels;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class AddChannel extends Component
{
public string $provider = '';
public string $label;
public string $webhook_url;
public string $email;
public function add(): void
{
app(\App\Actions\NotificationChannels\AddChannel::class)->add(
auth()->user(),
$this->all()
);
$this->emitTo(KeysList::class, '$refresh');
$this->dispatchBrowserEvent('added', true);
}
public function render(): View
{
return view('livewire.notification-channels.add-channel');
}
}

View File

@ -0,0 +1,37 @@
<?php
namespace App\Http\Livewire\NotificationChannels;
use App\Models\NotificationChannel;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class ChannelsList extends Component
{
use RefreshComponentOnBroadcast;
public int $deleteId;
protected $listeners = [
'$refresh',
];
public function delete(): void
{
$channel = NotificationChannel::query()->findOrFail($this->deleteId);
$channel->delete();
$this->refreshComponent([]);
$this->dispatchBrowserEvent('confirmed', true);
}
public function render(): View
{
return view('livewire.notification-channels.channels-list', [
'channels' => NotificationChannel::query()->latest()->get(),
]);
}
}

View File

@ -0,0 +1,30 @@
<?php
namespace App\Http\Livewire\Php;
use App\Models\Server;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class DefaultCli extends Component
{
use RefreshComponentOnBroadcast;
public Server $server;
public function change(string $version): void
{
$this->server->php($version)->handler()->setDefaultCli();
$this->refreshComponent([]);
}
public function render(): View
{
return view('livewire.php.default-cli', [
'defaultPHP' => $this->server->defaultService('php'),
'phps' => $this->server->services()->where('type', 'php')->get(), //
]);
}
}

View File

@ -0,0 +1,85 @@
<?php
namespace App\Http\Livewire\Php;
use App\Actions\PHP\InstallNewPHP;
use App\Actions\PHP\UpdatePHPIni;
use App\Models\Server;
use App\Models\Service;
use App\SSHCommands\GetPHPIniCommand;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
use Throwable;
class InstalledVersions extends Component
{
use RefreshComponentOnBroadcast;
public Server $server;
public int $uninstallId;
public int $iniId;
public string $ini = 'Loading php.ini';
public function install(string $version): void
{
app(InstallNewPHP::class)->install($this->server, [
'version' => $version,
]);
$this->refreshComponent([]);
}
public function restart(int $id): void
{
$service = Service::query()->findOrFail($id);
$service->restart();
$this->refreshComponent([]);
}
public function uninstall(): void
{
$service = Service::query()->findOrFail($this->uninstallId);
$service->uninstall();
$this->refreshComponent([]);
$this->dispatchBrowserEvent('confirmed', true);
}
public function loadIni(int $id): void
{
$this->iniId = $id;
$this->ini = 'Loading php.ini';
$service = Service::query()->findOrFail($this->iniId);
try {
$this->ini = $service->server->ssh()->exec(new GetPHPIniCommand($service->version));
} catch (Throwable) {
//
}
}
public function saveIni(): void
{
$service = Service::query()->findOrFail($this->iniId);
app(UpdatePHPIni::class)->update($service, $this->all()['ini']);
$this->refreshComponent([]);
session()->flash('status', 'ini-updated');
}
public function render(): View
{
return view('livewire.php.installed-versions', [
'phps' => $this->server->services()->where('type', 'php')->get(),
]);
}
}

View File

@ -0,0 +1,32 @@
<?php
namespace App\Http\Livewire\Profile;
use App\Actions\User\UpdateUserPassword;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class UpdatePassword extends Component
{
public string $current_password;
public string $password;
public string $password_confirmation;
public function update(): void
{
app(UpdateUserPassword::class)->update(auth()->user(), $this->all());
$this->current_password = '';
$this->password = '';
$this->password_confirmation = '';
session()->flash('status', 'password-updated');
}
public function render(): View
{
return view('livewire.profile.update-password');
}
}

View File

@ -0,0 +1,48 @@
<?php
namespace App\Http\Livewire\Profile;
use App\Actions\User\UpdateUserProfileInformation;
use App\Http\Livewire\UserDropdown;
use Exception;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class UpdateProfileInformation extends Component
{
public string $name;
public string $email;
public function mount(): void
{
$this->name = auth()->user()->name;
$this->email = auth()->user()->email;
}
/**
* @throws Exception
*/
public function submit(): void
{
app(UpdateUserProfileInformation::class)->update(auth()->user(), $this->all());
session()->flash('status', 'profile-updated');
$this->emitTo(UserDropdown::class, '$refresh');
}
public function sendVerificationEmail(): void
{
if (! auth()->user()->hasVerifiedEmail()) {
auth()->user()->sendEmailVerificationNotification();
session()->flash('status', 'verification-link-sent');
}
}
public function render(): View
{
return view('livewire.profile.update-profile-information');
}
}

View File

@ -0,0 +1,36 @@
<?php
namespace App\Http\Livewire\Queues;
use App\Models\Site;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class CreateQueue extends Component
{
public Site $site;
public string $command;
public string $user = '';
public int $auto_start = 1;
public int $auto_restart = 1;
public int $numprocs;
public function create(): void
{
app(\App\Actions\Queue\CreateQueue::class)->create($this->site, $this->all());
$this->emitTo(QueuesList::class, '$refresh');
$this->dispatchBrowserEvent('created', true);
}
public function render(): View
{
return view('livewire.queues.create-queue');
}
}

View File

@ -0,0 +1,57 @@
<?php
namespace App\Http\Livewire\Queues;
use App\Models\Queue;
use App\Models\Site;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class QueuesList extends Component
{
use RefreshComponentOnBroadcast;
public Site $site;
public int $deleteId;
public function delete(): void
{
$queue = $this->site->queues()->findOrFail($this->deleteId);
$queue->remove();
$this->refreshComponent([]);
$this->dispatchBrowserEvent('confirmed', true);
}
public function start(Queue $queue): void
{
$queue->start();
$this->refreshComponent([]);
}
public function restart(Queue $queue): void
{
$queue->restart();
$this->refreshComponent([]);
}
public function stop(Queue $queue): void
{
$queue->stop();
$this->refreshComponent([]);
}
public function render(): View
{
return view('livewire.queues.queues-list', [
'queues' => $this->site->queues,
]);
}
}

View File

@ -0,0 +1,58 @@
<?php
namespace App\Http\Livewire\ServerLogs;
use App\Models\Server;
use App\Models\Site;
use App\Traits\HasCustomPaginationView;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class LogsList extends Component
{
use RefreshComponentOnBroadcast;
use HasCustomPaginationView;
public ?int $count = null;
public Server $server;
public ?Site $site = null;
public string $logContent;
public function showLog(int $id): void
{
$log = $this->server->logs()->findOrFail($id);
$this->logContent = $log->content;
$this->dispatchBrowserEvent('open-modal', 'show-log');
}
public function render(): View
{
if ($this->site) {
return $this->renderSite();
}
if ($this->count) {
$logs = $this->server->logs()->latest()->take(10)->get();
} else {
$logs = $this->server->logs()->latest()->simplePaginate(10);
}
return view('livewire.server-logs.logs-list', compact('logs'));
}
private function renderSite(): View
{
if ($this->count) {
$logs = $this->site->logs()->latest()->take(10)->get();
} else {
$logs = $this->site->logs()->latest()->simplePaginate(10);
}
return view('livewire.server-logs.logs-list', compact('logs'));
}
}

View File

@ -0,0 +1,40 @@
<?php
namespace App\Http\Livewire\ServerProviders;
use App\Actions\ServerProvider\CreateServerProvider;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class ConnectProvider extends Component
{
public string $provider = '';
public string $name;
public string $token;
public string $key;
public string $secret;
public function connect(): void
{
app(CreateServerProvider::class)->create(auth()->user(), $this->all());
$this->emitTo(ProvidersList::class, '$refresh');
$this->dispatchBrowserEvent('connected', true);
}
public function render(): View
{
if (request()->query('provider')) {
$this->provider = request()->query('provider');
}
return view('livewire.server-providers.connect-provider', [
'open' => ! is_null(request()->query('provider')),
]);
}
}

View File

@ -0,0 +1,37 @@
<?php
namespace App\Http\Livewire\ServerProviders;
use App\Models\ServerProvider;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class ProvidersList extends Component
{
use RefreshComponentOnBroadcast;
public int $deleteId;
protected $listeners = [
'$refresh',
];
public function delete(): void
{
$provider = ServerProvider::query()->findOrFail($this->deleteId);
$provider->delete();
$this->refreshComponent([]);
$this->dispatchBrowserEvent('confirmed', true);
}
public function render(): View
{
return view('livewire.server-providers.providers-list', [
'providers' => ServerProvider::query()->latest()->get(),
]);
}
}

View File

@ -0,0 +1,24 @@
<?php
namespace App\Http\Livewire\ServerSettings;
use App\Models\Server;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class CheckConnection extends Component
{
public Server $server;
public function check(): void
{
$this->server->checkConnection();
session()->flash('status', 'checking-connection');
}
public function render(): View
{
return view('livewire.server-settings.check-connection');
}
}

View File

@ -0,0 +1,40 @@
<?php
namespace App\Http\Livewire\ServerSettings;
use App\Models\Server;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class EditServer extends Component
{
use RefreshComponentOnBroadcast;
public Server $server;
public string $name;
public string $ip;
public string $port;
public function mount(): void
{
$this->name = $this->server->name;
$this->ip = $this->server->ip;
$this->port = $this->server->port;
}
public function update(): void
{
app(\App\Actions\Server\EditServer::class)->edit($this->server, $this->all());
session()->flash('status', 'server-updated');
}
public function render(): View
{
return view('livewire.server-settings.edit-server');
}
}

View File

@ -0,0 +1,24 @@
<?php
namespace App\Http\Livewire\ServerSettings;
use App\Models\Server;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class RebootServer extends Component
{
public Server $server;
public function reboot(): void
{
$this->server->reboot();
session()->flash('status', 'rebooting-server');
}
public function render(): View
{
return view('livewire.server-settings.reboot-server');
}
}

View File

@ -0,0 +1,20 @@
<?php
namespace App\Http\Livewire\ServerSettings;
use App\Models\Server;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class ServerDetails extends Component
{
use RefreshComponentOnBroadcast;
public Server $server;
public function render(): View
{
return view('livewire.server-settings.server-details');
}
}

View File

@ -0,0 +1,33 @@
<?php
namespace App\Http\Livewire\ServerSshKeys;
use App\Models\Server;
use App\Models\SshKey;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class AddExistingKey extends Component
{
public Server $server;
public string $key_id = '';
public function add(): void
{
$key = SshKey::query()->findOrFail($this->all()['key_id']);
$key->deployTo($this->server);
$this->emitTo(ServerKeysList::class, '$refresh');
$this->dispatchBrowserEvent('added', true);
}
public function render(): View
{
return view('livewire.server-ssh-keys.add-existing-key', [
'keys' => SshKey::all(),
]);
}
}

View File

@ -0,0 +1,36 @@
<?php
namespace App\Http\Livewire\ServerSshKeys;
use App\Actions\SshKey\CreateSshKey;
use App\Models\Server;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class AddNewKey extends Component
{
public Server $server;
public string $name;
public string $public_key;
public function add(): void
{
$key = app(CreateSshKey::class)->create(
auth()->user(),
$this->all()
);
$key->deployTo($this->server);
$this->emitTo(ServerKeysList::class, '$refresh');
$this->dispatchBrowserEvent('added', true);
}
public function render(): View
{
return view('livewire.server-ssh-keys.add-new-key');
}
}

View File

@ -0,0 +1,40 @@
<?php
namespace App\Http\Livewire\ServerSshKeys;
use App\Models\Server;
use App\Models\SshKey;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class ServerKeysList extends Component
{
use RefreshComponentOnBroadcast;
public Server $server;
public int $deleteId;
protected $listeners = [
'$refresh',
];
public function delete(): void
{
$key = SshKey::query()->findOrFail($this->deleteId);
$key->deleteFrom($this->server);
$this->refreshComponent([]);
$this->dispatchBrowserEvent('confirmed', true);
}
public function render(): View
{
return view('livewire.server-ssh-keys.server-keys-list', [
'keys' => $this->server->sshKeys,
]);
}
}

View File

@ -0,0 +1,64 @@
<?php
namespace App\Http\Livewire\Servers;
use App\Enums\Database;
use App\Enums\OperatingSystem;
use App\Enums\ServerType;
use App\Enums\Webserver;
use App\Models\ServerProvider;
use Illuminate\Contracts\View\View;
use Livewire\Component;
use Throwable;
class CreateServer extends Component
{
public string $provider = 'custom';
public string $server_provider = '';
public string $type = ServerType::REGULAR;
public string $name;
public string $ip;
public string $port;
public string $os = OperatingSystem::UBUNTU22;
public string $webserver = Webserver::NGINX;
public string $database = Database::MYSQL80;
public string $php = '8.2';
public string $plan = '';
public string $region = '';
/**
* @throws Throwable
*/
public function submit(): void
{
$server = app(\App\Actions\Server\CreateServer::class)->create(
auth()->user(),
$this->all()
);
$this->redirect(route('servers.show', ['server' => $server]));
}
public function render(): View
{
$serverProviders = ServerProvider::query()->where('provider', $this->provider)->get();
return view(
'livewire.servers.create-server',
compact([
'serverProviders',
])
);
}
}

View File

@ -0,0 +1,29 @@
<?php
namespace App\Http\Livewire\Servers;
use App\Models\Server;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class DeleteServer extends Component
{
public Server $server;
public function mount(Server $server): void
{
$this->server = $server;
}
public function delete(): void
{
$this->server->delete();
$this->redirect(route('servers'));
}
public function render(): View
{
return view('livewire.servers.delete-server');
}
}

View File

@ -0,0 +1,20 @@
<?php
namespace App\Http\Livewire\Servers;
use App\Models\Server;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class ServersList extends Component
{
use RefreshComponentOnBroadcast;
public function render(): View
{
return view('livewire.servers.servers-list', [
'servers' => Server::all(),
]);
}
}

View File

@ -0,0 +1,31 @@
<?php
namespace App\Http\Livewire\Servers;
use App\Models\Server;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class ShowServer extends Component
{
use RefreshComponentOnBroadcast;
public Server $server;
public function refreshComponent(array $data): void
{
if (isset($data['type']) && $data['type'] == 'install-server-finished') {
$this->redirect(route('servers.show', ['server' => $this->server]));
return;
}
$this->emit('refreshComponent');
}
public function render(): View
{
return view('livewire.servers.show-server');
}
}

View File

@ -0,0 +1,49 @@
<?php
namespace App\Http\Livewire\Services;
use App\Models\Server;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class ServicesList extends Component
{
use RefreshComponentOnBroadcast;
public Server $server;
public function stop(int $id): void
{
$service = $this->server->services()->where('id', $id)->firstOrFail();
$service->stop();
$this->refreshComponent([]);
}
public function start(int $id): void
{
$service = $this->server->services()->where('id', $id)->firstOrFail();
$service->start();
$this->refreshComponent([]);
}
public function restart(int $id): void
{
$service = $this->server->services()->where('id', $id)->firstOrFail();
$service->restart();
$this->refreshComponent([]);
}
public function render(): View
{
return view('livewire.services.services-list', [
'services' => $this->server->services,
]);
}
}

View File

@ -0,0 +1,41 @@
<?php
namespace App\Http\Livewire\Sites;
use App\Models\Site;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class ChangePhpVersion extends Component
{
use RefreshComponentOnBroadcast;
public Site $site;
public string $version;
public function mount(Site $site): void
{
$this->version = $site->php_version;
}
public function change(): void
{
$this->site->changePHPVersion($this->version);
session()->flash('status', 'changing-php-version');
}
public function refreshComponent(array $data): void
{
if (isset($data['type'])) {
session()->flash('status', $data['type']);
}
}
public function render(): View
{
return view('livewire.sites.change-php-version');
}
}

View File

@ -0,0 +1,59 @@
<?php
namespace App\Http\Livewire\Sites;
use App\Enums\SiteType;
use App\Exceptions\SourceControlIsNotConnected;
use App\Models\Server;
use App\Models\SourceControl;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class CreateSite extends Component
{
use RefreshComponentOnBroadcast;
public Server $server;
public string $type = SiteType::LARAVEL;
public string $domain;
public string $alias;
public string $php_version = '';
public string $web_directory = 'public';
public string $source_control = '';
public string $repository;
public string $branch;
public bool $composer;
/**
* @throws SourceControlIsNotConnected
*/
public function create(): void
{
$site = app(\App\Actions\Site\CreateSite::class)->create(
$this->server,
$this->all()
);
$this->redirect(route('servers.sites.show', [
'server' => $site->server,
'site' => $site,
]));
}
public function render(): View
{
return view('livewire.sites.create-site', [
'sourceControls' => SourceControl::all(),
]);
}
}

View File

@ -0,0 +1,27 @@
<?php
namespace App\Http\Livewire\Sites;
use App\Models\Site;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class DeleteSite extends Component
{
use RefreshComponentOnBroadcast;
public Site $site;
public function delete(): void
{
$this->site->remove();
$this->redirect(route('servers.sites', ['server' => $this->site->server]));
}
public function render(): View
{
return view('livewire.sites.delete-site');
}
}

View File

@ -0,0 +1,20 @@
<?php
namespace App\Http\Livewire\Sites;
use App\Models\Site;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class ShowSite extends Component
{
use RefreshComponentOnBroadcast;
public Site $site;
public function render(): View
{
return view('livewire.sites.show-site');
}
}

View File

@ -0,0 +1,38 @@
<?php
namespace App\Http\Livewire\Sites;
use App\Models\Server;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class SitesList extends Component
{
use RefreshComponentOnBroadcast;
public Server $server;
public function refreshComponent(array $data): void
{
if (isset($data['type']) && $data['type'] == 'install-site-finished') {
$this->redirect(
route('servers.sites.show', [
'server' => $this->server,
'site' => $data['data']['site']['id'],
])
);
return;
}
$this->emit('refreshComponent');
}
public function render(): View
{
return view('livewire.sites.sites-list', [
'sites' => $this->server->sites()->latest()->get(),
]);
}
}

View File

@ -0,0 +1,36 @@
<?php
namespace App\Http\Livewire\SourceControls;
use App\Actions\SourceControl\ConnectSourceControl;
use App\Models\SourceControl;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class Bitbucket extends Component
{
public string $token;
public function mount(): void
{
$this->token = SourceControl::query()
->where('provider', \App\Enums\SourceControl::BITBUCKET)
->first()?->access_token ?? '';
}
public function connect(): void
{
app(ConnectSourceControl::class)->connect(\App\Enums\SourceControl::BITBUCKET, $this->all());
session()->flash('status', 'bitbucket-updated');
}
public function render(): View
{
return view('livewire.source-controls.bitbucket', [
'sourceControl' => SourceControl::query()
->where('provider', \App\Enums\SourceControl::BITBUCKET)
->first(),
]);
}
}

View File

@ -0,0 +1,36 @@
<?php
namespace App\Http\Livewire\SourceControls;
use App\Actions\SourceControl\ConnectSourceControl;
use App\Models\SourceControl;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class Github extends Component
{
public string $token;
public function mount(): void
{
$this->token = SourceControl::query()
->where('provider', \App\Enums\SourceControl::GITHUB)
->first()?->access_token ?? '';
}
public function connect(): void
{
app(ConnectSourceControl::class)->connect(\App\Enums\SourceControl::GITHUB, $this->all());
session()->flash('status', 'github-updated');
}
public function render(): View
{
return view('livewire.source-controls.github', [
'sourceControl' => SourceControl::query()
->where('provider', \App\Enums\SourceControl::GITHUB)
->first(),
]);
}
}

View File

@ -0,0 +1,36 @@
<?php
namespace App\Http\Livewire\SourceControls;
use App\Actions\SourceControl\ConnectSourceControl;
use App\Models\SourceControl;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class Gitlab extends Component
{
public string $token;
public function mount(): void
{
$this->token = SourceControl::query()
->where('provider', \App\Enums\SourceControl::GITLAB)
->first()?->access_token ?? '';
}
public function connect(): void
{
app(ConnectSourceControl::class)->connect(\App\Enums\SourceControl::GITLAB, $this->all());
session()->flash('status', 'gitlab-updated');
}
public function render(): View
{
return view('livewire.source-controls.gitlab', [
'sourceControl' => SourceControl::query()
->where('provider', \App\Enums\SourceControl::GITLAB)
->first(),
]);
}
}

View File

@ -0,0 +1,31 @@
<?php
namespace App\Http\Livewire\SshKeys;
use App\Actions\SshKey\CreateSshKey;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class AddKey extends Component
{
public string $name;
public string $public_key;
public function add(): void
{
app(CreateSshKey::class)->create(
auth()->user(),
$this->all()
);
$this->emitTo(KeysList::class, '$refresh');
$this->dispatchBrowserEvent('added', true);
}
public function render(): View
{
return view('livewire.ssh-keys.add-key');
}
}

View File

@ -0,0 +1,37 @@
<?php
namespace App\Http\Livewire\SshKeys;
use App\Models\SshKey;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class KeysList extends Component
{
use RefreshComponentOnBroadcast;
public int $deleteId;
protected $listeners = [
'$refresh',
];
public function delete(): void
{
$key = SshKey::query()->findOrFail($this->deleteId);
$key->delete();
$this->refreshComponent([]);
$this->dispatchBrowserEvent('confirmed', true);
}
public function render(): View
{
return view('livewire.ssh-keys.keys-list', [
'keys' => SshKey::query()->latest()->get(),
]);
}
}

View File

@ -0,0 +1,35 @@
<?php
namespace App\Http\Livewire\Ssl;
use App\Models\Site;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class CreateSsl extends Component
{
use RefreshComponentOnBroadcast;
public Site $site;
public string $type = '';
public string $certificate;
public string $private;
public function create(): void
{
app(\App\Actions\SSL\CreateSSL::class)->create($this->site, $this->all());
$this->emitTo(SslsList::class, '$refresh');
$this->dispatchBrowserEvent('created', true);
}
public function render(): View
{
return view('livewire.ssl.create-ssl');
}
}

View File

@ -0,0 +1,46 @@
<?php
namespace App\Http\Livewire\Ssl;
use App\Models\Site;
use App\Traits\HasToast;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class SslsList extends Component
{
use RefreshComponentOnBroadcast;
use HasToast;
public Site $site;
public int $deleteId;
public function delete(): void
{
$ssl = $this->site->ssls()->where('id', $this->deleteId)->firstOrFail();
$ssl->remove();
$this->refreshComponent([]);
$this->dispatchBrowserEvent('confirmed', true);
}
public function refreshComponent(array $data): void
{
if (isset($data['type']) && $data['type'] == 'deploy-ssl-failed') {
$this->toast()->error(__('SSL creation failed!'));
}
$this->emit('refreshComponent');
}
public function render(): View
{
return view('livewire.ssl.ssls-list', [
'ssls' => $this->site->ssls,
]);
}
}

View File

@ -0,0 +1,18 @@
<?php
namespace App\Http\Livewire;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class UserDropdown extends Component
{
protected $listeners = [
'$refresh',
];
public function render(): View
{
return view('livewire.user-dropdown');
}
}