From b806efd66d3836d78f94e6a33316c3d13a36cc90 Mon Sep 17 00:00:00 2001 From: gdarko Date: Sun, 11 Feb 2024 01:44:05 +0100 Subject: [PATCH] Refactor EnvironmentManager to fix weird installation issues --- app/Space/EnvironmentManager.php | 584 +++++++++++-------------------- 1 file changed, 209 insertions(+), 375 deletions(-) diff --git a/app/Space/EnvironmentManager.php b/app/Space/EnvironmentManager.php index 9c6867b2..08946022 100755 --- a/app/Space/EnvironmentManager.php +++ b/app/Space/EnvironmentManager.php @@ -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,58 @@ 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.'='.$data_value; + $updated = true; + } else { + $env[$env_key] = $env_value; + } + } + + // Lets create if not available + if (! $updated) { + $env[] = $data_key.'='.$data_value; + } + } + + $env = implode($this->delimiter, $env); + + file_put_contents(base_path('.env'), $env); + + return true; + } + /** * Save the database content to the .env file. * @@ -32,59 +88,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 +122,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 +135,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 +170,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 +194,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 +302,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 +381,30 @@ class EnvironmentManager 'success' => 'domain_variable_save_successfully', ]; } + + /** + * Order the env contents + * @return void + */ + public function reoderEnv() + { + $contents = $this->getEnvContents(); + $contents = explode($this->delimiter, $contents); + 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)); + } }