safeLoad(); } $logLevelName = strtoupper((string) (getenv('LOG_LEVEL') ?: 'info')); $logLevel = match ($logLevelName) { 'DEBUG' => Level::Debug, 'NOTICE' => Level::Notice, 'WARNING' => Level::Warning, 'ERROR' => Level::Error, 'CRITICAL' => Level::Critical, 'ALERT' => Level::Alert, 'EMERGENCY' => Level::Emergency, default => Level::Info, }; $oidcDefaultRoleName = strtolower((string) (getenv('OIDC_DEFAULT_ROLE') ?: 'viewer')); $oidcDefaultRole = $oidcDefaultRoleName === 'none' ? null : (Role::tryFrom($oidcDefaultRoleName) ?? Role::Viewer); return [ 'app_env' => $appEnv, 'log_level' => $logLevel, 'app_secret' => getenv('APP_SECRET') ?: '', 'db' => [ 'driver' => getenv('DB_DRIVER') ?: 'sqlite', 'sqlite_path' => getenv('DB_SQLITE_PATH') ?: '/data/irdb.sqlite', 'mysql_host' => getenv('DB_MYSQL_HOST') ?: '', 'mysql_port' => (int) (getenv('DB_MYSQL_PORT') ?: 3306), 'mysql_database' => getenv('DB_MYSQL_DATABASE') ?: '', 'mysql_username' => getenv('DB_MYSQL_USERNAME') ?: '', 'mysql_password' => getenv('DB_MYSQL_PASSWORD') ?: '', ], 'ui_service_token' => getenv('UI_SERVICE_TOKEN') ?: '', 'internal_job_token' => getenv('INTERNAL_JOB_TOKEN') ?: '', 'ui_origin' => getenv('UI_ORIGIN') ?: 'http://localhost:8080', 'oidc_default_role' => $oidcDefaultRole, 'score_hard_cutoff_days' => (int) (getenv('SCORE_REPORT_HARD_CUTOFF_DAYS') ?: 365), 'rate_limit_per_second' => (int) (getenv('API_RATE_LIMIT_PER_SECOND') ?: 60), 'job_recompute_max_runtime_seconds' => (int) (getenv('JOB_RECOMPUTE_MAX_RUNTIME_SECONDS') ?: 240), 'job_recompute_max_rows_per_tick' => (int) (getenv('JOB_RECOMPUTE_MAX_ROWS_PER_TICK') ?: 5000), 'job_audit_retention_days' => (int) (getenv('JOB_AUDIT_RETENTION_DAYS') ?: 180), 'cidr_evaluator_ttl_seconds' => (int) (getenv('CIDR_EVALUATOR_TTL_SECONDS') ?: 60), ];