Refactor EnvironmentTrait
to use Env Facade (#1430)
This commit is contained in:
parent
e7a950ffcb
commit
2961c3e88b
@ -630,7 +630,6 @@ class Settings extends Page implements HasForms
|
|||||||
->onColor('success')
|
->onColor('success')
|
||||||
->offColor('danger')
|
->offColor('danger')
|
||||||
->live()
|
->live()
|
||||||
->columnSpanFull()
|
|
||||||
->formatStateUsing(fn ($state): bool => (bool) $state)
|
->formatStateUsing(fn ($state): bool => (bool) $state)
|
||||||
->afterStateUpdated(fn ($state, Set $set) => $set('PANEL_SEND_INSTALL_NOTIFICATION', (bool) $state))
|
->afterStateUpdated(fn ($state, Set $set) => $set('PANEL_SEND_INSTALL_NOTIFICATION', (bool) $state))
|
||||||
->default(env('PANEL_SEND_INSTALL_NOTIFICATION', config('panel.email.send_install_notification'))),
|
->default(env('PANEL_SEND_INSTALL_NOTIFICATION', config('panel.email.send_install_notification'))),
|
||||||
@ -641,7 +640,6 @@ class Settings extends Page implements HasForms
|
|||||||
->onColor('success')
|
->onColor('success')
|
||||||
->offColor('danger')
|
->offColor('danger')
|
||||||
->live()
|
->live()
|
||||||
->columnSpanFull()
|
|
||||||
->formatStateUsing(fn ($state): bool => (bool) $state)
|
->formatStateUsing(fn ($state): bool => (bool) $state)
|
||||||
->afterStateUpdated(fn ($state, Set $set) => $set('PANEL_SEND_REINSTALL_NOTIFICATION', (bool) $state))
|
->afterStateUpdated(fn ($state, Set $set) => $set('PANEL_SEND_REINSTALL_NOTIFICATION', (bool) $state))
|
||||||
->default(env('PANEL_SEND_REINSTALL_NOTIFICATION', config('panel.email.send_reinstall_notification'))),
|
->default(env('PANEL_SEND_REINSTALL_NOTIFICATION', config('panel.email.send_reinstall_notification'))),
|
||||||
|
@ -2,54 +2,20 @@
|
|||||||
|
|
||||||
namespace App\Traits;
|
namespace App\Traits;
|
||||||
|
|
||||||
use Exception;
|
use Illuminate\Support\Env;
|
||||||
|
use RuntimeException;
|
||||||
|
|
||||||
trait EnvironmentWriterTrait
|
trait EnvironmentWriterTrait
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* Escapes an environment value by looking for any characters that could
|
|
||||||
* reasonably cause environment parsing issues. Those values are then wrapped
|
|
||||||
* in quotes before being returned.
|
|
||||||
*/
|
|
||||||
public function escapeEnvironmentValue(string $value): string
|
|
||||||
{
|
|
||||||
if (!preg_match('/^\"(.*)\"$/', $value) && preg_match('/([^\w.\-+\/])+/', $value)) {
|
|
||||||
return sprintf('"%s"', addcslashes($value, '\\"'));
|
|
||||||
}
|
|
||||||
|
|
||||||
return $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the .env file for the application using the passed in values.
|
* Update the .env file for the application using the passed in values.
|
||||||
*
|
*
|
||||||
* @param array<string, mixed> $values
|
* @param array<string, mixed> $values
|
||||||
*
|
*
|
||||||
* @throws Exception
|
* @throws RuntimeException
|
||||||
*/
|
*/
|
||||||
public function writeToEnvironment(array $values = []): void
|
public function writeToEnvironment(array $values = []): void
|
||||||
{
|
{
|
||||||
$path = base_path('.env');
|
Env::writeVariables($values, base_path('.env'), true);
|
||||||
if (!file_exists($path)) {
|
|
||||||
throw new Exception('Cannot locate .env file, was this software installed correctly?');
|
|
||||||
}
|
|
||||||
|
|
||||||
$saveContents = file_get_contents($path);
|
|
||||||
if ($saveContents === false) {
|
|
||||||
$saveContents = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
collect($values)->each(function ($value, $key) use (&$saveContents) {
|
|
||||||
$key = strtoupper($key);
|
|
||||||
$saveValue = sprintf('%s=%s', $key, $this->escapeEnvironmentValue($value ?? ''));
|
|
||||||
|
|
||||||
if (preg_match_all('/^' . $key . '=(.*)$/m', $saveContents) < 1) {
|
|
||||||
$saveContents = $saveContents . PHP_EOL . $saveValue;
|
|
||||||
} else {
|
|
||||||
$saveContents = preg_replace('/^' . $key . '=(.*)$/m', $saveValue, $saveContents);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
file_put_contents($path, $saveContents);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,43 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Tests\Unit\Helpers;
|
|
||||||
|
|
||||||
use App\Tests\TestCase;
|
|
||||||
use App\Traits\EnvironmentWriterTrait;
|
|
||||||
use PHPUnit\Framework\Attributes\DataProvider;
|
|
||||||
|
|
||||||
class EnvironmentWriterTraitTest extends TestCase
|
|
||||||
{
|
|
||||||
#[DataProvider('variableDataProvider')]
|
|
||||||
public function test_variable_is_escaped_properly($input, $expected): void
|
|
||||||
{
|
|
||||||
$output = (new FooClass())->escapeEnvironmentValue($input);
|
|
||||||
|
|
||||||
$this->assertSame($expected, $output);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function variableDataProvider(): array
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
['foo', 'foo'],
|
|
||||||
['abc123', 'abc123'],
|
|
||||||
['val"ue', '"val\"ue"'],
|
|
||||||
['val\'ue', '"val\'ue"'],
|
|
||||||
['my test value', '"my test value"'],
|
|
||||||
['mysql_p@assword', '"mysql_p@assword"'],
|
|
||||||
['mysql_p#assword', '"mysql_p#assword"'],
|
|
||||||
['mysql p@$$word', '"mysql p@$$word"'],
|
|
||||||
['mysql p%word', '"mysql p%word"'],
|
|
||||||
['mysql p#word', '"mysql p#word"'],
|
|
||||||
['abc_@#test', '"abc_@#test"'],
|
|
||||||
['test 123 $$$', '"test 123 $$$"'],
|
|
||||||
['#password%', '"#password%"'],
|
|
||||||
['$pass ', '"$pass "'],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class FooClass
|
|
||||||
{
|
|
||||||
use EnvironmentWriterTrait;
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user