feat(config): схема URL в meta зависит от TLS_ENABLED

- при установке без TLS (--skip-tls, стенд без домена) клиент получает
  http:// и ws:// вместо неработающих https:// и wss://
- установщик пишет TLS_ENABLED в .env; тесты фиксируют обе схемы
This commit is contained in:
2026-09-19 19:58:32 +03:00
parent 6804a316cf
commit 3d1816a640
6 changed files with 52 additions and 5 deletions
+33 -2
View File
@@ -28,6 +28,7 @@ type Config struct {
LogFormat string
ReadPoolSize int
MaxUploadSize int64
TLSEnabled bool
Version string
Commit string
BuildDate string
@@ -50,6 +51,7 @@ func Load() (Config, error) {
LogFormat: strings.ToLower(env("LOG_FORMAT", "json")),
ReadPoolSize: envInt("SQLITE_READ_POOL", 4),
MaxUploadSize: envInt64("MAX_UPLOAD_SIZE", 26214400),
TLSEnabled: envBool("TLS_ENABLED", true),
Version: env("APP_VERSION", "dev"),
Commit: env("APP_COMMIT", "none"),
BuildDate: env("APP_BUILD_DATE", "unknown"),
@@ -74,8 +76,25 @@ func Load() (Config, error) {
return cfg, nil
}
func (c Config) BaseURL() string { return "https://" + c.Domain }
func (c Config) FilesURL() string { return "https://" + c.FilesDomain }
// Scheme выбирается установщиком: при установке без TLS (--skip-tls,
// например стенд без домена) клиент должен получать http/ws, а не https/wss.
func (c Config) Scheme() string {
if c.TLSEnabled {
return "https"
}
return "http"
}
func (c Config) BaseURL() string { return c.Scheme() + "://" + c.Domain }
func (c Config) FilesURL() string { return c.Scheme() + "://" + c.FilesDomain }
func (c Config) GatewayURL() string {
scheme := "ws"
if c.TLSEnabled {
scheme = "wss"
}
return scheme + "://" + c.Domain + "/gateway"
}
func (c Config) LogLevelNumeric() int {
level, err := parseLogLevel(c.LogLevel)
@@ -119,6 +138,18 @@ func envInt(key string, fallback int) int {
return n
}
func envBool(key string, fallback bool) bool {
v, ok := os.LookupEnv(key)
if !ok || v == "" {
return fallback
}
parsed, err := strconv.ParseBool(v)
if err != nil {
return fallback
}
return parsed
}
func envInt64(key string, fallback int64) int64 {
v, ok := os.LookupEnv(key)
if !ok || v == "" {