cacheVersionData(); } /** * Get the latest version of the panel from the CDN servers. */ public function getPanel(): string { return Arr::get(self::$result, 'panel') ?? 'error'; } /** * Get the latest version of the daemon from the CDN servers. */ public function getDaemon(): string { return Arr::get(self::$result, 'wings') ?? 'error'; } /** * Get the URL to the discord server. */ public function getDiscord(): string { return Arr::get(self::$result, 'discord') ?? 'https://pterodactyl.io/discord'; } /** * Get the URL for donations. */ public function getDonations(): string { return Arr::get(self::$result, 'donations') ?? 'https://github.com/sponsors/matthewpi'; } /** * Determine if the current version of the panel is the latest. */ public function isLatestPanel(): bool { if (config('app.version') === 'canary') { return true; } return version_compare(config('app.version'), $this->getPanel()) >= 0; } /** * Determine if a passed daemon version string is the latest. */ public function isLatestDaemon(string $version): bool { if ($version === 'develop') { return true; } return version_compare($version, $this->getDaemon()) >= 0; } /** * Keeps the versioning cache up-to-date with the latest results from the CDN. */ protected function cacheVersionData(): array { return $this->cache->remember(self::VERSION_CACHE_KEY, CarbonImmutable::now()->addMinutes(config('pterodactyl.cdn.cache_time', 60)), function () { try { $response = $this->client->request('GET', config('pterodactyl.cdn.url')); if ($response->getStatusCode() === 200) { return json_decode($response->getBody(), true); } throw new CdnVersionFetchingException(); } catch (Exception) { return []; } }); } }