newRelease(); } } /** * Run a manual release scan * * @return false|string False if no new release, the new release number otherwise */ public function manualScan(): false|string { return $this->newRelease(); } /** * Run a release scan * * @return false|string False if no new release, the new release number otherwise */ protected function newRelease(): false|string { if ($latestReleaseData = json_decode($this->getLatestReleaseData())) { $githubVersion = Helpers::cleanVersionNumber($latestReleaseData->tag_name); $installedVersion = Helpers::cleanVersionNumber(config('2fauth.version')); if ($githubVersion && $installedVersion) { if ($githubVersion > $installedVersion && $latestReleaseData->prerelease == false && $latestReleaseData->draft == false) { Settings::set('latestRelease', $latestReleaseData->tag_name); return $latestReleaseData->tag_name; } else { Settings::delete('latestRelease'); } } } return false; } /** * Fetch releases on Github * * @return string|null */ protected function getLatestReleaseData(): string|null { try { $response = Http::retry(3, 100) ->get(config('2fauth.latestReleaseUrl')); if ($response->successful()) { Settings::set('lastRadarScan', time()); return $response->body(); } } catch (\Exception $exception) { Log::error('cannot reach latestReleaseUrl endpoint'); } return null; } }