connection = $connection; $this->serverRepository = $serverRepository; } /** * Update the details for a single server instance. * * @throws \Throwable */ public function handle(Server $server, array $data): Server { return $this->connection->transaction(function () use ($data, $server) { $owner = $server->owner_id; $server->forceFill([ 'external_id' => Arr::get($data, 'external_id'), 'owner_id' => Arr::get($data, 'owner_id'), 'name' => Arr::get($data, 'name'), 'description' => Arr::get($data, 'description') ?? '', ])->saveOrFail(); // If the owner_id value is changed we need to revoke any tokens that exist for the server // on the Wings instance so that the old owner no longer has any permission to access the // websockets. if ($server->owner_id !== $owner) { try { $this->serverRepository->setServer($server)->revokeUserJTI($owner); } catch (DaemonConnectionException $exception) { // Do nothing. A failure here is not ideal, but it is likely to be caused by Wings // being offline, or in an entirely broken state. Remeber, these tokens reset every // few minutes by default, we're just trying to help it along a little quicker. } } return $server; }); } }