aboutsummaryrefslogtreecommitdiff
path: root/config.go
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fischer@muhq.space>2023-05-21 20:05:01 +0200
committerFlorian Fischer <florian.fischer@muhq.space>2023-05-21 20:05:01 +0200
commit5ee0fb4aa53e02a4b6c2ffb3d5bfa3a6153c9a06 (patch)
tree5268e39568e6146521e4be9e0c1b70d3afca538c /config.go
parentead811a4ebd0074cc4d42da53daacbb358229fac (diff)
downloadWRMS-5ee0fb4aa53e02a4b6c2ffb3d5bfa3a6153c9a06.tar.gz
WRMS-5ee0fb4aa53e02a4b6c2ffb3d5bfa3a6153c9a06.zip
implement YAML config and admin connections
Diffstat (limited to 'config.go')
-rw-r--r--config.go78
1 files changed, 74 insertions, 4 deletions
diff --git a/config.go b/config.go
index a74069d..049145a 100644
--- a/config.go
+++ b/config.go
@@ -1,9 +1,79 @@
package main
+import (
+ "io"
+ "os"
+ "path"
+
+ "github.com/google/uuid"
+ "gopkg.in/yaml.v3"
+ "muhq.space/go/wrms/llog"
+)
+
type Config struct {
- Port int
- Backends string
- LocalMusicDir string
- UploadDir string
+ Port int `yaml:"port"`
+ Backends []string `yaml:"backends"`
+ LocalMusicDir string `yaml:"music-dir"`
+ UploadDir string `yaml:"upload-dir"`
+ Admin uuid.UUID `yaml:"admin"`
+ spotify *spotifyConfig
HasUpload bool
}
+
+func defaultConfig() Config {
+ c := Config{Port: 8080, UploadDir: "upload"}
+ return c
+}
+
+func (c Config) IsAdmin(id uuid.UUID) bool {
+ return c.Admin == id
+}
+
+func findConfig() string {
+ confDir := os.Getenv("XDG_CONFIG_DIR")
+ if confDir == "" {
+ confDir = os.Getenv("HOME")
+ }
+
+ paths := []string{"config.yml",
+ path.Join(confDir, "wrms", "config.yml")}
+
+ for _, path := range paths {
+ fileInfo, err := os.Stat(path)
+ if !os.IsNotExist(err) && !fileInfo.IsDir() {
+ return path
+ }
+ }
+
+ return ""
+}
+
+func loadConfig(configPath string) Config {
+ f, err := os.Open(configPath)
+ if err != nil {
+ llog.Fatal("Opening config %s failed: %v", configPath, err)
+ }
+ defer f.Close()
+
+ data, err := io.ReadAll(f)
+ if err != nil {
+ llog.Fatal("Reading config %s failed: %v", configPath, err)
+ }
+
+ config := defaultConfig()
+ err = yaml.Unmarshal(data, &config)
+ if err != nil {
+ llog.Fatal("Failed to parse config %s: %v", configPath, err)
+ }
+
+ return config
+}
+
+func newConfig() Config {
+ configPath := findConfig()
+ if configPath != "" {
+ return loadConfig(configPath)
+ }
+
+ return defaultConfig()
+}