mirror of
				https://github.com/pelican-dev/panel.git
				synced 2025-10-31 07:16:51 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			83 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Services\Helpers;
 | |
| 
 | |
| use Exception;
 | |
| use Illuminate\Support\Facades\Http;
 | |
| 
 | |
| class SoftwareVersionService
 | |
| {
 | |
|     public function latestPanelVersion(): string
 | |
|     {
 | |
|         $key = 'panel:latest_version';
 | |
|         if (cache()->get($key) === 'error') {
 | |
|             cache()->forget($key);
 | |
|         }
 | |
| 
 | |
|         return cache()->remember($key, now()->addMinutes(config('panel.cdn.cache_time', 60)), function () {
 | |
|             try {
 | |
|                 $response = Http::timeout(5)->connectTimeout(1)->get('https://api.github.com/repos/pelican-dev/panel/releases/latest')->throw()->json();
 | |
| 
 | |
|                 return trim($response['tag_name'], 'v');
 | |
|             } catch (Exception) {
 | |
|                 return 'error';
 | |
|             }
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     public function latestWingsVersion(): string
 | |
|     {
 | |
|         $key = 'wings:latest_version';
 | |
|         if (cache()->get($key) === 'error') {
 | |
|             cache()->forget($key);
 | |
|         }
 | |
| 
 | |
|         return cache()->remember($key, now()->addMinutes(config('panel.cdn.cache_time', 60)), function () {
 | |
|             try {
 | |
|                 $response = Http::timeout(5)->connectTimeout(1)->get('https://api.github.com/repos/pelican-dev/wings/releases/latest')->throw()->json();
 | |
| 
 | |
|                 return trim($response['tag_name'], 'v');
 | |
|             } catch (Exception) {
 | |
|                 return 'error';
 | |
|             }
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     public function isLatestPanel(): bool
 | |
|     {
 | |
|         if (config('app.version') === 'canary') {
 | |
|             return true;
 | |
|         }
 | |
| 
 | |
|         return version_compare(config('app.version'), $this->latestPanelVersion()) >= 0;
 | |
|     }
 | |
| 
 | |
|     public function isLatestWings(string $version): bool
 | |
|     {
 | |
|         if ($version === 'develop') {
 | |
|             return true;
 | |
|         }
 | |
| 
 | |
|         return version_compare($version, $this->latestWingsVersion()) >= 0;
 | |
|     }
 | |
| 
 | |
|     public function currentPanelVersion(): string
 | |
|     {
 | |
|         return cache()->remember('panel:current_version', now()->addMinutes(5), function () {
 | |
|             if (file_exists(base_path('.git/HEAD'))) {
 | |
|                 $head = explode(' ', file_get_contents(base_path('.git/HEAD')));
 | |
| 
 | |
|                 if (array_key_exists(1, $head)) {
 | |
|                     $path = base_path('.git/' . trim($head[1]));
 | |
| 
 | |
|                     if (file_exists($path)) {
 | |
|                         return 'canary (' . substr(file_get_contents($path), 0, 7) . ')';
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             return config('app.version');
 | |
|         });
 | |
|     }
 | |
| }
 | 
