service = $service; } /** * @throws Throwable */ public function handle(): void { $this->setUpFirewall(); $this->downloadSource(); $this->setUpVHost(); $this->restartPHP(); } /** * @throws Throwable */ private function setUpFirewall(): void { $this->firewallRule = FirewallRule::query() ->where('server_id', $this->service->server_id) ->where('port', '54331') ->first(); if ($this->firewallRule) { $this->firewallRule->source = $this->service->type_data['allowed_ip']; $this->firewallRule->save(); } else { $this->firewallRule = app(CreateRule::class)->create( $this->service->server, [ 'type' => 'allow', 'protocol' => 'tcp', 'port' => '54331', 'source' => $this->service->type_data['allowed_ip'], 'mask' => '0', ] ); } } /** * @throws Throwable */ private function downloadSource(): void { $this->service->server->ssh()->exec( new DownloadPHPMyAdminCommand(), 'download-phpmyadmin' ); } /** * @throws Throwable */ private function setUpVHost(): void { $vhost = File::get(resource_path('commands/webserver/nginx/phpmyadmin-vhost.conf')); $vhost = Str::replace('__php_version__', $this->service->server->defaultService('php')->version, $vhost); $this->service->server->ssh()->exec( new CreateNginxPHPMyAdminVHostCommand($vhost), 'create-phpmyadmin-vhost' ); } private function restartPHP(): void { $this->service->server->service( 'php', $this->service->type_data['php'] )?->restart(); } /** * @throws Throwable */ public function failed(Throwable $throwable): Throwable { $this->firewallRule?->removeFromServer(); throw $throwable; } }