SiteWeaver_CMS/config/bootstrap.php

67 lines
1.6 KiB
PHP

<?php
/**
* File: config/bootstrap.php
*
* Author: Funky Waddle
* Date: 2026-09-10
*
* Purpose:
* Bootstrap configuration and DI container.
*/
declare(strict_types=1);
use SiteWeaver\Core\Container;
use SiteWeaver\Core\Config;
use SiteWeaver\Core\Router;
use Infisical\SDK\InfisicalSDK;
use Infisical\SDK\Models\ListSecretsParameters;
require __DIR__ . '/../vendor/autoload.php';
load_env();
$mergedEnv = $_ENV + $_SERVER;
$container = new Container();
// Register core services
$router = new Router();
$config = new Config();
$config->load($mergedEnv);
$container->add('router', $router);
$container->add('config', $config);
return $container;
function load_env(): void {
// Load .env file if there is one
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__ . '/..');
$dotenv->safeLoad();
// Load Infisical vars if set
$url = $_ENV['INFISICAL_URL'] ?? null;
$machine_id = $_ENV['INFISICAL_MACHINE_ID'] ?? null;
$secret_id = $_ENV['INFISICAL_SECRET_ID'] ?? null;
$project_id = $_ENV['INFISICAL_PROJECT_ID'] ?? null;
$env = $_ENV['INFISICAL_ENV'] ?? null;
if (!empty($url)) {
$sdk = new InfisicalSDK($url);
$response = $sdk->auth()->universalAuth()->login($machine_id, $secret_id);
$params = new ListSecretsParameters(
environment: $env,
secretPath: "/",
projectId: $project_id
);
$secrets = $sdk->secrets()->list($params);
foreach ($secrets as $secret) {
putenv("{$secret->secretKey}={$secret->secretValue}");
$_ENV[$secret->secretKey] = $secret->secretValue;
}
}
}