'testing', 'APP_DEBUG' => 'true', 'DB_CONNECTION' => 'pgsql', 'DB_HOST' => '127.0.0.1', 'DB_PORT' => '55441', 'DB_DATABASE' => 'investmoz_test', 'DB_USERNAME' => 'investmoz_test', 'DB_PASSWORD' => '', 'DB_URL' => '', 'QUEUE_CONNECTION' => 'sync', 'SESSION_DRIVER' => 'array', 'CACHE_STORE' => 'array', ]; foreach ($qaEnvironment as $key => $value) { putenv($key.'='.$value); $_ENV[$key] = $value; $_SERVER[$key] = $value; } $path = rawurldecode(parse_url($_SERVER['REQUEST_URI'] ?? '/', PHP_URL_PATH) ?: '/'); $asset = $root.'/public'.$path; if ($path !== '/' && is_file($asset)) { return false; } require_once $root.'/vendor/autoload.php'; $app = require $root.'/bootstrap/app.php'; $app->make(Kernel::class)->bootstrap(); // Keep QA on the checked-in build manifest; the developer Vite server may be // stale or backed by a different working copy and is never the QA frontend. Vite::useHotFile($root.'/storage/framework/investmoz-qa-hot-file'); $configuration = $app->make('config'); $connectionName = $configuration->get('database.default'); $connection = $configuration->get('database.connections.'.$connectionName, []); // Fail before opening a connection if cached config or .env changes the target. if ($connectionName !== 'pgsql' || ($connection['host'] ?? null) !== '127.0.0.1' || (string) ($connection['port'] ?? '') !== '55441' || ($connection['database'] ?? null) !== 'investmoz_test' || ! in_array($connection['url'] ?? null, [null, ''], true)) { http_response_code(503); exit('QA database configuration did not match the fixed target.'); } $identity = $app->make('db')->connection($connectionName)->selectOne( 'select current_database() as database, host(inet_server_addr()) as host, inet_server_port() as port', ); if ($identity->database !== 'investmoz_test' || $identity->host !== '127.0.0.1' || (int) $identity->port !== 55441) { http_response_code(503); exit('Connected database did not match the fixed QA target.'); } header('X-Investmoz-QA-Target: '.$identity->database.':'.$identity->port); $app->handleRequest(Request::capture());