A fork of https://github.com/teal-fm/piper
at fly 72 lines 2.3 kB view raw
1package config 2 3import ( 4 "log" 5 "strings" 6 7 "github.com/joho/godotenv" 8 "github.com/spf13/viper" 9) 10 11// Load initializes the configuration with viper 12func Load() { 13 if err := godotenv.Load(); err != nil { 14 log.Println("No .env file found or error loading it. Using default values and environment variables.") 15 } 16 17 viper.SetDefault("server.port", "8080") 18 viper.SetDefault("server.host", "localhost") 19 viper.SetDefault("callback.spotify", "http://localhost:8080/callback/spotify") 20 viper.SetDefault("spotify.auth_url", "https://accounts.spotify.com/authorize") 21 viper.SetDefault("spotify.token_url", "https://accounts.spotify.com/api/token") 22 viper.SetDefault("spotify.scopes", "user-read-currently-playing user-read-email") 23 viper.SetDefault("tracker.interval", 30) 24 viper.SetDefault("db.path", "./data/piper.db") 25 26 // Apple Music defaults 27 viper.SetDefault("applemusic.team_id", "") 28 viper.SetDefault("applemusic.key_id", "") 29 viper.SetDefault("applemusic.private_key_path", "./AM_AUTHKEY.p8") 30 31 // server metadata 32 viper.SetDefault("server.root_url", "http://localhost:8080") 33 viper.SetDefault("atproto.metadata_url", "http://localhost:8080/metadata") 34 viper.SetDefault("atproto.callback_url", "/metadata") 35 36 viper.AutomaticEnv() 37 38 // Support APPLE_MUSIC_* env var aliases 39 _ = viper.BindEnv("applemusic.team_id", "APPLE_MUSIC_TEAM_ID") 40 _ = viper.BindEnv("applemusic.key_id", "APPLE_MUSIC_KEY_ID") 41 _ = viper.BindEnv("applemusic.private_key_path", "APPLE_MUSIC_PRIVATE_KEY_PATH") 42 43 viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) 44 45 viper.SetConfigName("config") 46 viper.SetConfigType("yaml") 47 viper.AddConfigPath("./config") 48 viper.AddConfigPath(".") 49 50 if err := viper.ReadInConfig(); err != nil { 51 if _, ok := err.(viper.ConfigFileNotFoundError); !ok { 52 log.Fatalf("Error reading config file: %v", err) 53 } 54 log.Println("Config file not found, using default values and environment variables") 55 } else { 56 log.Println("Using config file:", viper.ConfigFileUsed()) 57 } 58 59 // check for required settings 60 requiredVars := []string{"spotify.client_id", "spotify.client_secret"} 61 missingVars := []string{} 62 63 for _, v := range requiredVars { 64 if !viper.IsSet(v) { 65 missingVars = append(missingVars, v) 66 } 67 } 68 69 if len(missingVars) > 0 { 70 log.Fatalf("Required configuration variables not set: %s", strings.Join(missingVars, ", ")) 71 } 72}