LinkStack/app/Http/Controllers/InstallerController.php

173 lines
6.2 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Auth\Events\Registered;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\DB;
use GeoSot\EnvEditor\Controllers\EnvController;
use GeoSot\EnvEditor\Exceptions\EnvException;
use GeoSot\EnvEditor\Helpers\EnvFileContentManager;
use GeoSot\EnvEditor\Helpers\EnvFilesManager;
use GeoSot\EnvEditor\Helpers\EnvKeysManager;
use GeoSot\EnvEditor\Facades\EnvEditor;
use GeoSot\EnvEditor\ServiceProvider;
use Auth;
use Exception;
use ZipArchive;
use Artisan;
use App\Models\User;
use App\Models\Admin;
use App\Models\Button;
use App\Models\Link;
use App\Models\Page;
class InstallerController extends Controller
{
public function showInstaller()
{
return view('installer/installer');
}
public function db(request $request)
{
if($request->database == 'MySQL'){
return redirect(url('?mysql'));
}else{
return redirect(url('?4'));
}
}
public function createAdmin(request $request)
{
$email = $request->email;
$password = $request->password;
$handle = $request->handle;
$name = $request->name;
$file = base_path('INSTALLERLOCK');
if (!file_exists($file)) {
$handleFile = fopen($file, 'w') or die('Cannot create file: '.$file);
fclose($handleFile);
}
try{EnvEditor::addKey('ADMIN_EMAIL', $email);}catch(Exception $e){}
if(DB::table('users')->count() == '0'){
Schema::disableForeignKeyConstraints();
DB::table('users')->delete();
DB::table('users')->truncate();
Schema::enableForeignKeyConstraints();
$user = User::create([
'name' => $name,
'email' => $email,
'email_verified_at' => '0001-01-01 00:00:00',
'password' => Hash::make($password),
'littlelink_name' => $handle,
'littlelink_description' => 'admin page',
'block' => 'no',
]);
User::where('id', '1')->update(['role' => 'admin']);
}
return redirect(url('?5'));
}
public function mysql(request $request)
{
$DB_CONNECTION = 'mysql';
$DB_HOST = $request->host;
$DB_PORT = $request->port;
$DB_DATABASE = $request->name;
$DB_USERNAME = $request->username;
$DB_PASSWORD = $request->password;
if(EnvEditor::keyExists('DB_CONNECTION')){EnvEditor::editKey('DB_CONNECTION', $DB_CONNECTION);}else{EnvEditor::addKey('DB_CONNECTION', $DB_CONNECTION);}
if(EnvEditor::keyExists('DB_HOST')){EnvEditor::editKey('DB_HOST', $DB_HOST);}else{EnvEditor::addKey('DB_HOST', $DB_HOST);}
if(EnvEditor::keyExists('DB_PORT')){EnvEditor::editKey('DB_PORT', $DB_PORT);}else{EnvEditor::addKey('DB_PORT', $DB_PORT);}
if(EnvEditor::keyExists('DB_DATABASE')){EnvEditor::editKey('DB_DATABASE', $DB_DATABASE);}else{EnvEditor::addKey('DB_DATABASE', $DB_DATABASE);}
if(EnvEditor::keyExists('DB_USERNAME')){EnvEditor::editKey('DB_USERNAME', $DB_USERNAME);}else{EnvEditor::addKey('DB_USERNAME', $DB_USERNAME);}
if(EnvEditor::keyExists('DB_PASSWORD')){EnvEditor::editKey('DB_PASSWORD', $DB_PASSWORD);}else{EnvEditor::addKey('DB_PASSWORD', $DB_PASSWORD);}
return redirect(url('mysql-test'));
}
public function mysqlTest(request $request)
{
try {Artisan::call('migrate');} catch (exception $e) {$failed = "true";}
try {Artisan::call('db:seed --force');} catch (exception $e) {$failed = "true";}
try {Artisan::call('db:seed --class="PageSeeder" --force');} catch (exception $e) {$failed = "true";}
try {Artisan::call('db:seed --class="ButtonSeeder" --force');} catch (exception $e) {$failed = "true";}
try {$users = DB::table('buttons')->count(); $failed = false;} catch (exception $e) {$failed = true;}
if($failed == true){
if(EnvEditor::keyExists('DB_CONNECTION')){EnvEditor::editKey('DB_CONNECTION', 'sqlite');}else{EnvEditor::addKey('DB_CONNECTION', 'sqlite');}
if(EnvEditor::keyExists('DB_HOST')){EnvEditor::deleteKey('DB_HOST');}
if(EnvEditor::keyExists('DB_PORT')){EnvEditor::deleteKey('DB_PORT');}
if(EnvEditor::keyExists('DB_DATABASE')){EnvEditor::deleteKey('DB_DATABASE');}
if(EnvEditor::keyExists('DB_USERNAME')){EnvEditor::deleteKey('DB_USERNAME');}
if(EnvEditor::keyExists('DB_PASSWORD')){EnvEditor::deleteKey('DB_PASSWORD');}
return redirect(url('?error'));
}else{
return redirect(url('?4'));
}
}
public function options(request $request)
{
$user = User::find(1);
$llName = $user->littlelink_name;
if($request->register == 'Yes'){
if(EnvEditor::keyExists('ALLOW_REGISTRATION')){EnvEditor::editKey('ALLOW_REGISTRATION', 'true');}else{EnvEditor::addKey('ALLOW_REGISTRATION', 'true');}
} else {
if(EnvEditor::keyExists('ALLOW_REGISTRATION')){EnvEditor::editKey('ALLOW_REGISTRATION', 'false');}else{EnvEditor::addKey('ALLOW_REGISTRATION', 'false');}
}
if($request->verify == 'Yes'){$value = "verified";}else{$value = "auth";}
if(EnvEditor::keyExists('REGISTER_AUTH')){EnvEditor::editKey('REGISTER_AUTH', $value);}
if($request->page == 'No'){$value = "";}else{$value = '"' . $llName . '"';}
if(EnvEditor::keyExists('HOME_URL')){EnvEditor::editKey('HOME_URL', $value);}
if(EnvEditor::keyExists('APP_NAME')){EnvEditor::editKey('APP_NAME', '"' . $request->app . '"');}
if(file_exists(base_path("INSTALLING"))){unlink(base_path("INSTALLING"));}
$file = base_path('INSTALLERLOCK');
if (file_exists($file)) {
unlink($file) or die('Cannot delete file: '.$file);
sleep(1);
}
return redirect(url('dashboard'));
}
public function editConfigInstaller(request $request)
{
$type = $request->type;
$entry = $request->entry;
$value = $request->value;
$value = '"' . $request->value . '"';
if(EnvEditor::keyExists($entry)){EnvEditor::editKey($entry, $value);}
return Redirect(url('dashboard'));
}
}