user()->currentTeam()->id; return [ "echo-private:team.{$teamId},ServerPackageUpdated" => 'checkForUpdatesDispatch', ]; } public function mount() { if (! auth()->user()->isAdmin()) { abort(403); } $this->parameters = get_route_parameters(); $this->server = Server::ownedByCurrentTeam()->whereUuid($this->parameters['server_uuid'])->firstOrFail(); } public function checkForUpdatesDispatch() { $this->totalUpdates = null; $this->updates = null; $this->error = null; $this->osId = null; $this->packageManager = null; $this->dispatch('checkForUpdatesDispatch'); } public function checkForUpdates() { $job = CheckUpdates::run($this->server); if (isset($job['error'])) { $this->error = data_get($job, 'error', 'Something went wrong.'); } else { $this->totalUpdates = data_get($job, 'total_updates', 0); $this->updates = data_get($job, 'updates', []); $this->osId = data_get($job, 'osId', null); $this->packageManager = data_get($job, 'package_manager', null); } } public function updateAllPackages() { if (! $this->packageManager || ! $this->osId) { $this->dispatch('error', message: 'Run “Check for updates” first.'); return; } try { $activity = UpdatePackage::run( server: $this->server, packageManager: $this->packageManager, osId: $this->osId, all: true ); $this->dispatch('activityMonitor', $activity->id, ServerPackageUpdated::class); } catch (\Exception $e) { $this->dispatch('error', message: $e->getMessage()); } } public function updatePackage($package) { try { $activity = UpdatePackage::run(server: $this->server, packageManager: $this->packageManager, osId: $this->osId, package: $package); $this->dispatch('activityMonitor', $activity->id, ServerPackageUpdated::class); } catch (\Exception $e) { $this->dispatch('error', message: $e->getMessage()); } } public function sendTestEmail() { if (! isDev()) { $this->dispatch('error', message: 'Test email functionality is only available in development mode.'); return; } try { // Get current patch data or create test data if none exists $testPatchData = $this->createTestPatchData(); // Send test notification $this->server->team->notify(new ServerPatchCheck($this->server, $testPatchData)); $this->dispatch('success', 'Test email sent successfully! Check your email inbox.'); } catch (\Exception $e) { $this->dispatch('error', message: 'Failed to send test email: '.$e->getMessage()); } } private function createTestPatchData(): array { // If we have real patch data, use it if (isset($this->updates) && is_array($this->updates) && count($this->updates) > 0) { return [ 'total_updates' => $this->totalUpdates, 'updates' => $this->updates, 'osId' => $this->osId, 'package_manager' => $this->packageManager, ]; } // Otherwise create realistic test data return [ 'total_updates' => 8, 'updates' => [ [ 'package' => 'docker-ce', 'current_version' => '24.0.7-1', 'new_version' => '25.0.1-1', ], [ 'package' => 'nginx', 'current_version' => '1.20.2-1', 'new_version' => '1.22.1-1', ], [ 'package' => 'kernel-generic', 'current_version' => '5.15.0-89', 'new_version' => '5.15.0-91', ], [ 'package' => 'openssh-server', 'current_version' => '8.9p1-3', 'new_version' => '9.0p1-1', ], [ 'package' => 'curl', 'current_version' => '7.81.0-1', 'new_version' => '7.85.0-1', ], [ 'package' => 'git', 'current_version' => '2.34.1-1', 'new_version' => '2.39.1-1', ], [ 'package' => 'python3', 'current_version' => '3.10.6-1', 'new_version' => '3.11.0-1', ], [ 'package' => 'htop', 'current_version' => '3.2.1-1', 'new_version' => '3.2.2-1', ], ], 'osId' => $this->osId ?? 'ubuntu', 'package_manager' => $this->packageManager ?? 'apt', ]; } public function render() { return view('livewire.server.security.patches'); } }