![]() Server : Apache/2.4.62 (Unix) OpenSSL/1.0.2k-fips System : Linux server1.richineiserver.com 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64 User : fdshops ( 1003) PHP Version : 8.2.21 Disable Function : NONE Directory : /home/fdshops/public_html/app/Http/Controllers/Install/ |
<?php namespace App\Http\Controllers\Install; use App\Http\Controllers\Controller; use App\Utils\InstallUtil; use Composer\Semver\Comparator; use Illuminate\Http\Request; use Illuminate\Support\Facades\Artisan; use Illuminate\Support\Facades\DB; use Symfony\Component\Console\Output\BufferedOutput; use Illuminate\Support\Facades\Abort; //use Illuminate\Support\Facades\Storage; class InstallController extends Controller { /** * All Utils instance. */ protected $outputLog; protected $appVersion; protected $macActivationKeyChecker; /** * Constructor * * @return void */ public function __construct() { $this->appVersion = config('author.app_version'); $this->env = config('app.env'); //Check if mac based activation key is required or not. $this->macActivationKeyChecker = false; if (file_exists(__DIR__.'/MacActivationKeyChecker.php')) { include_once __DIR__.'/MacActivationKeyChecker.php'; $this->macActivationKeyChecker = $mac_is_enabled; } $this->installSettings(); } /** * Initialize all install functions */ private function installSettings() { config(['app.debug' => true]); Artisan::call('config:clear'); Artisan::call('cache:clear'); } /** * Check if project is already installed then show 404 error */ private function isInstalled() { $envPath = base_path('.env'); if (file_exists($envPath)) { abort(404); } } /** * This function deletes .env file. */ private function deleteEnv() { $envPath = base_path('.env'); if ($envPath && file_exists($envPath)) { unlink($envPath); } return true; } /** * Installation * * @return \Illuminate\Http\Response */ public function index() { //Check for .env file $this->isInstalled(); $this->installSettings(); return view('install.index'); } public function checkServer() { //Check for .env file $this->isInstalled(); $this->installSettings(); $output = []; //Check for php version $output['php'] = (PHP_MAJOR_VERSION >= 7 && PHP_MINOR_VERSION >= 1) ? true : false; $output['php_version'] = PHP_VERSION; //Check for php extensions $output['openssl'] = extension_loaded('openssl') ? true : false; $output['pdo'] = extension_loaded('pdo') ? true : false; $output['mbstring'] = extension_loaded('mbstring') ? true : false; $output['tokenizer'] = extension_loaded('tokenizer') ? true : false; $output['xml'] = extension_loaded('xml') ? true : false; $output['curl'] = extension_loaded('curl') ? true : false; $output['zip'] = extension_loaded('zip') ? true : false; $output['gd'] = extension_loaded('gd') ? true : false; //Check for writable permission. storage and the bootstrap/cache directories should be writable by your web server $output['storage_writable'] = is_writable(storage_path()); $output['cache_writable'] = is_writable(base_path('bootstrap/cache')); $output['next'] = $output['php'] && $output['openssl'] && $output['pdo'] && $output['mbstring'] && $output['tokenizer'] && $output['xml'] && $output['curl'] && $output['zip'] && $output['gd'] && $output['storage_writable'] && $output['cache_writable']; return view('install.check-server') ->with(compact('output')); } public function details() { //Check for .env file $this->isInstalled(); $this->installSettings(); //Check if .env.example is present or not. $env_example = base_path('.env.example'); if (! file_exists($env_example)) { exit("<b>.env.example file not found in <code>$env_example</code></b> <br/><br/> - In the downloaded codebase you will find .env.example file, please upload it and refresh this page."); } return view('install.details') ->with('activation_key', $this->macActivationKeyChecker); } public function postDetails(Request $request) { //Check for .env file $this->isInstalled(); $this->installSettings(); try { ini_set('max_execution_time', 0); ini_set('memory_limit', '512M'); $validatedData = $request->validate( [ 'APP_NAME' => 'required', 'ENVATO_PURCHASE_CODE' => 'required', 'DB_DATABASE' => 'required', 'DB_USERNAME' => 'required', 'DB_PASSWORD' => 'required', 'DB_HOST' => 'required', 'DB_PORT' => 'required', ], [ 'APP_NAME.required' => 'App Name is required', 'ENVATO_PURCHASE_CODE.required' => 'Envaot Purchase code is required', 'DB_DATABASE.required' => 'Database Name is required', 'DB_USERNAME.required' => 'Database Username is required', 'DB_PASSWORD.required' => 'Database Password is required', 'DB_HOST.required' => 'Database Host is required', 'DB_PORT.required' => 'Database port is required', ] ); $this->outputLog = new BufferedOutput; $input = $request->only(['APP_NAME', 'APP_TITLE', 'DB_HOST', 'DB_PORT', 'DB_DATABASE', 'DB_USERNAME', 'DB_PASSWORD', 'ENVATO_PURCHASE_CODE', 'ENVATO_EMAIL', 'ENVATO_USERNAME', 'MAIL_MAILER', 'MAIL_FROM_ADDRESS', 'MAIL_FROM_NAME', 'MAIL_HOST', 'MAIL_PORT', 'MAIL_ENCRYPTION', 'MAIL_USERNAME', 'MAIL_PASSWORD', ]); $input['APP_DEBUG'] = 'false'; $input['APP_URL'] = url('/'); $input['APP_ENV'] = 'live'; //Check for database details $mysql_link = @mysqli_connect($input['DB_HOST'], $input['DB_USERNAME'], $input['DB_PASSWORD'], $input['DB_DATABASE'], $input['DB_PORT']); if (mysqli_connect_errno()) { $msg = '<b>ERROR</b>: Failed to connect to MySQL: '.mysqli_connect_error(); $msg .= "<br/>Provide correct details for 'Database Host', 'Database Port', 'Database Name', 'Database Username', 'Database Password'."; return redirect() ->back() ->with('error', $msg); } //pos boot // $return = pos_boot($input['APP_URL'], __DIR__, $input['ENVATO_PURCHASE_CODE'], $input['ENVATO_EMAIL'], $input['ENVATO_USERNAME']); // if (! empty($return)) { // return $return; // } //Check for activation key if ($this->macActivationKeyChecker) { $licence_code = $request->get('MAC_LICENCE_CODE'); $licence_valid = mac_verify_licence_code($licence_code); if (! $licence_valid) { return redirect()->back() ->with('error', 'Invalid Activation Licence Code!!') ->withInput(); exit('Invalid Purchase Code'); } $input['MAC_LICENCE_CODE'] = $licence_code; } //Get .env file details and write the contents in it. $envPathExample = base_path('.env.example'); $envPath = base_path('.env'); $env_lines = file($envPathExample); foreach ($input as $index => $value) { foreach ($env_lines as $key => $line) { //Check if present then replace it. if (strpos($line, $index) !== false) { $env_lines[$key] = $index.'="'.$value.'"'.PHP_EOL; } } } //TODO: Remove false & automate the process of creating .env file. if (false) { // $fp = fopen($envPath, 'w'); // fwrite($fp, implode('', $env_lines)); // fclose($fp); // //Artisan commands // $this->runArtisanCommands(); // return redirect()->route('install.success'); } else { $this->deleteEnv(); //Show intermediate steps if not able to copy file. $envContent = implode('', $env_lines); return view('install.envText') ->with(compact('envContent', 'envPath')); } } catch (Exception $e) { $this->deleteEnv(); return redirect()->back() ->with('error', 'Something went wrong, please try again!!'); } } //Generate key, migrate and seed private function runArtisanCommands() { ini_set('max_execution_time', 0); ini_set('memory_limit', '512M'); $this->installSettings(); DB::statement('SET default_storage_engine=INNODB;'); Artisan::call('migrate:fresh', ['--force' => true]); Artisan::call('db:seed', ['--force' => true]); //Artisan::call('storage:link'); } public function installAlternate(Request $request) { try { $this->installSettings(); //Check if no .env file than redirect back. $envPath = base_path('.env'); if (! file_exists($envPath)) { return redirect()->route('install.details') ->with('error', 'Looks like you haven\'t created the .env file '.$envPath); } $this->runArtisanCommands(); return redirect()->route('install.success'); } catch (Exception $e) { $this->deleteEnv(); return redirect()->back() ->with('error', 'Something went wrong, please try again!!'); } } public function success() { return view('install.success'); } public function updateConfirmation() { $installUtil = new installUtil(); $db_version = $installUtil->getSystemInfo('db_version'); if (Comparator::greaterThan($this->appVersion, $db_version)) { return view('install.update_confirmation'); } else { // abort(404); exit("<b> Update already done to Version <code>".$db_version."</code></b>"); } } //Updating public function update(Request $request) { //Check if db_version is same as app_verison then 404 //If app_version > db_version - run update script. //Else there is some problem. $version = null; try { DB::beginTransaction(); ini_set('max_execution_time', 0); ini_set('memory_limit', '512M'); // $input = $request->only(['ENVATO_PURCHASE_CODE', 'ENVATO_USERNAME', 'ENVATO_EMAIL']); // $return = pos_boot(config('app.url'), __DIR__, $input['ENVATO_PURCHASE_CODE'], $input['ENVATO_EMAIL'], $input['ENVATO_USERNAME'], 1); // if (! empty($return)) { // return $return; // } //Static version value is passed for 1.2 version. if ($version == 1.2) { exit('Update not supported. Kindly install again.'); } elseif (is_null($version)) { $installUtil = new installUtil(); $db_version = $installUtil->getSystemInfo('db_version'); //if($db_version < $this->appVersion){ if (Comparator::greaterThan($this->appVersion, $db_version)) { ini_set('max_execution_time', 0); ini_set('memory_limit', '512M'); $this->installSettings(); DB::statement('SET default_storage_engine=INNODB;'); Artisan::call('migrate', ['--force' => true]); Artisan::call('module:publish'); Artisan::call('passport:install', ['--force' => true]); $installUtil->setSystemInfo('db_version', $this->appVersion); } else { abort(404); } } else { abort(404); } @DB::commit(); $output = ['success' => 1, 'msg' => 'Updated Succesfully to version '.$this->appVersion.' !!', ]; return redirect('login')->with('status', $output); } catch (Exception $e) { DB::rollBack(); exit($e->getMessage()); } } }