Make some env vars immutable.
This commit is contained in:
parent
7d9470ba51
commit
e1203ecd6f
|
@ -8,9 +8,5 @@ ini_set('display_errors', '1');
|
|||
|
||||
require dirname(__DIR__) . '/vendor/autoload.php';
|
||||
|
||||
$cli = App\AppFactory::createCli(
|
||||
[
|
||||
App\Environment::BASE_DIR => dirname(__DIR__),
|
||||
]
|
||||
);
|
||||
$cli = App\AppFactory::createCli();
|
||||
$cli->run();
|
||||
|
|
|
@ -8,11 +8,7 @@ ini_set('display_errors', '1');
|
|||
|
||||
$autoloader = require dirname(__DIR__) . '/vendor/autoload.php';
|
||||
|
||||
$environment = App\AppFactory::buildEnvironment(
|
||||
[
|
||||
App\Environment::BASE_DIR => dirname(__DIR__),
|
||||
]
|
||||
);
|
||||
$environment = App\AppFactory::buildEnvironment();
|
||||
|
||||
$console = new Symfony\Component\Console\Application(
|
||||
'AzuraCast installer',
|
||||
|
|
|
@ -8,7 +8,6 @@ use App\Console\Application;
|
|||
use App\Enums\SupportedLocales;
|
||||
use App\Http\Factory\ResponseFactory;
|
||||
use App\Http\Factory\ServerRequestFactory;
|
||||
use App\Utilities\File;
|
||||
use App\Utilities\Logger as AppLogger;
|
||||
use DI;
|
||||
use Monolog\ErrorHandler;
|
||||
|
@ -95,11 +94,7 @@ final class AppFactory
|
|||
|
||||
$containerBuilder->addDefinitions($diDefinitions);
|
||||
|
||||
// Check for services.php file and include it if one exists.
|
||||
$configDir = $environment->getConfigDirectory();
|
||||
if (file_exists($configDir . '/services.php')) {
|
||||
$containerBuilder->addDefinitions($configDir . '/services.php');
|
||||
}
|
||||
$containerBuilder->addDefinitions(dirname(__DIR__) . '/config/services.php');
|
||||
|
||||
$di = $containerBuilder->build();
|
||||
|
||||
|
@ -118,42 +113,7 @@ final class AppFactory
|
|||
*/
|
||||
public static function buildEnvironment(array $environment = []): Environment
|
||||
{
|
||||
if (!isset($environment[Environment::BASE_DIR])) {
|
||||
throw new Exception\BootstrapException('No base directory specified!');
|
||||
}
|
||||
|
||||
$baseDir = $environment[Environment::BASE_DIR];
|
||||
$parentBaseDir = dirname($baseDir);
|
||||
|
||||
$environment[Environment::IS_DOCKER] = file_exists($parentBaseDir . '/.docker');
|
||||
|
||||
$environment[Environment::TEMP_DIR] ??= $parentBaseDir . '/www_tmp';
|
||||
$environment[Environment::CONFIG_DIR] ??= $baseDir . '/config';
|
||||
$environment[Environment::VIEWS_DIR] ??= $baseDir . '/templates';
|
||||
$environment[Environment::UPLOADS_DIR] ??= File::getFirstExistingDirectory([
|
||||
$parentBaseDir . '/storage/uploads',
|
||||
$parentBaseDir . '/uploads',
|
||||
]);
|
||||
|
||||
$_ENV = getenv();
|
||||
|
||||
if (!$environment[Environment::IS_DOCKER]) {
|
||||
$envPaths = [
|
||||
$parentBaseDir . '/env.ini',
|
||||
$baseDir . '/env.ini',
|
||||
];
|
||||
|
||||
foreach ($envPaths as $envPath) {
|
||||
if (file_exists($envPath)) {
|
||||
$envIni = parse_ini_file($envPath);
|
||||
if (false !== $envIni) {
|
||||
$_ENV = array_merge($_ENV, $envIni);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$environment = array_merge(array_filter($_ENV), $environment);
|
||||
|
||||
return new Environment($environment);
|
||||
|
|
|
@ -57,9 +57,9 @@ final class GenerateCommand extends CommandAbstract
|
|||
|
||||
// Find all PHP/PHTML files in the application's code.
|
||||
$translatableFolders = [
|
||||
$this->environment->getBaseDirectory() . '/src',
|
||||
$this->environment->getBaseDirectory() . '/config',
|
||||
$this->environment->getViewsDirectory(),
|
||||
dirname(__DIR__, 4) . '/src',
|
||||
dirname(__DIR__, 4) . '/config',
|
||||
dirname(__DIR__, 4) . '/templates',
|
||||
];
|
||||
|
||||
$phpScanner = new PhpScanner($translations);
|
||||
|
|
|
@ -7,6 +7,7 @@ namespace App;
|
|||
use App\Enums\ApplicationEnvironment;
|
||||
use App\Enums\ReleaseChannel;
|
||||
use App\Radio\Configuration;
|
||||
use App\Utilities\File;
|
||||
use GuzzleHttp\Psr7\Uri;
|
||||
use Psr\Http\Message\UriInterface;
|
||||
use Psr\Log\LogLevel;
|
||||
|
@ -15,16 +16,19 @@ final class Environment
|
|||
{
|
||||
private static Environment $instance;
|
||||
|
||||
private array $data;
|
||||
// Cached immutable values that are frequently used.
|
||||
private readonly string $baseDir;
|
||||
private readonly string $parentDir;
|
||||
private readonly bool $isDocker;
|
||||
private readonly ApplicationEnvironment $appEnv;
|
||||
|
||||
private readonly array $data;
|
||||
|
||||
// Core settings values
|
||||
public const APP_NAME = 'APP_NAME';
|
||||
public const APP_ENV = 'APPLICATION_ENV';
|
||||
|
||||
public const BASE_DIR = 'BASE_DIR';
|
||||
public const TEMP_DIR = 'TEMP_DIR';
|
||||
public const CONFIG_DIR = 'CONFIG_DIR';
|
||||
public const VIEWS_DIR = 'VIEWS_DIR';
|
||||
public const UPLOADS_DIR = 'UPLOADS_DIR';
|
||||
|
||||
public const IS_DOCKER = 'IS_DOCKER';
|
||||
|
@ -96,7 +100,13 @@ final class Environment
|
|||
|
||||
public function __construct(array $elements = [])
|
||||
{
|
||||
$this->baseDir = dirname(__DIR__);
|
||||
$this->parentDir = dirname($this->baseDir);
|
||||
$this->isDocker = file_exists($this->parentDir . '/.docker');
|
||||
|
||||
$this->data = array_merge($this->defaults, $elements);
|
||||
$this->appEnv = ApplicationEnvironment::tryFrom($this->data[self::APP_ENV] ?? '')
|
||||
?? ApplicationEnvironment::default();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -109,8 +119,7 @@ final class Environment
|
|||
|
||||
public function getAppEnvironmentEnum(): ApplicationEnvironment
|
||||
{
|
||||
return ApplicationEnvironment::tryFrom($this->data[self::APP_ENV] ?? '')
|
||||
?? ApplicationEnvironment::default();
|
||||
return $this->appEnv;
|
||||
}
|
||||
|
||||
public function isProduction(): bool
|
||||
|
@ -139,7 +148,7 @@ final class Environment
|
|||
|
||||
public function isDocker(): bool
|
||||
{
|
||||
return self::envToBool($this->data[self::IS_DOCKER] ?? true);
|
||||
return $this->isDocker;
|
||||
}
|
||||
|
||||
public function isCli(): bool
|
||||
|
@ -162,39 +171,7 @@ final class Environment
|
|||
*/
|
||||
public function getBaseDirectory(): string
|
||||
{
|
||||
return $this->data[self::BASE_DIR];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string The directory where temporary files are stored by the application, i.e. `/var/app/www_tmp`
|
||||
*/
|
||||
public function getTempDirectory(): string
|
||||
{
|
||||
return $this->data[self::TEMP_DIR];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string The directory where configuration files are stored by default.
|
||||
*/
|
||||
public function getConfigDirectory(): string
|
||||
{
|
||||
return $this->data[self::CONFIG_DIR];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string The directory where template/view files are stored.
|
||||
*/
|
||||
public function getViewsDirectory(): string
|
||||
{
|
||||
return $this->data[self::VIEWS_DIR];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string The directory where user system-level uploads are stored.
|
||||
*/
|
||||
public function getUploadsDirectory(): string
|
||||
{
|
||||
return $this->data[self::UPLOADS_DIR];
|
||||
return $this->baseDir;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -202,7 +179,27 @@ final class Environment
|
|||
*/
|
||||
public function getParentDirectory(): string
|
||||
{
|
||||
return dirname($this->getBaseDirectory());
|
||||
return $this->parentDir;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string The directory where temporary files are stored by the application, i.e. `/var/app/www_tmp`
|
||||
*/
|
||||
public function getTempDirectory(): string
|
||||
{
|
||||
return $this->data[self::TEMP_DIR]
|
||||
?? $this->getParentDirectory() . '/www_tmp';
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string The directory where user system-level uploads are stored.
|
||||
*/
|
||||
public function getUploadsDirectory(): string
|
||||
{
|
||||
return $this->data[self::UPLOADS_DIR] ?? File::getFirstExistingDirectory([
|
||||
$this->getParentDirectory() . '/storage/uploads',
|
||||
$this->getParentDirectory() . '/uploads',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -13,7 +13,6 @@ use App\AppFactory;
|
|||
use App\Doctrine\ReloadableEntityManagerInterface;
|
||||
use App\Enums\ApplicationEnvironment;
|
||||
use App\Environment;
|
||||
use Codeception\Configuration;
|
||||
use Codeception\Lib\Framework;
|
||||
use Codeception\Lib\Interfaces\DoctrineProvider;
|
||||
use Codeception\Lib\ModuleContainer;
|
||||
|
@ -39,12 +38,10 @@ class Module extends Framework implements DoctrineProvider
|
|||
$this->requiredFields = ['container'];
|
||||
}
|
||||
|
||||
|
||||
public function _initialize(): void
|
||||
{
|
||||
$this->app = AppFactory::createApp(
|
||||
[
|
||||
Environment::BASE_DIR => Configuration::projectDir(),
|
||||
Environment::APP_ENV => ApplicationEnvironment::Testing->value,
|
||||
]
|
||||
);
|
||||
|
|
|
@ -38,7 +38,10 @@ final class View extends Engine
|
|||
Version $version,
|
||||
RouterInterface $router
|
||||
) {
|
||||
parent::__construct($environment->getViewsDirectory(), 'phtml');
|
||||
parent::__construct(
|
||||
dirname(__DIR__) . '/templates',
|
||||
'phtml'
|
||||
);
|
||||
|
||||
$this->sections = new GlobalSections();
|
||||
$this->globalProps = new ArrayCollection();
|
||||
|
|
|
@ -12,8 +12,11 @@ const AZURACAST_VERSION = App\Version::FALLBACK_VERSION;
|
|||
const AZURACAST_API_URL = 'https://localhost/api';
|
||||
const AZURACAST_API_NAME = 'Testing API';
|
||||
|
||||
$tempDir = sys_get_temp_dir();
|
||||
|
||||
App\AppFactory::createCli(
|
||||
[
|
||||
App\Environment::BASE_DIR => dirname(__DIR__),
|
||||
App\Environment::TEMP_DIR => $tempDir,
|
||||
App\Environment::UPLOADS_DIR => $tempDir,
|
||||
]
|
||||
);
|
||||
|
|
|
@ -3,17 +3,11 @@
|
|||
declare(strict_types=1);
|
||||
|
||||
use App\AppFactory;
|
||||
use App\Environment;
|
||||
|
||||
error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT);
|
||||
ini_set('display_errors', '1');
|
||||
|
||||
require dirname(__DIR__) . '/vendor/autoload.php';
|
||||
|
||||
$app = AppFactory::createApp(
|
||||
[
|
||||
Environment::BASE_DIR => dirname(__DIR__),
|
||||
]
|
||||
);
|
||||
|
||||
$app = AppFactory::createApp();
|
||||
$app->run();
|
||||
|
|
Loading…
Reference in New Issue