74 lines
1.8 KiB
Go
74 lines
1.8 KiB
Go
/*
|
|
* Copyright (C) 2020 Cr@ns <roots@crans.org>
|
|
* Authors : Alexandre Iooss <erdnaxe@crans.org>
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
package config
|
|
|
|
import (
|
|
"log"
|
|
"strings"
|
|
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
// Config holds app configuration
|
|
type Config struct {
|
|
AuthBackend string
|
|
LDAP struct {
|
|
URI string
|
|
UserDn string
|
|
}
|
|
Site struct {
|
|
ListenAdress string
|
|
Name string
|
|
Hostname string
|
|
Favicon string
|
|
WidgetURL string
|
|
}
|
|
}
|
|
|
|
// New configuration
|
|
func New() (*Config, error) {
|
|
// Load configuration from environnement variables
|
|
// Replace "." to "_" for nested structs
|
|
// e.g. GHOSTREAM_LDAP_URI will apply to Config.LDAP.URI
|
|
viper.SetEnvPrefix("ghostream")
|
|
replacer := strings.NewReplacer(".", "_")
|
|
viper.SetEnvKeyReplacer(replacer)
|
|
viper.AutomaticEnv()
|
|
|
|
// Load configuration file if exists
|
|
viper.SetConfigName("ghostream")
|
|
viper.SetConfigType("yaml")
|
|
viper.AddConfigPath("$HOME/.ghostream")
|
|
viper.AddConfigPath("/etc/ghostream")
|
|
viper.AddConfigPath(".")
|
|
if err := viper.ReadInConfig(); err != nil {
|
|
if _, ok := err.(viper.ConfigFileNotFoundError); ok {
|
|
// Config file not found, ignore and use defaults
|
|
log.Print(err)
|
|
} else {
|
|
// Config file was found but another error was produced
|
|
log.Fatal(err)
|
|
}
|
|
} else {
|
|
// Config loaded
|
|
log.Printf("Using config file: %s", viper.ConfigFileUsed())
|
|
}
|
|
|
|
// Define configuration default values
|
|
viper.SetDefault("AuthBackend", "LDAP")
|
|
viper.SetDefault("LDAP.URI", "ldap://127.0.0.1:389")
|
|
viper.SetDefault("LDAP.UserDn", "cn=users,dc=example,dc=com")
|
|
viper.SetDefault("Site.ListenAdress", "127.0.0.1:8080")
|
|
viper.SetDefault("Site.Name", "Ghostream")
|
|
viper.SetDefault("Site.Hostname", "localhost")
|
|
viper.SetDefault("Site.Favicon", "/favicon.ico")
|
|
|
|
config := &Config{}
|
|
err := viper.Unmarshal(config)
|
|
return config, err
|
|
}
|