@@ -0,0 +1,65 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log/slog"
|
||||
"os"
|
||||
|
||||
"github.com/sethvargo/go-envconfig"
|
||||
)
|
||||
|
||||
type Cfg struct {
|
||||
FileSystem *WebdavConfig `env:", prefix=FILESYSTEM_"`
|
||||
Cache *ValkeyConfig `env:", prefix=CACHE_"`
|
||||
}
|
||||
|
||||
type WebdavConfig struct {
|
||||
URL string `env:"URL"`
|
||||
User string `env:"USERNAME"`
|
||||
Password string `env:"PASSWORD"`
|
||||
}
|
||||
|
||||
type ValkeyConfig struct {
|
||||
ClientName string `env:"CLIENTNAME"`
|
||||
Username string `env:"USERNAME"`
|
||||
Password string `env:"PASSWORD"`
|
||||
|
||||
// InitAddress point to valkey nodes.
|
||||
// Valkey will connect to them one by one and issue a CLUSTER SLOT command to initialize the cluster client until success.
|
||||
// If len(InitAddress) == 1 and the address is not running in cluster mode, valkey will fall back to the single client mode.
|
||||
// If ClientOption.Sentinel.MasterSet is set, then InitAddress will be used to connect sentinels
|
||||
// You can bypass this behavior by using ClientOption.ForceSingleClient.
|
||||
InitAddress []string `env:"ADDRESS"`
|
||||
}
|
||||
|
||||
func Read(ctx context.Context) (cfg Cfg, err error) {
|
||||
// ex, err := os.Executable()
|
||||
// if err != nil {
|
||||
// panic(err)
|
||||
// }
|
||||
// slog.Debug("loading .env", "pwd", filepath.Dir(ex))
|
||||
// err = godotenv.Load(".")
|
||||
// if err != nil {
|
||||
// return
|
||||
// }
|
||||
//
|
||||
slog.Info("adsf", "test", os.Getenv("TEST"))
|
||||
|
||||
err = envconfig.ProcessWith(ctx, &envconfig.Config{
|
||||
Target: &cfg,
|
||||
|
||||
// All fields will use a ";" delimiter and "@" separator, unless locally
|
||||
// overridden.
|
||||
DefaultDelimiter: ";",
|
||||
DefaultSeparator: "@",
|
||||
|
||||
Lookuper: envconfig.MultiLookuper(secretLookuper(), envconfig.OsLookuper()),
|
||||
})
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
slog.Info("ca", "cacjhe", cfg.Cache)
|
||||
|
||||
return
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"io"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/sethvargo/go-envconfig"
|
||||
)
|
||||
|
||||
func secretLookuper() envconfig.LookuperFunc {
|
||||
return func(key string) (string, bool) {
|
||||
fileName := os.Getenv(key + "_FILE")
|
||||
if fileName == "" {
|
||||
return "", false
|
||||
}
|
||||
|
||||
file, err := os.Open(fileName)
|
||||
if err != nil {
|
||||
return "", false
|
||||
}
|
||||
|
||||
defer file.Close()
|
||||
|
||||
sb := &strings.Builder{}
|
||||
|
||||
_, err = io.Copy(sb, file)
|
||||
if err != nil {
|
||||
return "", false
|
||||
}
|
||||
|
||||
return sb.String(), true
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user