From 280768d001fd298c2a14e4415bd43895a8d517d6 Mon Sep 17 00:00:00 2001 From: Andy Heathershaw Date: Tue, 5 Sep 2017 14:59:18 +0100 Subject: [PATCH] #25: Updated the installer layout for BS4-beta. Added a redirect when the vendor autoload file doesn't exist to install.php, which can download and install Composer. --- public/index.php | 8 + public/install.php | 178 ++++++++++++------ .../views/install/administrator.blade.php | 2 +- resources/views/install/check.blade.php | 2 +- resources/views/install/database.blade.php | 2 +- resources/views/install/navbar.blade.php | 8 +- 6 files changed, 138 insertions(+), 62 deletions(-) diff --git a/public/index.php b/public/index.php index 716731f..82fa173 100644 --- a/public/index.php +++ b/public/index.php @@ -7,6 +7,14 @@ * @author Taylor Otwell */ +/* Added by Andy - check to see if Composer/vendors are installed */ +if (!file_exists(__DIR__.'/../vendor/autoload.php')) +{ + header('Location: install.php'); + exit(); +} +/* End Added by Andy */ + /* |-------------------------------------------------------------------------- | Register The Auto Loader diff --git a/public/install.php b/public/install.php index e1f6a3a..8fed6ec 100644 --- a/public/install.php +++ b/public/install.php @@ -2,96 +2,168 @@ namespace BtwInstaller; -use Illuminate\Support\Facades\Artisan; -use Symfony\Component\Translation\Loader\PhpFileLoader; -use Symfony\Component\Translation\Translator; - class BlueTwilightInstaller { private $baseDirectory; - private $licenseInfo; + private $composerSignature; public function __construct() { $this->baseDirectory = dirname(__DIR__); + chdir($this->baseDirectory); // Display errors so installer never gets a WSOD! ini_set('display_errors', true); - - require $this->baseDirectory . '/vendor/autoload.php'; } public function run() { - $licenseFile = new \SplFileInfo(sprintf('%s/blue-twilight.lic', $this->baseDirectory)); - if (!$licenseFile->isReadable()) + if (strtoupper($_SERVER['REQUEST_METHOD']) == 'POST') { - return $this->needLicense(); + // Handle post + $this->runInstall(); + exit(); } +?> +

Blue Twilight Setup

+

We need to download a few things - namely Composer and related packages - before we can kick off the Blue Twilight installer.

+

We can do this for you - simply click the button below.

+
+ +
- try - { - $this->licenseInfo = $this->verifyLicense(); - } - catch (\Exception $ex) - { - unlink($licenseFile->getRealPath()); - return $this->needLicense(); - } +
+

Got Composer?

- $environmentFile = new \SplFileInfo(sprintf('%s/.env', $this->baseDirectory)); - if (!$environmentFile->isReadable()) - { - return $this->needEnvironmentSetup(); - } +

If you already have Composer installed, however, you may want to use that instead. Just run the below commands on your server, changing the path to Composer as appropriate:

+

Please note: "composer.phar" may actually be "composer" on your system.

+
cd baseDirectory; ?>
/path/to/composer.phar install
+ +

Installing Blue Twilight Setup Files

+ + +%s.%s", $message, PHP_EOL); + } + + private function echoOK($message = '') + { + echo "OK"; + + if (strlen($message) > 0) + { + echo sprintf('... %s', $message); + } + + echo '' . PHP_EOL; + } + + private function fetchComposerSignature() + { + $signatureUrl = 'https://composer.github.io/installer.sig'; + $this->composerSignature = trim(file_get_contents($signatureUrl)); + if (strlen($this->composerSignature) == 0) + { + $this->echoError(sprintf("Failed downloading the Composer signature from %s", $signatureUrl)); + return false; } else { - $rc = Artisan::call('migrate'); - $output = Artisan::output(); - - var_dump($rc); - var_dump($output); + $this->echoOK($this->composerSignature); } + + return true; } - private function needLicense() + private function installComposer() { - if ($_SERVER['REQUEST_METHOD'] != 'POST') + $rc = -1; + + system('php -r "copy(\'https://getcomposer.org/installer\', \'composer-setup.php\');"', $rc); + if ($rc != 0) { - return $this->render('license'); + $this->echoError('Failed to fetch Composer'); + return false; } - else + + ob_start(); + system(sprintf('php -r "if (hash_file(\'SHA384\', \'composer-setup.php\') === \'%s\') { echo \'Installer verified\'; } else { echo \'Installer corrupt\'; unlink(\'composer-setup.php\'); } echo PHP_EOL;"', $this->composerSignature), $rc); + $result = ob_get_clean(); + echo nl2br($result); + if ($rc != 0) { - move_uploaded_file($_FILES['license-file']['tmp_name'], sprintf('%s/blue-twilight.lic', $this->baseDirectory)); - header(sprintf('Location: %s', $_SERVER['REQUEST_URI']), true, 302); - die(); + $this->echoError('Composer verification failed'); + return false; } + + ob_start(); + system('php composer-setup.php', $rc); + $result = ob_get_clean(); + echo nl2br($result); + if ($rc != 0) + { + $this->echoError('Failed to install Composer'); + return false; + } + + ob_start(); + system('php -r "unlink(\'composer-setup.php\');"', $rc); + $result = ob_get_clean(); + echo nl2br($result); + if ($rc != 0) + { + $this->echoError('Failed to remove Composer setup file'); + return false; + } + + $this->echoOK(); + return true; } - private function render($viewName) + private function runComposer() { - $viewName = pathinfo($viewName, PATHINFO_BASENAME); - $viewPath = sprintf('%s/resources/views/installer/%s.php', $this->baseDirectory, $viewName); + ob_start(); + system('php composer.phar install', $rc); + $result = ob_get_clean(); + echo nl2br($result); + if ($rc != 0) + { + $this->echoError('Installing Composer packages failed'); + return false; + } - $translator = new Translator('en'); - $translator->addLoader('file', new PhpFileLoader()); - $translator->addResource('file', sprintf('%s/resources/lang/en/installer.php', $this->baseDirectory), 'en'); - $licenseInfo = $this->licenseInfo; - - require $viewPath; - } - - private function verifyLicense() - { - return (require $this->baseDirectory . '/verify-license.php'); + $this->echoOK(); + return true; } } diff --git a/resources/views/install/administrator.blade.php b/resources/views/install/administrator.blade.php index f907946..d465d9d 100644 --- a/resources/views/install/administrator.blade.php +++ b/resources/views/install/administrator.blade.php @@ -16,7 +16,7 @@ @endif
-
+
{{ csrf_field() }}
diff --git a/resources/views/install/check.blade.php b/resources/views/install/check.blade.php index 7659d30..64c5b24 100644 --- a/resources/views/install/check.blade.php +++ b/resources/views/install/check.blade.php @@ -6,7 +6,7 @@

@lang('installer.requirements_intro')

-
+
diff --git a/resources/views/install/database.blade.php b/resources/views/install/database.blade.php index 2dac4aa..e798c9e 100644 --- a/resources/views/install/database.blade.php +++ b/resources/views/install/database.blade.php @@ -6,7 +6,7 @@

@lang('installer.database_intro')

-
+
@if (!is_null($database_error))

Database error: {{ $database_error }}

diff --git a/resources/views/install/navbar.blade.php b/resources/views/install/navbar.blade.php index db672e8..701fa53 100644 --- a/resources/views/install/navbar.blade.php +++ b/resources/views/install/navbar.blade.php @@ -1,9 +1,5 @@ -