From 68704340c9193b1a241dfd28bf691866db0df5f1 Mon Sep 17 00:00:00 2001
From: ale <ale@incal.net>
Date: Wed, 13 Dec 2017 22:16:10 +0000
Subject: [PATCH] Properly inline the YAML server Config object

Also add a test to verify that we're loading the config correctly.
---
 cmd/sso-server/main.go      | 16 +++++------
 cmd/sso-server/main_test.go | 54 +++++++++++++++++++++++++++++++++++++
 2 files changed, 62 insertions(+), 8 deletions(-)
 create mode 100644 cmd/sso-server/main_test.go

diff --git a/cmd/sso-server/main.go b/cmd/sso-server/main.go
index 84f2d0a..26d6cfc 100644
--- a/cmd/sso-server/main.go
+++ b/cmd/sso-server/main.go
@@ -21,17 +21,17 @@ var (
 // Config wraps together the sso-server configuration and the standard
 // HTTP server config.
 type Config struct {
-	*server.Config
-	ServerConfig *serverutil.ServerConfig `yaml:"http_server"`
+	server.Config `yaml:",inline"`
+	ServerConfig  *serverutil.ServerConfig `yaml:"http_server"`
 }
 
-func loadConfig() (*Config, error) {
+func loadConfig(path string) (*Config, error) {
 	// Read YAML config.
-	data, err := ioutil.ReadFile(*configFile)
+	data, err := ioutil.ReadFile(path)
 	if err != nil {
 		return nil, err
 	}
-	config := Config{Config: new(server.Config)}
+	var config Config
 	if err := yaml.Unmarshal(data, &config); err != nil {
 		return nil, err
 	}
@@ -42,7 +42,7 @@ func main() {
 	log.SetFlags(0)
 	flag.Parse()
 
-	config, err := loadConfig()
+	config, err := loadConfig(*configFile)
 	if err != nil {
 		log.Fatal(err)
 	}
@@ -50,13 +50,13 @@ func main() {
 		log.Fatal(err)
 	}
 
-	loginService, err := server.NewLoginService(config.Config)
+	loginService, err := server.NewLoginService(&config.Config)
 	if err != nil {
 		log.Fatal(err)
 	}
 
 	authClient := client.New(*authSocket)
-	httpSrv, err := server.New(loginService, authClient, config.Config)
+	httpSrv, err := server.New(loginService, authClient, &config.Config)
 	if err != nil {
 		log.Fatal(err)
 	}
diff --git a/cmd/sso-server/main_test.go b/cmd/sso-server/main_test.go
new file mode 100644
index 0000000..1e26c60
--- /dev/null
+++ b/cmd/sso-server/main_test.go
@@ -0,0 +1,54 @@
+package main
+
+import (
+	"io/ioutil"
+	"os"
+	"testing"
+)
+
+var testConfig = `---
+secret_key_file: "/etc/sso/secret.key"
+public_key_file: "/etc/sso/public.key"
+domain: "example.com"
+allowed_services:
+  - "^(login|panel|monitor|logs)\\.example.com/$"
+  - "^\\d+\\.webmail\\.example.com/$"
+allowed_exchanges:
+  - src_regexp: "^www.example.com/webmail/\\d+/$"
+  - dst_regexp: "^imap.example.com/$"
+service_ttls:
+  - regexp: "^www.example.com/webmail/\\d+/$"
+    ttl: 43200
+  - regexp: "^imap.example.com/$"
+    ttl: 43200
+  - regexp: ".*"
+    ttl: 300
+auth_session_lifetime: 43200
+session_secrets:
+  - "iNQcyp5neUmbrxoj4yfRVhGL8HYGKNWRIv7t5ZiTxXwnJqBJYIU0gQx+1ar7Hsn0"
+  - "Xqphf9jjr/jZCk+m"
+csrf_secret: "XLFtiymBU5p59K/IsqW/oh/5dfP4UC6JSNWMVeiQ8t8GjnB1rzusIFnyho5y4nE1"
+auth_service: sso
+device_manager:
+  auth_key: "ffolt81h4CA5kEcwckXmuUUkchwKQmRAeWb1H6Kpzx3+uGqwrVpBfGwzRSYaeir1"
+  trusted_forwarders:
+    - 192.168.10.10
+`
+
+func TestMain_LoadConfig(t *testing.T) {
+	dir, err := ioutil.TempDir("", "")
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer os.RemoveAll(dir)
+
+	ioutil.WriteFile(dir+"/config.yml", []byte(testConfig), 0640)
+
+	conf, err := loadConfig(dir + "/config.yml")
+	if err != nil {
+		t.Fatal("LoadConfig:", err)
+	}
+	if err := conf.Config.Compile(); err != nil {
+		t.Fatal("Compile:", err)
+	}
+}
-- 
GitLab