|
|
|
|
@@ -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));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|