ghostream/main.go

80 lines
2.0 KiB
Go
Raw Normal View History

2020-09-21 15:29:50 +00:00
package main
import (
2020-09-21 17:59:41 +00:00
"log"
2020-09-22 09:42:57 +00:00
"strings"
2020-09-21 17:59:41 +00:00
2020-09-22 09:42:57 +00:00
"github.com/spf13/viper"
"gitlab.crans.org/nounous/ghostream/auth"
2020-09-21 19:38:11 +00:00
"gitlab.crans.org/nounous/ghostream/internal/monitoring"
2020-09-21 15:47:31 +00:00
"gitlab.crans.org/nounous/ghostream/web"
2020-09-21 15:29:50 +00:00
)
2020-09-22 09:42:57 +00:00
func loadConfiguration() {
// 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("Auth.Backend", "LDAP")
viper.SetDefault("Auth.LDAP.URI", "ldap://127.0.0.1:389")
viper.SetDefault("Auth.LDAP.UserDn", "cn=users,dc=example,dc=com")
viper.SetDefault("Monitoring.ListenAddress", ":2112")
viper.SetDefault("Web.ListenAddress", "127.0.0.1:8080")
viper.SetDefault("Web.Name", "Ghostream")
viper.SetDefault("Web.Hostname", "localhost")
viper.SetDefault("Web.Favicon", "/favicon.ico")
}
2020-09-21 15:29:50 +00:00
func main() {
2020-09-21 17:59:41 +00:00
// Load configuration
2020-09-22 09:42:57 +00:00
loadConfiguration()
cfg := struct {
Auth auth.Options
Monitoring monitoring.Options
Web web.Options
}{}
if err := viper.Unmarshal(&cfg); err != nil {
log.Fatalln("Failed to load settings", err)
2020-09-21 17:59:41 +00:00
}
2020-09-22 10:54:12 +00:00
// Init authentification
//authBackend := auth.New(&cfg.Auth)
2020-09-21 19:05:45 +00:00
// Start web server routine
go func() {
2020-09-22 09:42:57 +00:00
web.ServeHTTP(&cfg.Web)
2020-09-21 19:05:45 +00:00
}()
2020-09-21 19:33:32 +00:00
// Start monitoring server routine
go func() {
2020-09-22 09:42:57 +00:00
monitoring.ServeHTTP(&cfg.Monitoring)
2020-09-21 19:33:32 +00:00
}()
2020-09-21 19:05:45 +00:00
// Wait for routines
select {}
2020-09-21 15:29:50 +00:00
}