// Copyright (c) HashiCorp, Inc. // SPDX-License-Identifier: BUSL-1.1 package api import ( "os" "strings" ) const ( // legacyEnvPrefix is the environment variable prefix used by upstream // HashiCorp Boundary. It is still honored as a fallback. legacyEnvPrefix = "BOUNDARY_" // envPrefix is the preferred environment variable prefix for Threshold. envPrefix = "THRESHOLD_" ) // PreferredEnvName returns the Threshold (THRESHOLD_*) form of an environment // variable name. Names that do not use the legacy BOUNDARY_ prefix are // returned unchanged. func PreferredEnvName(name string) string { if strings.HasPrefix(name, legacyEnvPrefix) { return envPrefix + strings.TrimPrefix(name, legacyEnvPrefix) } return name } // LegacyEnvName returns the legacy (BOUNDARY_*) form of an environment // variable name. Names that do not use the THRESHOLD_ prefix are returned // unchanged. func LegacyEnvName(name string) string { if strings.HasPrefix(name, envPrefix) { return legacyEnvPrefix + strings.TrimPrefix(name, envPrefix) } return name } // LookupEnv looks up an environment variable, preferring the THRESHOLD_* // name and falling back to the legacy BOUNDARY_* name. The name may be given // with either prefix; names with neither prefix are looked up as-is. func LookupEnv(name string) (string, bool) { if v, ok := os.LookupEnv(PreferredEnvName(LegacyEnvName(name))); ok { return v, true } return os.LookupEnv(LegacyEnvName(name)) } // Getenv is like os.Getenv but follows the LookupEnv precedence. A set but // empty THRESHOLD_* variable falls through to the legacy BOUNDARY_* variable. func Getenv(name string) string { if v := os.Getenv(PreferredEnvName(LegacyEnvName(name))); v != "" { return v } return os.Getenv(LegacyEnvName(name)) }