Вход Регистрация
Файл: app/Http/Controllers/InstallController.php
Строк: 410
<?php

namespace AppHttpControllers;

use 
AppHttpRequestsInstallDatabaseRequest;
use 
AppHttpRequestsInstallConfigRequest;
use 
AppModelsUser;
use 
GuzzleHttpClient as HttpClient;
use 
IlluminateHttpRequest;
use 
IlluminateSupportFacadesArtisan;
use 
IlluminateSupportFacadesDB;
use 
IlluminateSupportFacadesHash;
use 
IlluminateSupportStr;

class 
InstallController extends Controller
{
    
/**
     * Show the Welcome page.
     *
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    
public function index()
    {
        return 
view('install.container', ['view' => 'install.welcome']);
    }

    
/**
     * Show the Requirements page.
     *
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    
public function requirements()
    {
        
$requirements config('install.extensions');

        
$results = [];
        
// Check the requirements
        
foreach ($requirements as $type => $extensions) {
            if (
strtolower($type) == 'php') {
                foreach (
$requirements[$type] as $extensions) {
                    
$results['extensions'][$type][$extensions] = true;

                    if (!
extension_loaded($extensions)) {
                        
$results['extensions'][$type][$extensions] = false;

                        
$results['errors'] = true;
                    }
                }
            } elseif (
strtolower($type) == 'apache') {
                foreach (
$requirements[$type] as $extensions) {
                    
// Check if the function exists
                    // Prevents from returning a false error
                    
if (function_exists('apache_get_modules')) {
                        
$results['extensions'][$type][$extensions] = true;

                        if (!
in_array($extensionsapache_get_modules())) {
                            
$results['extensions'][$type][$extensions] = false;

                            
$results['errors'] = true;
                        }
                    }
                }
            }
        }

        
// If the current php version doesn't meet the requirements
        
if (version_compare(PHP_VERSIONconfig('install.php_version')) == -1) {
            
$results['errors'] = true;
        }

        return 
view('install.container', ['view' => 'install.requirements''results' => $results]);
    }

    
/**
     * Show the Permissions page.
     *
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    
public function permissions()
    {
        
$permissions config('install.permissions');

        
$results = [];
        foreach (
$permissions as $type => $files) {
            foreach (
$files as $file) {
                if (
is_writable(base_path($file))) {
                    
$results['permissions'][$type][$file] = true;
                } else {
                    
$results['permissions'][$type][$file] = false;
                    
$results['errors'] = true;
                }
            }
        }

        return 
view('install.container', ['view' => 'install.permissions''results' => $results]);
    }

    
/**
     * Show the Database configuration page.
     *
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    
public function database()
    {
        return 
view('install.container', ['view' => 'install.database']);
    }

    
/**
     * Show the Admin credentials page.
     *
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    
public function account()
    {
        return 
view('install.container', ['view' => 'install.account']);
    }

    
/**
     * Show the Complete page.
     *
     * @return IlluminateContractsFoundationApplication|IlluminateContractsViewFactory|IlluminateViewView
     */
    
public function complete()
    {
        return 
view('install.container', ['view' => 'install.complete']);
    }

    
/**
     * Validate the database credentials, and write the .env config file.
     *
     * @param InstallConfigRequest $request
     * @return IlluminateHttpRedirectResponse
     */
    
public function storeConfig(InstallConfigRequest $request)
    {
        
$validateDatabase $this->validateDatabaseCredentials($request);
        if (
$validateDatabase !== true) {
            return 
back()->with('error'__('Invalid database credentials. ' $validateDatabase))->withInput();
        }

        
$validateConfigFile $this->writeEnvFile($request);
        if (
$validateConfigFile !== true) {
            return 
back()->with('error'__('Unable to save .env file, check file permissions. ' $validateConfigFile))->withInput();
        }

        return 
redirect()->route('install.account');
    }

    
/**
     * Migrate the database, and add the default admin user.
     *
     * @param InstallDatabaseRequest $request
     * @return IlluminateHttpRedirectResponse
     */
    
public function storeDatabase(InstallDatabaseRequest $request)
    {
        
$migrateDatabase $this->migrateDatabase();
        if (
$migrateDatabase !== true) {
            return 
back()->with('error'__('Failed to migrate the database. ' $migrateDatabase))->withInput();
        }

        
$createDefaultUser $this->createDefaultUser($request);
        if (
$createDefaultUser !== true) {
            return 
back()->with('error'__('Failed to create the default user. ' $createDefaultUser))->withInput();
        }

        
$saveInstalledFile $this->writeEnvInstalledStatus();
        if (
$saveInstalledFile !== true) {
            return 
back()->with('error'__('Failed to finalize the installation. ' $saveInstalledFile))->withInput();
        }

        if (
$request->input('newsletter')) {
            
$this->subscribeNewsletter($request);
        }

        return 
redirect()->route('install.complete');
    }

    
/**
     * Validate the database credentials.
     *
     * @return bool|string
     */
    
private function validateDatabaseCredentials(Request $request)
    {
        
$settings config("database.connections.mysql");

        
config([
            
'database' => [
                
'default' => 'mysql',
                
'connections' => [
                    
'mysql' => array_merge($settings, [
                        
'driver' => 'mysql',
                        
'host' => $request->input('database_hostname'),
                        
'port' => $request->input('database_port'),
                        
'database' => $request->input('database_name'),
                        
'username' => $request->input('database_username'),
                        
'password' => $request->input('database_password'),
                    ]),
                ],
            ],
        ]);

        
DB::purge();

        try {
            
DB::connection()->getPdo();

            return 
true;
        } catch (
Exception $e) {
            return 
$e->getMessage();
        }
    }

    
/**
     * Migrate the database.
     *
     * @return bool|string
     */
    
private function migrateDatabase()
    {
        try {
            
Artisan::call('migrate', ['--force' => true]);

            return 
true;
        } catch (
Exception $e) {
            return 
$e->getMessage();
        }
    }

    
/**
     * Create the default admin user.
     *
     * @return bool|string
     */
    
private function createDefaultUser(Request $request)
    {
        try {
            
$user = new User;

            
$user->name $request->input('name');
            
$user->email $request->input('email');
            
$user->password Hash::make($request->input('password'));
            
$user->locale config('app.locale');
            
$user->role 1;
            
$user->timezone 'UTC';
            
$user->api_token Str::random(64);

            
$user->save();

            
$user->markEmailAsVerified();
        } catch (
Exception $e) {
            return 
$e->getMessage();
        }

        return 
true;
    }

    
/**
     * Write the .env file.
     *
     * @return bool|string
     */
    
private function writeEnvFile(Request $request)
    {
        
$config =
            
"APP_NAME='".config('info.software.name')."'n".
            
"APP_ENV=productionn".
            
"APP_KEY=base64:'".base64_encode(Str::random(32))."'n".
            
"APP_DEBUG=falsen".
            
"APP_URL='".route('home')."'n".
            
"n".
            
"LOG_CHANNEL=stackn".
            
"n".
            
"DB_CONNECTION=mysqln".
            
"DB_HOST='".$request->input('database_hostname')."'n".
            
"DB_PORT=".$request->input('database_port')."n".
            
"DB_DATABASE='".$request->input('database_name')."'n".
            
"DB_USERNAME='".$request->input('database_username')."'n".
            
"DB_PASSWORD='".$request->input('database_password')."'n".
            
"n".
            
"BROADCAST_DRIVER=logn".
            
"CACHE_DRIVER=filen".
            
"QUEUE_CONNECTION=syncn".
            
"SESSION_DRIVER=filen".
            
"SESSION_LIFETIME=120n".
            
"n".
            
"REDIS_HOST=127.0.0.1n".
            
"REDIS_PASSWORD=nulln".
            
"REDIS_PORT=6379n".
            
"n".
            
"MAIL_DRIVER=smtpn".
            
"MAIL_HOST=smtp.mailtrap.ion".
            
"MAIL_PORT=2525n".
            
"MAIL_USERNAME=nulln".
            
"MAIL_PASSWORD=nulln".
            
"MAIL_ENCRYPTION=nulln".
            
"MAIL_FROM_ADDRESS=nulln".
            
"MAIL_FROM_NAME="${APP_NAME}"n".
            
"n".
            
"AWS_ACCESS_KEY_ID=n".
            
"AWS_SECRET_ACCESS_KEY=n".
            
"AWS_DEFAULT_REGION=us-east-1n".
            
"AWS_BUCKET=n".
            
"n".
            
"PUSHER_APP_ID=n".
            
"PUSHER_APP_KEY=n".
            
"PUSHER_APP_SECRET=n".
            
"PUSHER_APP_CLUSTER=mt1n".
            
"n".
            
"MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"n".
            
"MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"";

        try {
            
file_put_contents(base_path('.env'), $config);
        } catch (
Exception $e) {
            return 
$e->getMessage();
        }

        return 
true;
    }

    
/**
     * Write the installed status to the .env file.
     *
     * @return bool|string
     */
    
private function writeEnvInstalledStatus()
    {
        try {
            
file_put_contents(base_path('.env'), "nnAPP_INSTALLED=true"FILE_APPEND);
        } catch (
Exception $e) {
            return 
$e->getMessage();
        }

        return 
true;
    }

    
/**
     * Subscribe to the newsletter.
     *
     * @throws GuzzleHttpExceptionGuzzleException
     */
    
private function subscribeNewsletter(Request $request)
    {
        
$httpClient = new HttpClient(['timeout' => 10'verify' => false]);

        try {
            
$httpClient->request('POST''https://api.lunatio.com/newsletter',
                [
                    
'form_params' => [
                        
'email' => $request->input('email')
                    ]
                ]
            );
        } catch (
Exception $e) {}
    }
}
Онлайн: 4
Реклама