From bef31e1d35fe88f2698cf0e3191f26a79623f66f Mon Sep 17 00:00:00 2001 From: Martin Kagamino Lehoux Date: Wed, 5 Aug 2026 11:21:55 +0200 Subject: feat: Add web ride library with Strava sync --- config/env.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 config/env.go (limited to 'config') diff --git a/config/env.go b/config/env.go new file mode 100644 index 0000000..b9d9f76 --- /dev/null +++ b/config/env.go @@ -0,0 +1,52 @@ +package config + +import ( + "fmt" + "os" + "strings" +) + +func LoadEnv(filename string) (map[string]string, error) { + data, err := os.ReadFile(filename) + if err != nil { + return nil, err + } + values := map[string]string{} + for _, line := range strings.Split(string(data), "\n") { + line = strings.TrimSpace(line) + if line == "" || strings.HasPrefix(line, "#") { + continue + } + key, value, found := strings.Cut(line, "=") + if found { + values[strings.TrimSpace(key)] = strings.Trim(strings.TrimSpace(value), `"`) + } + } + return values, nil +} + +func UpdateEnv(filename string, updates map[string]string) error { + data, err := os.ReadFile(filename) + if err != nil { + return err + } + lines := strings.Split(string(data), "\n") + for key, value := range updates { + found := false + for i, line := range lines { + existingKey, _, cut := strings.Cut(strings.TrimSpace(line), "=") + if cut && strings.TrimSpace(existingKey) == key { + lines[i] = key + "=" + value + found = true + break + } + } + if !found { + lines = append(lines, key+"="+value) + } + } + if err := os.WriteFile(filename, []byte(strings.Join(lines, "\n")+"\n"), 0o600); err != nil { + return fmt.Errorf("write env file: %w", err) + } + return nil +} -- cgit v1.2.3