Merge pull request #28 from InvoiceShelf/installer-improvements-phase1

Installer improvements
This commit is contained in:
Darko Gjorgjijoski
2024-02-11 20:25:32 +01:00
committed by GitHub
4 changed files with 252 additions and 389 deletions

View File

@@ -11,11 +11,13 @@ class FinishController extends Controller
/**
* Handle the incoming request.
*
* @return \Illuminate\Http\Response
* @return \Illuminate\Http\JsonResponse
*/
public function __invoke(Request $request)
{
InstallUtils::createDbMarker();
if (! InstallUtils::createDbMarker()) {
\Log::error('Install: Unable to create db marker.');
}
return response()->json(['success' => true]);
}

View File

@@ -17,10 +17,6 @@ class InstallationMiddleware
public function handle($request, Closure $next)
{
if (! InstallUtils::isDbCreated() || Setting::getSetting('profile_complete') !== 'COMPLETED') {
if (InstallUtils::dbMarkerExists()) {
InstallUtils::deleteDbMarker();
}
return redirect('/installation');
}

View File

@@ -3,7 +3,6 @@
namespace InvoiceShelf\Space;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use InvoiceShelf\Http\Requests\DatabaseEnvironmentRequest;
use InvoiceShelf\Http\Requests\DiskEnvironmentRequest;
@@ -17,6 +16,11 @@ class EnvironmentManager
*/
private $envPath;
/**
* @var string
*/
private $delimiter = "\n";
/**
* Set the .env and .env.example paths.
*/
@@ -25,6 +29,75 @@ class EnvironmentManager
$this->envPath = base_path('.env');
}
/**
* Returns the .env contents
*
* @return false|string
*/
private function getEnvContents()
{
return file_get_contents($this->envPath);
}
/**
* Updates .env file - inspired by Akaunting
*
* @return bool
*/
public function updateEnv(array $data)
{
if (empty($data) || ! is_array($data) || ! is_file($this->envPath)) {
return false;
}
$env = $this->getEnvContents();
$env = explode($this->delimiter, $env);
foreach ($data as $data_key => $data_value) {
$updated = false;
foreach ($env as $env_key => $env_value) {
$entry = explode('=', $env_value, 2);
// Check if new or old key
if ($entry[0] == $data_key) {
$env[$env_key] = $data_key.'='.$this->encode($data_value);
$updated = true;
} else {
$env[$env_key] = $this->encode($env_value);
}
}
// Lets create if not available
if (! $updated) {
$env[] = $data_key.'='.$this->encode($data_value);
}
}
$env = implode($this->delimiter, $env);
file_put_contents(base_path('.env'), $env);
return true;
}
/**
* Encodes value for .env
*
* @return mixed|string
*/
private function encode($str)
{
if (strpos($str, ' ') !== false || preg_match('/'.preg_quote('^\'£$%^&*()}{@#~?><,@|-=-_+-¬', '/').'/', $str)) {
$str = '"'.$str.'"';
}
return $str;
}
/**
* Save the database content to the .env file.
*
@@ -32,59 +105,27 @@ class EnvironmentManager
*/
public function saveDatabaseVariables(DatabaseEnvironmentRequest $request)
{
$oldDatabaseData =
'DB_CONNECTION='.config('database.default')."\n";
$newDatabaseData =
'DB_CONNECTION='.$request->database_connection."\n";
$dbEnv = [
'APP_URL' => $request->get('app_url'),
'DB_CONNECTION' => $request->get('database_connection'),
'SANCTUM_STATEFUL_DOMAINS' => $request->get('app_domain'),
'SESSION_DOMAIN' => explode(':', $request->get('app_domain'))[0],
];
if ($request->has('database_username') && $request->has('database_password')) {
if (env('DB_USERNAME') && env('DB_HOST')) {
$oldDatabaseData = $oldDatabaseData.
'DB_HOST='.config('database.connections.'.config('database.default').'.host')."\n".
'DB_PORT='.config('database.connections.'.config('database.default').'.port')."\n".
'DB_DATABASE='.config('database.connections.'.config('database.default').'.database')."\n".
'DB_USERNAME='.config('database.connections.'.config('database.default').'.username')."\n".
'DB_PASSWORD="'.config('database.connections.'.config('database.default').'.password')."\"\n\n";
} else {
$oldDatabaseData = $oldDatabaseData.
'DB_DATABASE='.config('database.connections.'.config('database.default').'.database')."\n\n";
}
$dbEnv['DB_HOST'] = $request->get('database_hostname');
$dbEnv['DB_PORT'] = $request->get('database_port');
$dbEnv['DB_DATABASE'] = $request->get('database_name');
$dbEnv['DB_USERNAME'] = $request->get('database_username');
$dbEnv['DB_PASSWORD'] = $request->get('database_password');
$newDatabaseData = $newDatabaseData.
'DB_HOST='.$request->database_hostname."\n".
'DB_PORT='.$request->database_port."\n".
'DB_DATABASE='.$request->database_name."\n".
'DB_USERNAME='.$request->database_username."\n".
'DB_PASSWORD="'.$request->database_password."\"\n\n";
} else {
if (env('DB_USERNAME') && env('DB_HOST')) {
$oldDatabaseData = $oldDatabaseData.
'DB_HOST='.config('database.connections.'.config('database.default').'.host')."\n".
'DB_PORT='.config('database.connections.'.config('database.default').'.port')."\n".
'DB_DATABASE='.config('database.connections.'.config('database.default').'.database')."\n".
'DB_USERNAME='.config('database.connections.'.config('database.default').'.username')."\n".
'DB_PASSWORD="'.config('database.connections.'.config('database.default').'.password')."\"\n\n";
} else {
$oldDatabaseData = $oldDatabaseData.
'DB_DATABASE='.config('database.connections.'.config('database.default').'.database')."\n\n";
}
$newDatabaseData = $newDatabaseData.
'DB_DATABASE='.$request->database_name."\n\n";
$dbEnv['DB_DATABASE'] = $request->get('database_name');
}
try {
$conn = $this->checkDatabaseConnection($request);
// $requirement = $this->checkVersionRequirements($request, $conn);
// if ($requirement) {
// return [
// 'error' => 'minimum_version_requirement',
// 'requirement' => $requirement,
// ];
// }
$this->checkDatabaseConnection($request);
if (\Schema::hasTable('users')) {
return [
@@ -98,29 +139,7 @@ class EnvironmentManager
}
try {
file_put_contents($this->envPath, str_replace(
$oldDatabaseData,
$newDatabaseData,
file_get_contents($this->envPath)
));
file_put_contents($this->envPath, str_replace(
'APP_URL='.config('app.url'),
'APP_URL='.$request->app_url,
file_get_contents($this->envPath)
));
file_put_contents($this->envPath, str_replace(
'SANCTUM_STATEFUL_DOMAINS='.env('SANCTUM_STATEFUL_DOMAINS'),
'SANCTUM_STATEFUL_DOMAINS='.$request->app_domain,
file_get_contents($this->envPath)
));
file_put_contents($this->envPath, str_replace(
'SESSION_DOMAIN='.config('session.domain'),
'SESSION_DOMAIN='.explode(':', $request->app_domain)[0],
file_get_contents($this->envPath)
));
$this->updateEnv($dbEnv);
} catch (Exception $e) {
return [
'error' => 'database_variables_save_error',
@@ -133,26 +152,27 @@ class EnvironmentManager
}
/**
* @return bool
* Returns PDO object if all ok.
*
* @return \Closure|\PDO
*/
private function checkDatabaseConnection(DatabaseEnvironmentRequest $request)
{
$connection = $request->database_connection;
$connection = $request->get('database_connection');
$settings = config("database.connections.$connection");
$settings = config("database.connections.$connection");
$connectionArray = array_merge($settings, [
'driver' => $connection,
'database' => $request->database_name,
'database' => $request->get('database_name'),
]);
if ($request->has('database_username') && $request->has('database_password')) {
$connectionArray = array_merge($connectionArray, [
'username' => $request->database_username,
'password' => $request->database_password,
'host' => $request->database_hostname,
'port' => $request->database_port,
'username' => $request->get('database_username'),
'password' => $request->get('database_password'),
'host' => $request->get('database_hostname'),
'port' => $request->get('database_port'),
]);
}
@@ -167,86 +187,19 @@ class EnvironmentManager
return DB::connection()->getPdo();
}
/**
* @return bool
*/
private function checkVersionRequirements(DatabaseEnvironmentRequest $request, $conn)
{
$connection = $request->database_connection;
$checker = new RequirementsChecker();
$phpSupportInfo = $checker->checkPHPVersion(
config('invoiceshelf.min_php_version')
);
if (! $phpSupportInfo['supported']) {
return $phpSupportInfo;
}
$dbSupportInfo = [];
switch ($connection) {
case 'mysql':
$dbSupportInfo = $checker->checkMysqlVersion($conn);
break;
case 'pgsql':
$conn = pg_connect("host={$request->database_hostname} port={$request->database_port} dbname={$request->database_name} user={$request->database_username} password={$request->database_password}");
$dbSupportInfo = $checker->checkPgsqlVersion(
$conn,
config('invoiceshelf.min_pgsql_version')
);
break;
case 'sqlite':
$dbSupportInfo = $checker->checkSqliteVersion(
config('invoiceshelf.min_sqlite_version')
);
break;
}
if (! $dbSupportInfo['supported']) {
return $dbSupportInfo;
}
return false;
}
/**
* Save the mail content to the .env file.
*
* @param Request $request
* @return array
*/
public function saveMailVariables(MailEnvironmentRequest $request)
{
$mailData = $this->getMailData($request);
$mailEnv = $this->getMailConfiguration($request);
try {
file_put_contents($this->envPath, str_replace(
$mailData['old_mail_data'],
$mailData['new_mail_data'],
file_get_contents($this->envPath)
));
if ($mailData['extra_old_mail_data']) {
file_put_contents($this->envPath, str_replace(
$mailData['extra_old_mail_data'],
$mailData['extra_mail_data'],
file_get_contents($this->envPath)
));
} else {
file_put_contents(
$this->envPath,
"\n".$mailData['extra_mail_data'],
FILE_APPEND
);
}
$this->updateEnv($mailEnv);
} catch (Exception $e) {
return [
'error' => 'mail_variables_save_error',
@@ -258,193 +211,103 @@ class EnvironmentManager
];
}
private function getMailData($request)
/**
* Returns the mail configuration
*
* @param MailEnvironmentRequest $request
* @return array
*/
private function getMailConfiguration($request)
{
$mailFromCredential = '';
$extraMailData = '';
$extraOldMailData = '';
$oldMailData = '';
$newMailData = '';
$mailEnv = [];
if (env('MAIL_FROM_ADDRESS') !== null && env('MAIL_FROM_NAME') !== null) {
$mailFromCredential =
'MAIL_FROM_ADDRESS='.config('mail.from.address')."\n".
'MAIL_FROM_NAME="'.config('mail.from.name')."\"\n\n";
}
$driver = $request->get('mail_driver');
switch ($request->mail_driver) {
switch ($driver) {
case 'smtp':
$oldMailData =
'MAIL_DRIVER='.config('mail.driver')."\n".
'MAIL_HOST='.config('mail.host')."\n".
'MAIL_PORT='.config('mail.port')."\n".
'MAIL_USERNAME='.config('mail.username')."\n".
'MAIL_PASSWORD='.config('mail.password')."\n".
'MAIL_ENCRYPTION='.config('mail.encryption')."\n\n".
$mailFromCredential;
$newMailData =
'MAIL_DRIVER='.$request->mail_driver."\n".
'MAIL_HOST='.$request->mail_host."\n".
'MAIL_PORT='.$request->mail_port."\n".
'MAIL_USERNAME='.$request->mail_username."\n".
'MAIL_PASSWORD='.$request->mail_password."\n".
'MAIL_ENCRYPTION='.$request->mail_encryption."\n\n".
'MAIL_FROM_ADDRESS='.$request->from_mail."\n".
'MAIL_FROM_NAME="'.$request->from_name."\"\n\n";
$mailEnv = [
'MAIL_DRIVER' => $request->get('mail_driver'),
'MAIL_HOST' => $request->get('mail_host'),
'MAIL_PORT' => $request->get('mail_port'),
'MAIL_USERNAME' => $request->get('mail_username'),
'MAIL_PASSWORD' => $request->get('mail_password'),
'MAIL_ENCRYPTION' => $request->get('mail_encryption'),
'MAIL_FROM_ADDRESS' => $request->get('from_mail'),
'MAIL_FROM_NAME' => $request->get('from_name'),
];
break;
case 'mailgun':
$oldMailData =
'MAIL_DRIVER='.config('mail.driver')."\n".
'MAIL_HOST='.config('mail.host')."\n".
'MAIL_PORT='.config('mail.port')."\n".
'MAIL_USERNAME='.config('mail.username')."\n".
'MAIL_PASSWORD='.config('mail.password')."\n".
'MAIL_ENCRYPTION='.config('mail.encryption')."\n\n".
$mailFromCredential;
$newMailData =
'MAIL_DRIVER='.$request->mail_driver."\n".
'MAIL_HOST='.$request->mail_host."\n".
'MAIL_PORT='.$request->mail_port."\n".
'MAIL_USERNAME='.config('mail.username')."\n".
'MAIL_PASSWORD='.config('mail.password')."\n".
'MAIL_ENCRYPTION='.$request->mail_encryption."\n\n".
'MAIL_FROM_ADDRESS='.$request->from_mail."\n".
'MAIL_FROM_NAME="'.$request->from_name."\"\n\n";
$extraMailData =
'MAILGUN_DOMAIN='.$request->mail_mailgun_domain."\n".
'MAILGUN_SECRET='.$request->mail_mailgun_secret."\n".
'MAILGUN_ENDPOINT='.$request->mail_mailgun_endpoint."\n";
if (env('MAILGUN_DOMAIN') !== null && env('MAILGUN_SECRET') !== null && env('MAILGUN_ENDPOINT') !== null) {
$extraOldMailData =
'MAILGUN_DOMAIN='.config('services.mailgun.domain')."\n".
'MAILGUN_SECRET='.config('services.mailgun.secret')."\n".
'MAILGUN_ENDPOINT='.config('services.mailgun.endpoint')."\n";
}
$mailEnv = [
'MAIL_DRIVER' => $request->get('mail_driver'),
'MAIL_HOST' => $request->get('mail_host'),
'MAIL_PORT' => $request->get('mail_port'),
'MAIL_USERNAME' => config('mail.username'),
'MAIL_PASSWORD' => config('mail.password'),
'MAIL_ENCRYPTION' => $request->get('mail_encryption'),
'MAIL_FROM_ADDRESS' => $request->get('from_mail'),
'MAIL_FROM_NAME' => $request->get('from_name'),
'MAILGUN_DOMAIN' => $request->get('mail_mailgun_domain'),
'MAILGUN_SECRET' => $request->get('mail_mailgun_secret'),
'MAILGUN_ENDPOINT' => $request->get('mail_mailgun_endpoint'),
];
break;
case 'ses':
$oldMailData =
'MAIL_DRIVER='.config('mail.driver')."\n".
'MAIL_HOST='.config('mail.host')."\n".
'MAIL_PORT='.config('mail.port')."\n".
'MAIL_USERNAME='.config('mail.username')."\n".
'MAIL_PASSWORD='.config('mail.password')."\n".
'MAIL_ENCRYPTION='.config('mail.encryption')."\n\n".
$mailFromCredential;
$newMailData =
'MAIL_DRIVER='.$request->mail_driver."\n".
'MAIL_HOST='.$request->mail_host."\n".
'MAIL_PORT='.$request->mail_port."\n".
'MAIL_USERNAME='.config('mail.username')."\n".
'MAIL_PASSWORD='.config('mail.password')."\n".
'MAIL_ENCRYPTION='.$request->mail_encryption."\n\n".
'MAIL_FROM_ADDRESS='.$request->from_mail."\n".
'MAIL_FROM_NAME="'.$request->from_name."\"\n\n";
$extraMailData =
'SES_KEY='.$request->mail_ses_key."\n".
'SES_SECRET='.$request->mail_ses_secret."\n";
if (env('SES_KEY') !== null && env('SES_SECRET') !== null) {
$extraOldMailData =
'SES_KEY='.config('services.ses.key')."\n".
'SES_SECRET='.config('services.ses.secret')."\n";
}
break;
case 'mail':
$oldMailData =
'MAIL_DRIVER='.config('mail.driver')."\n".
'MAIL_HOST='.config('mail.host')."\n".
'MAIL_PORT='.config('mail.port')."\n".
'MAIL_USERNAME='.config('mail.username')."\n".
'MAIL_PASSWORD='.config('mail.password')."\n".
'MAIL_ENCRYPTION='.config('mail.encryption')."\n\n".
$mailFromCredential;
$newMailData =
'MAIL_DRIVER='.$request->mail_driver."\n".
'MAIL_HOST='.config('mail.host')."\n".
'MAIL_PORT='.config('mail.port')."\n".
'MAIL_USERNAME='.config('mail.username')."\n".
'MAIL_PASSWORD='.config('mail.password')."\n".
'MAIL_ENCRYPTION='.config('mail.encryption')."\n\n".
'MAIL_FROM_ADDRESS='.$request->from_mail."\n".
'MAIL_FROM_NAME="'.$request->from_name."\"\n\n";
$mailEnv = [
'MAIL_DRIVER' => $request->get('mail_driver'),
'MAIL_HOST' => $request->get('mail_host'),
'MAIL_PORT' => $request->get('mail_port'),
'MAIL_USERNAME' => config('mail.username'),
'MAIL_PASSWORD' => config('mail.password'),
'MAIL_ENCRYPTION' => $request->get('mail_encryption'),
'MAIL_FROM_ADDRESS' => $request->get('from_mail'),
'MAIL_FROM_NAME' => $request->get('from_mail'),
'SES_KEY' => $request->get('from_mail'),
'SES_SECRET' => $request->get('from_name'),
];
break;
case 'sendmail':
$oldMailData =
'MAIL_DRIVER='.config('mail.driver')."\n".
'MAIL_HOST='.config('mail.host')."\n".
'MAIL_PORT='.config('mail.port')."\n".
'MAIL_USERNAME='.config('mail.username')."\n".
'MAIL_PASSWORD='.config('mail.password')."\n".
'MAIL_ENCRYPTION='.config('mail.encryption')."\n\n".
$mailFromCredential;
case 'mail':
$newMailData =
'MAIL_DRIVER='.$request->mail_driver."\n".
'MAIL_HOST='.config('mail.host')."\n".
'MAIL_PORT='.config('mail.port')."\n".
'MAIL_USERNAME='.config('mail.username')."\n".
'MAIL_PASSWORD='.config('mail.password')."\n".
'MAIL_ENCRYPTION='.config('mail.encryption')."\n\n".
'MAIL_FROM_ADDRESS='.$request->from_mail."\n".
'MAIL_FROM_NAME="'.$request->from_name."\"\n\n";
$mailEnv = [
'MAIL_DRIVER' => $request->get('mail_driver'),
'MAIL_HOST' => config('mail.host'),
'MAIL_PORT' => config('mail.port'),
'MAIL_USERNAME' => config('mail.username'),
'MAIL_PASSWORD' => config('mail.password'),
'MAIL_ENCRYPTION' => config('mail.encryption'),
'MAIL_FROM_ADDRESS' => $request->get('from_mail'),
'MAIL_FROM_NAME' => $request->get('from_name'),
];
break;
}
return [
'old_mail_data' => $oldMailData,
'new_mail_data' => $newMailData,
'extra_mail_data' => $extraMailData,
'extra_old_mail_data' => $extraOldMailData,
];
return $mailEnv;
}
/**
* Save the disk content to the .env file.
*
* @param Request $request
* @return array
*/
public function saveDiskVariables(DiskEnvironmentRequest $request)
{
$diskData = $this->getDiskData($request);
$diskEnv = $this->getDiskConfiguration($request);
try {
if (! $diskData['old_default_driver']) {
file_put_contents($this->envPath, $diskData['default_driver'], FILE_APPEND);
} else {
file_put_contents($this->envPath, str_replace(
$diskData['old_default_driver'],
$diskData['default_driver'],
file_get_contents($this->envPath)
));
}
if (! $diskData['old_disk_data']) {
file_put_contents($this->envPath, $diskData['new_disk_data'], FILE_APPEND);
} else {
file_put_contents($this->envPath, str_replace(
$diskData['old_disk_data'],
$diskData['new_disk_data'],
file_get_contents($this->envPath)
));
}
$this->updateEnv($diskEnv);
} catch (Exception $e) {
return [
'error' => 'disk_variables_save_error',
@@ -456,113 +319,75 @@ class EnvironmentManager
];
}
private function getDiskData($request)
/**
* Returns the disk configuration
*
* @return array
*/
private function getDiskConfiguration(DiskEnvironmentRequest $request)
{
$oldDefaultDriver = '';
$defaultDriver = '';
$oldDiskData = '';
$newDiskData = '';
$diskEnv = [];
if ($request->default_driver) {
if (env('FILESYSTEM_DRIVER') !== null) {
$defaultDriver = "\n".'FILESYSTEM_DRIVER='.$request->default_driver."\n";
$driver = $request->get('app_domain');
$oldDefaultDriver =
"\n".'FILESYSTEM_DRIVER='.config('filesystems.default')."\n";
} else {
$defaultDriver =
"\n".'FILESYSTEM_DRIVER='.$request->default_driver."\n";
}
if ($driver) {
$diskEnv['FILESYSTEM_DRIVER'] = $driver;
}
switch ($request->selected_driver) {
switch ($request->get('selected_driver')) {
case 's3':
if (env('AWS_KEY') !== null) {
$oldDiskData = "\n".
'AWS_KEY='.config('filesystems.disks.s3.key')."\n".
'AWS_SECRET="'.config('filesystems.disks.s3.secret')."\"\n".
'AWS_REGION='.config('filesystems.disks.s3.region')."\n".
'AWS_BUCKET='.config('filesystems.disks.s3.bucket')."\n".
'AWS_ROOT='.config('filesystems.disks.s3.root')."\n";
}
$newDiskData = "\n".
'AWS_KEY='.$request->aws_key."\n".
'AWS_SECRET="'.$request->aws_secret."\"\n".
'AWS_REGION='.$request->aws_region."\n".
'AWS_BUCKET='.$request->aws_bucket."\n".
'AWS_ROOT='.$request->aws_root."\n";
$diskEnv = [
'AWS_KEY' => $request->get('aws_key'),
'AWS_SECRET' => $request->get('aws_secret'),
'AWS_REGION' => $request->get('aws_region'),
'AWS_BUCKET' => $request->get('aws_bucket'),
'AWS_ROOT' => $request->get('aws_root'),
];
break;
case 'doSpaces':
if (env('DO_SPACES_KEY') !== null) {
$oldDiskData = "\n".
'DO_SPACES_KEY='.config('filesystems.disks.doSpaces.key')."\n".
'DO_SPACES_SECRET="'.config('filesystems.disks.doSpaces.secret')."\"\n".
'DO_SPACES_REGION='.config('filesystems.disks.doSpaces.region')."\n".
'DO_SPACES_BUCKET='.config('filesystems.disks.doSpaces.bucket')."\n".
'DO_SPACES_ENDPOINT='.config('filesystems.disks.doSpaces.endpoint')."\n";
'DO_SPACES_ROOT='.config('filesystems.disks.doSpaces.root')."\n";
}
$newDiskData = "\n".
'DO_SPACES_KEY='.$request->do_spaces_key."\n".
'DO_SPACES_SECRET="'.$request->do_spaces_secret."\"\n".
'DO_SPACES_REGION='.$request->do_spaces_region."\n".
'DO_SPACES_BUCKET='.$request->do_spaces_bucket."\n".
'DO_SPACES_ENDPOINT='.$request->do_spaces_endpoint."\n";
'DO_SPACES_ROOT='.$request->do_spaces_root."\n\n";
$diskEnv = [
'DO_SPACES_KEY' => $request->get('do_spaces_key'),
'DO_SPACES_SECRET' => $request->get('do_spaces_secret'),
'DO_SPACES_REGION' => $request->get('do_spaces_region'),
'DO_SPACES_BUCKET' => $request->get('do_spaces_bucket'),
'DO_SPACES_ENDPOINT' => $request->get('do_spaces_endpoint'),
'DO_SPACES_ROOT' => $request->get('do_spaces_root'),
];
break;
case 'dropbox':
if (env('DROPBOX_TOKEN') !== null) {
$oldDiskData = "\n".
'DROPBOX_TOKEN='.config('filesystems.disks.dropbox.token')."\n".
'DROPBOX_KEY='.config('filesystems.disks.dropbox.key')."\n".
'DROPBOX_SECRET="'.config('filesystems.disks.dropbox.secret')."\"\n".
'DROPBOX_APP='.config('filesystems.disks.dropbox.app')."\n".
'DROPBOX_ROOT='.config('filesystems.disks.dropbox.root')."\n";
}
$newDiskData = "\n".
'DROPBOX_TOKEN='.$request->dropbox_token."\n".
'DROPBOX_KEY='.$request->dropbox_key."\n".
'DROPBOX_SECRET="'.$request->dropbox_secret."\"\n".
'DROPBOX_APP='.$request->dropbox_app."\n".
'DROPBOX_ROOT='.$request->dropbox_root."\n";
$diskEnv = [
'DROPBOX_TOKEN' => $request->get('dropbox_token'),
'DROPBOX_KEY' => $request->get('dropbox_key'),
'DROPBOX_SECRET' => $request->get('dropbox_secret'),
'DROPBOX_APP' => $request->get('dropbox_app'),
'DROPBOX_ROOT' => $request->get('dropbox_root'),
];
break;
}
return [
'old_disk_data' => $oldDiskData,
'new_disk_data' => $newDiskData,
'default_driver' => $defaultDriver,
'old_default_driver' => $oldDefaultDriver,
];
return $diskEnv;
}
/**
* Save sanctum statful domain to the .env file.
* Save sanctum stateful domain to the .env file.
*
* @return array
*/
public function saveDomainVariables(DomainEnvironmentRequest $request)
{
try {
file_put_contents($this->envPath, str_replace(
'SANCTUM_STATEFUL_DOMAINS='.env('SANCTUM_STATEFUL_DOMAINS'),
'SANCTUM_STATEFUL_DOMAINS='.$request->app_domain,
file_get_contents($this->envPath)
));
file_put_contents($this->envPath, str_replace(
'SESSION_DOMAIN='.config('session.domain'),
'SESSION_DOMAIN='.explode(':', $request->app_domain)[0],
file_get_contents($this->envPath)
));
$this->updateEnv([
'SANCTUM_STATEFUL_DOMAINS' => $request->get('app_domain'),
'SESSION_DOMAIN' => explode(':', $request->get('app_domain'))[0],
]);
} catch (Exception $e) {
return [
'error' => 'domain_verification_failed',
@@ -573,4 +398,34 @@ class EnvironmentManager
'success' => 'domain_variable_save_successfully',
];
}
/**
* Order the env contents
*
* @return void
*/
public function reoderEnv()
{
$contents = $this->getEnvContents();
$contents = explode($this->delimiter, $contents);
if (empty($contents)) {
return;
}
natsort($contents);
$formatted = '';
$previous = '';
foreach ($contents as $current) {
$parts_line = explode('_', $current);
$parts_last = explode('_', $previous);
if ($parts_line[0] != $parts_last[0]) {
$formatted .= $this->delimiter;
}
$formatted .= $current.$this->delimiter;
$previous = $current;
}
file_put_contents($this->envPath, trim($formatted));
}
}

View File

@@ -3,6 +3,7 @@
namespace InvoiceShelf\Space;
use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\Log;
use League\Flysystem\FilesystemException;
class InstallUtils
@@ -10,7 +11,7 @@ class InstallUtils
/**
* Check if database is created
*
* @return bool|int|string
* @return bool
*/
public static function isDbCreated()
{
@@ -49,34 +50,43 @@ class InstallUtils
public static function dbMarkerExists()
{
try {
$flag = \Storage::disk('local')->has('database_created');
return \Storage::disk('local')->has('database_created');
} catch (FilesystemException $e) {
$flag = false;
Log::error('Unable to verify db marker: '.$e->getMessage());
}
return $flag;
return false;
}
/**
* Creates the database marker
*
* @return void
* @return bool
*/
public static function createDbMarker()
{
\Storage::disk('local')->put('database_created', time());
try {
return \Storage::disk('local')->put('database_created', time());
} catch (\Exception $e) {
Log::error('Unable to create db marker: '.$e->getMessage());
}
return false;
}
/**
* Deletes the database marker
*
* @return void
* @return bool
*/
public static function deleteDbMarker()
{
try {
\Storage::disk('local')->delete('database_created');
return \Storage::disk('local')->delete('database_created');
} catch (\Exception $e) {
Log::error('Unable to delete db marker: '.$e->getMessage());
}
return false;
}
}