fix: harden runtime policy and remove legacy hysteria mutation paths
This commit is contained in:
@@ -111,7 +111,7 @@ export function parseRuntimeEnv(content: string): RuntimeConfig {
|
||||
domain: env.HY2XS_DOMAIN || "",
|
||||
publicHost: normalizePublicHost(env.HY2XS_PUBLIC_HOST || env.HY2XS_DOMAIN || ""),
|
||||
publicPort: parsePort("HY2XS_PUBLIC_PORT", env.HY2XS_PUBLIC_PORT, hysteriaPort),
|
||||
ipv6Enabled: false,
|
||||
ipv6Enabled: parseBool("HY2XS_IPV6_ENABLED", env.HY2XS_IPV6_ENABLED, false),
|
||||
sshPort: parsePort("HY2XS_SSH_PORT", env.HY2XS_SSH_PORT, 22),
|
||||
firewallEnabled: parseBool("HY2XS_FIREWALL_ENABLED", env.HY2XS_FIREWALL_ENABLED, true),
|
||||
firewallStagedApply: parseBool("HY2XS_FIREWALL_STAGED_APPLY", env.HY2XS_FIREWALL_STAGED_APPLY, true),
|
||||
@@ -121,6 +121,7 @@ export function parseRuntimeEnv(content: string): RuntimeConfig {
|
||||
adminInitialPassword: valueOrGenerate(env.HY2XS_ADMIN_INITIAL_PASSWORD),
|
||||
adminConPass: requireValue("HY2XS_ADMIN_CON_PASS", valueOrGenerate(env.HY2XS_ADMIN_CON_PASS)),
|
||||
forcePasswordChange: parseBool("HY2XS_FORCE_PASSWORD_CHANGE", env.HY2XS_FORCE_PASSWORD_CHANGE, true),
|
||||
allowSelfSignedDev: parseBool("HY2XS_ALLOW_SELF_SIGNED_DEV", env.HY2XS_ALLOW_SELF_SIGNED_DEV, false),
|
||||
tlsMode,
|
||||
acmeType,
|
||||
acmeEmail: env.HY2XS_ACME_EMAIL || "",
|
||||
@@ -178,11 +179,17 @@ export function validateRuntimeConfig(config: RuntimeConfig): void {
|
||||
if (!config.acmeEmail) {
|
||||
throw new Error("HY2XS_ACME_EMAIL is required for TLS mode acme");
|
||||
}
|
||||
if (config.acmeType === "dns") {
|
||||
throw new Error("HY2XS_ACME_TYPE=dns is not supported in production profile yet");
|
||||
}
|
||||
}
|
||||
if (config.tlsMode === "file") {
|
||||
requireValue("HY2XS_TLS_CERT_PATH", config.tlsCertPath);
|
||||
requireValue("HY2XS_TLS_KEY_PATH", config.tlsKeyPath);
|
||||
}
|
||||
if (config.tlsMode === "self_signed_dev" && !config.allowSelfSignedDev) {
|
||||
throw new Error("HY2XS_TLS_MODE=self_signed_dev requires HY2XS_ALLOW_SELF_SIGNED_DEV=true");
|
||||
}
|
||||
|
||||
if (config.publicHost === "0.0.0.0") {
|
||||
throw new Error("HY2XS_PUBLIC_HOST must be a routable domain or IPv4, not 0.0.0.0");
|
||||
@@ -205,6 +212,7 @@ export function renderRuntimeEnv(config: RuntimeConfig): string {
|
||||
`HY2XS_ADMIN_INITIAL_PASSWORD=${config.adminInitialPassword}`,
|
||||
`HY2XS_ADMIN_CON_PASS=${config.adminConPass}`,
|
||||
`HY2XS_FORCE_PASSWORD_CHANGE=${config.forcePasswordChange}`,
|
||||
`HY2XS_ALLOW_SELF_SIGNED_DEV=${config.allowSelfSignedDev}`,
|
||||
`HY2XS_TLS_MODE=${config.tlsMode}`,
|
||||
`HY2XS_ACME_TYPE=${config.acmeType}`,
|
||||
`HY2XS_ACME_EMAIL=${config.acmeEmail}`,
|
||||
|
||||
Reference in New Issue
Block a user