JFIF  x x C         C     "        } !1AQa "q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz        w !1AQ aq"2B #3Rbr{ gilour
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Hash; use App\Models\Blogcategory; use App\Models\Brand; use App\Models\Category; use App\Models\Pagecategory; use App\Models\User; use Config; use DB; use Session; class InstallController extends Controller { /** * Show the application dashboard. * * @return \Illuminate\Contracts\Support\Renderable */ public function index() { if (DB::connection()->getDatabaseName() != 'db_name') { return redirect('/login'); } else { return redirect()->route('step0'); } } public function step0() { return view('install.step0'); } public function step1() { return view('install.step1'); } function step2($param1 = '') { if ($param1 == 'error') { $error = 'Purchase Code Verification Failed'; } else { $error = ""; } return view('install.step2', ['error' => $error]); } public function validatePurchaseCode(Request $request) { $data = $request->all(); $purchase_code = $data['purchase_code']; $validation_response = true; if ($validation_response == true) { // keeping the purchase code in users session session(['purchase_code' => $purchase_code]); session(['purchase_code_verified' => 1]); //move to step 3 return redirect()->route('step3'); } else { //remain on step 2 and show error session(['purchase_code_verified' => 0]); return redirect()->route('step0', ['error' => 'error']); } } public function api_request($code = '') { $product_code = $code; $personal_token = "FkA9UyDiQT0YiKwYLK3ghyFNRVV9SeUn"; $url = "https://api.envato.com/v3/market/author/sale?code=" . $product_code; $curl = curl_init($url); //setting the header for the rest of the api $bearer = 'bearer ' . $personal_token; $header = array(); $header[] = 'Content-length: 0'; $header[] = 'Content-type: application/json; charset=utf-8'; $header[] = 'Authorization: ' . $bearer; $verify_url = 'https://api.envato.com/v1/market/private/user/verify-purchase:' . $product_code . '.json'; $ch_verify = curl_init($verify_url . '?code=' . $product_code); curl_setopt($ch_verify, CURLOPT_HTTPHEADER, $header); curl_setopt($ch_verify, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch_verify, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch_verify, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch_verify, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); $cinit_verify_data = curl_exec($ch_verify); curl_close($ch_verify); $response = json_decode($cinit_verify_data, true); if (count($response['verify-purchase']) > 0) { return true; } else { return false; } } public function step3(Request $request) { $db_connection = ""; $data = $request->all(); $this->check_purchase_code_verification(); if ($data) { $hostname = $data['hostname']; $username = $data['username']; $password = $data['password']; $dbname = $data['dbname']; // check db connection using the above credentials $db_connection = $this->check_database_connection($hostname, $username, $password, $dbname); if ($db_connection == 'success') { // proceed to step 4 session(['hostname' => $hostname]); session(['username' => $username]); session(['password' => $password]); session(['dbname' => $dbname]); return redirect()->route('step4'); } else { return view('install.step3', ['db_connection' => $db_connection]); } } return view('install.step3', ['db_connection' => $db_connection]); } public function check_purchase_code_verification() { } public function check_database_connection($hostname, $username, $password, $dbname) { $newName = uniqid('db'); //example of unique name Config::set("database.connections." . $newName, [ "host" => $hostname, "port" => env('DB_PORT', '3306'), "database" => $dbname, "username" => $username, "password" => $password, 'driver' => env('DB_CONNECTION', 'mysql'), 'charset' => env('DB_CHARSET', 'utf8mb4'), ]); try { DB::connection($newName)->getPdo(); return 'success'; } catch (\Exception $e) { return 'Could not connect to the database. Please check your configuration.'; } } public function step4(Request $request) { return view('install.step4'); } public function confirmImport($param1 = '') { if ($param1 = 'confirm_import') { // write database.php here $this->configure_database(); // redirect to admin creation page return view('install.install'); } } public function confirmInstall() { // run sql $this->run_blank_sql(); // redirect to admin creation page return redirect()->route('finalizing_setup'); } public function configure_database() { // write database.php $data_db = file_get_contents(base_path('config/database.php')); $data_db = str_replace('db_name', session('dbname'), $data_db); $data_db = str_replace('db_user', session('username'), $data_db); $data_db = str_replace('db_pass', session('password'), $data_db); $data_db = str_replace('db_host', session('hostname'), $data_db); file_put_contents(base_path('config/database.php'), $data_db); } public function run_blank_sql() { // Set line to collect lines that wrap $templine = ''; // Read in entire file $lines = file(base_path('public/assets/install.sql')); // Loop through each line foreach ($lines as $line) { // Skip it if it's a comment if (substr($line, 0, 2) == '--' || $line == '') continue; // Add this line to the current templine we are creating $templine .= $line; // If it has a semicolon at the end, it's the end of the query so can process this templine if (substr(trim($line), -1, 1) == ';') { // Perform the query DB::statement($templine); // Reset temp variable to empty $templine = ''; } } } public function finalizingSetup(Request $request) { $data = $request->all(); if ($data) { /*system data*/ $system_data['system_name'] = $data['system_name']; $system_data['timezone'] = $data['timezone']; if (session('purchase_code')) { $system_data['purchase_code'] = session('purchase_code'); } foreach ($system_data as $key => $settings_data) { if (DB::table('settings')->where('type', $key)->count() == 0) { DB::table('settings')->where('type', $key)->insert([ 'type' => $key, 'description' => $settings_data, 'created_at' => date('Y-m-d H:i:s') ]); } else { DB::table('settings')->where('type', $key)->update([ 'description' => $settings_data, ]); } } /*admin data*/ $admin_data['name'] = $data['admin_name']; $admin_data['email'] = $data['admin_email']; $admin_data['status'] = 1; $admin_data['skills'] = json_encode([]); $admin_data['password'] = Hash::make($data['admin_password']); $admin_data['role'] = 'admin'; $admin_data['address'] = $data['admin_address']; $admin_data['phone'] = $data['admin_phone']; $admin_data['email_verified_at'] = date('Y-m-d H:i:s', time()); $admin_data['created_at'] = date('Y-m-d H:i:s'); DB::table('users')->insert($admin_data); return redirect()->route('success'); return view('install.success', ['admin_email' => $admin_data['email']]); } return view('install.finalizing_setup'); } public function success($param1 = '') { $this->configure_routes(); if ($param1 == 'login') { return view('auth.login'); } $admin_email = User::where('role', 'admin')->first()->email; $page_data['admin_email'] = $admin_email; $page_data['page_name'] = 'success'; return view('install.success', ['admin_email' => $admin_email]); } public function configure_routes() { $data_routes = file_get_contents(base_path('routes/web.php')); $data_routes = str_replace("Route::get('/', 'index')", "Route::get('/install_ended', 'index')", $data_routes); file_put_contents(base_path('routes/web.php'), $data_routes); } }