github.com/gofiber/fiber/v2@v2.47.0/middleware/envvar/envvar.go (about) 1 package envvar 2 3 import ( 4 "os" 5 "strings" 6 7 "github.com/gofiber/fiber/v2" 8 ) 9 10 // Config defines the config for middleware. 11 type Config struct { 12 // ExportVars specifies the environment variables that should export 13 ExportVars map[string]string 14 // ExcludeVars specifies the environment variables that should not export 15 ExcludeVars map[string]string 16 } 17 18 type EnvVar struct { 19 Vars map[string]string `json:"vars"` 20 } 21 22 func (envVar *EnvVar) set(key, val string) { 23 envVar.Vars[key] = val 24 } 25 26 func New(config ...Config) fiber.Handler { 27 var cfg Config 28 if len(config) > 0 { 29 cfg = config[0] 30 } 31 32 return func(c *fiber.Ctx) error { 33 if c.Method() != fiber.MethodGet { 34 return fiber.ErrMethodNotAllowed 35 } 36 37 envVar := newEnvVar(cfg) 38 varsByte, err := c.App().Config().JSONEncoder(envVar) 39 if err != nil { 40 return c.Status(fiber.StatusInternalServerError).SendString(err.Error()) 41 } 42 c.Set(fiber.HeaderContentType, fiber.MIMEApplicationJSONCharsetUTF8) 43 return c.Send(varsByte) 44 } 45 } 46 47 func newEnvVar(cfg Config) *EnvVar { 48 vars := &EnvVar{Vars: make(map[string]string)} 49 50 if len(cfg.ExportVars) > 0 { 51 for key, defaultVal := range cfg.ExportVars { 52 vars.set(key, defaultVal) 53 if envVal, exists := os.LookupEnv(key); exists { 54 vars.set(key, envVal) 55 } 56 } 57 } else { 58 const numElems = 2 59 for _, envVal := range os.Environ() { 60 keyVal := strings.SplitN(envVal, "=", numElems) 61 if _, exists := cfg.ExcludeVars[keyVal[0]]; !exists { 62 vars.set(keyVal[0], keyVal[1]) 63 } 64 } 65 } 66 67 return vars 68 }