mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-10-31 13:41:09 -04:00 
			
		
		
		
	Refactor Self Update Endpoints and Add Update Console Command
This commit is contained in:
		
				
					committed by
					
						 Mohit Panjwani
						Mohit Panjwani
					
				
			
			
				
	
			
			
			
						parent
						
							a24d8d3ebc
						
					
				
				
					commit
					183953f4c4
				
			| @ -2,28 +2,43 @@ | ||||
| namespace Crater\Space; | ||||
|  | ||||
| use File; | ||||
| use ZipArchive; | ||||
| use Artisan; | ||||
| use GuzzleHttp\Exception\RequestException; | ||||
| use Crater\Space\SiteApi; | ||||
| use Crater\Events\UpdateFinished; | ||||
| use Crater\Setting; | ||||
| use Illuminate\Http\Request; | ||||
| use ZipArchive; | ||||
|  | ||||
| class Updater | ||||
| { | ||||
|     use SiteApi; | ||||
|  | ||||
|     public static function update($installed, $version) | ||||
|     public static function checkForUpdate($installed_version) | ||||
|     { | ||||
|         $data = null; | ||||
|         if(env('APP_ENV') === 'development') | ||||
|         { | ||||
|             $url = 'https://craterapp.com/downloads/check/latest/'. $installed_version . '?type=update&is_dev=1'; | ||||
|         } else { | ||||
|             $url = 'https://craterapp.com/downloads/check/latest/'. $installed_version . '?type=update'; | ||||
|         } | ||||
|  | ||||
|         $response = static::getRemote($url, ['timeout' => 100, 'track_redirects' => true]); | ||||
|  | ||||
|         if ($response && ($response->getStatusCode() == 200)) { | ||||
|             $data = $response->getBody()->getContents(); | ||||
|         } | ||||
|  | ||||
|         return json_decode($data); | ||||
|     } | ||||
|  | ||||
|     public static function download($new_version) | ||||
|     { | ||||
|         $data = null; | ||||
|         $path = null; | ||||
|  | ||||
|         if(env('APP_ENV') === 'development') | ||||
|         { | ||||
|             $url = 'https://craterapp.com/downloads/file/'.$version.'?type=update&is_dev=1'; | ||||
|         if (env('APP_ENV') === 'development') { | ||||
|             $url = 'https://craterapp.com/downloads/file/' . $new_version . '?type=update&is_dev=1'; | ||||
|         } else { | ||||
|             $url = 'https://craterapp.com/downloads/file/'.$version.'?type=update'; | ||||
|             $url = 'https://craterapp.com/downloads/file/' . $new_version . '?type=update'; | ||||
|         } | ||||
|  | ||||
|         $response = static::getRemote($url, ['timeout' => 100, 'track_redirects' => true]); | ||||
| @ -44,66 +59,68 @@ class Updater | ||||
|         } | ||||
|  | ||||
|         // Create temp directory | ||||
|         $path = 'temp-' . md5(mt_rand()); | ||||
|         $path2 = 'temp2-' . md5(mt_rand()); | ||||
|         $temp_path = storage_path('app') . '/' . $path; | ||||
|         $temp_path2 = storage_path('app') . '/' . $path2; | ||||
|         $temp_dir = storage_path('app/temp-' . md5(mt_rand())); | ||||
|  | ||||
|         if (!File::isDirectory($temp_path)) { | ||||
|             File::makeDirectory($temp_path); | ||||
|             File::makeDirectory($temp_path2); | ||||
|         if (!File::isDirectory($temp_dir)) { | ||||
|             File::makeDirectory($temp_dir); | ||||
|         } | ||||
|  | ||||
|         try { | ||||
|         $zip_file_path = $temp_dir . '/upload.zip'; | ||||
|  | ||||
|             $file = $temp_path . '/upload.zip'; | ||||
|         // Add content to the Zip file | ||||
|         $uploaded = is_int(file_put_contents($zip_file_path, $data)) ? true : false; | ||||
|  | ||||
|             // Add content to the Zip file | ||||
|             $uploaded = is_int(file_put_contents($file, $data)) ? true : false; | ||||
|  | ||||
|             if (!$uploaded) { | ||||
|                 return false; | ||||
|             } | ||||
|  | ||||
|             // Unzip the file | ||||
|             $zip = new ZipArchive(); | ||||
|  | ||||
|             if ($zip->open($file)) { | ||||
|                 $zip->extractTo($temp_path2); | ||||
|             } | ||||
|  | ||||
|             $zip->close(); | ||||
|  | ||||
|             // Delete zip file | ||||
|             File::delete($file); | ||||
|  | ||||
|             if (!File::copyDirectory($temp_path2.'/Crater', base_path())) { | ||||
|                 return false; | ||||
|             } | ||||
|  | ||||
|             // Delete temp directory | ||||
|             File::deleteDirectory($temp_path); | ||||
|             File::deleteDirectory($temp_path2); | ||||
|  | ||||
|             return [ | ||||
|                 'success' => true, | ||||
|                 'error' => false, | ||||
|                 'data' => [] | ||||
|             ]; | ||||
|         } catch (\Exception $e) { | ||||
|  | ||||
|             if (File::isDirectory($temp_path)) { | ||||
|                 // Delete temp directory | ||||
|                 File::deleteDirectory($temp_path); | ||||
|                 File::deleteDirectory($temp_path2); | ||||
|             } | ||||
|  | ||||
|             return [ | ||||
|                 'success' => false, | ||||
|                 'error' => 'Update error', | ||||
|                 'data' => [] | ||||
|             ]; | ||||
|         if (!$uploaded) { | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         return $zip_file_path; | ||||
|     } | ||||
|  | ||||
|     public static function unzip($zip_file_path) | ||||
|     { | ||||
|         if(!file_exists($zip_file_path)) { | ||||
|             throw new \Exception('Zip file not found'); | ||||
|         } | ||||
|  | ||||
|         $temp_extract_dir = storage_path('app/temp2-' . md5(mt_rand())); | ||||
|  | ||||
|         if (!File::isDirectory($temp_extract_dir)) { | ||||
|             File::makeDirectory($temp_extract_dir); | ||||
|         } | ||||
|         // Unzip the file | ||||
|         $zip = new ZipArchive(); | ||||
|  | ||||
|         if ($zip->open($zip_file_path)) { | ||||
|             $zip->extractTo($temp_extract_dir); | ||||
|         } | ||||
|  | ||||
|         $zip->close(); | ||||
|  | ||||
|         // Delete zip file | ||||
|         File::delete($zip_file_path); | ||||
|  | ||||
|         return $temp_extract_dir; | ||||
|     } | ||||
|  | ||||
|     public static function copyFiles($temp_extract_dir) | ||||
|     { | ||||
|  | ||||
|         if (!File::copyDirectory($temp_extract_dir . '/Crater', base_path())) { | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         // Delete temp directory | ||||
|         File::deleteDirectory($temp_extract_dir); | ||||
|  | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     public static function migrateUpdate() | ||||
|     { | ||||
|         Artisan::call('migrate --force'); | ||||
|  | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     public static function finishUpdate($installed, $version) | ||||
| @ -117,22 +134,4 @@ class Updater | ||||
|         ]; | ||||
|     } | ||||
|  | ||||
|     public static function checkForUpdate() | ||||
|     { | ||||
|         $data = null; | ||||
|         if(env('APP_ENV') === 'development') | ||||
|         { | ||||
|             $url = 'https://craterapp.com/downloads/check/latest/'. Setting::getSetting('version') . '?type=update&is_dev=1'; | ||||
|         } else { | ||||
|             $url = 'https://craterapp.com/downloads/check/latest/'. Setting::getSetting('version') . '?type=update'; | ||||
|         } | ||||
|  | ||||
|         $response = static::getRemote($url, ['timeout' => 100, 'track_redirects' => true]); | ||||
|  | ||||
|         if ($response && ($response->getStatusCode() == 200)) { | ||||
|             $data = $response->getBody()->getContents(); | ||||
|         } | ||||
|  | ||||
|         return json_decode($data); | ||||
|     } | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user