From 131677c39cd9182824da47f62cf44e605770213e Mon Sep 17 00:00:00 2001 From: Roman Date: Sun, 22 Mar 2015 13:59:30 +0000 Subject: [PATCH] auth implementation --- configuration/configuration.go | 2 ++ configuration/marathon.go | 6 ++++++ main/bamboo/bamboo.go | 3 +++ services/marathon/marathon.go | 25 +++++++++++++++++-------- 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/configuration/configuration.go b/configuration/configuration.go index dfe29c0..4025b3c 100644 --- a/configuration/configuration.go +++ b/configuration/configuration.go @@ -45,6 +45,8 @@ func FromFile(filePath string) (Configuration, error) { conf := &Configuration{} err := conf.FromFile(filePath) setValueFromEnv(&conf.Marathon.Endpoint, "MARATHON_ENDPOINT") + setValueFromEnv(&conf.Marathon.AuthUsername, "MARATHON_USERNAME") + setValueFromEnv(&conf.Marathon.AuthPassword, "MARATHON_PASSWORD") setValueFromEnv(&conf.Bamboo.Endpoint, "BAMBOO_ENDPOINT") setValueFromEnv(&conf.Bamboo.Zookeeper.Host, "BAMBOO_ZK_HOST") diff --git a/configuration/marathon.go b/configuration/marathon.go index 48ea521..6b3b899 100644 --- a/configuration/marathon.go +++ b/configuration/marathon.go @@ -10,6 +10,12 @@ import ( type Marathon struct { // comma separated marathon http endpoints including port number Endpoint string + + // username for HTTP Basic Authentication + AuthUsername string + + // password for HTTP Basic Authentication + AuthPassword string } func (m Marathon) Endpoints() []string { diff --git a/main/bamboo/bamboo.go b/main/bamboo/bamboo.go index d3eb3b4..f68eb35 100644 --- a/main/bamboo/bamboo.go +++ b/main/bamboo/bamboo.go @@ -116,6 +116,9 @@ func registerMarathonEvent(conf *configuration.Configuration) { for _, marathon := range conf.Marathon.Endpoints() { url := marathon + "/v2/eventSubscriptions?callbackUrl=" + conf.Bamboo.Endpoint + "/api/marathon/event_callback" req, _ := http.NewRequest("POST", url, nil) + if (len(conf.Marathon.AuthUsername) > 0) { + req.SetBasicAuth(conf.Marathon.AuthUsername, conf.Marathon.AuthPassword) + } req.Header.Add("Content-Type", "application/json") client.Do(req) } diff --git a/services/marathon/marathon.go b/services/marathon/marathon.go index d5278c4..dd587bf 100644 --- a/services/marathon/marathon.go +++ b/services/marathon/marathon.go @@ -83,8 +83,14 @@ type HealthChecks struct { Path string `json:path` } -func fetchMarathonApps(endpoint string) (map[string]MarathonApp, error) { - response, err := http.Get(endpoint + "/v2/apps") +func fetchMarathonApps(maraconf configuration.Marathon, endpoint string) (map[string]MarathonApp, error) { + client := &http.Client{} + req, _ := http.NewRequest("GET", endpoint + "/v2/apps", nil) + if (len(maraconf.AuthUsername) > 0) { + req.SetBasicAuth(maraconf.AuthUsername, maraconf.AuthPassword) + } + req.Header.Add("Accept", "application/json") + response, err := client.Do(req) if err != nil { return nil, err @@ -112,9 +118,12 @@ func fetchMarathonApps(endpoint string) (map[string]MarathonApp, error) { } } -func fetchTasks(endpoint string) (map[string][]MarathonTask, error) { +func fetchTasks(maraconf configuration.Marathon, endpoint string) (map[string][]MarathonTask, error) { client := &http.Client{} - req, err := http.NewRequest("GET", endpoint+"/v2/tasks", nil) + req, _ := http.NewRequest("GET", endpoint + "/v2/tasks", nil) + if (len(maraconf.AuthUsername) > 0) { + req.SetBasicAuth(maraconf.AuthUsername, maraconf.AuthPassword) + } req.Header.Add("Accept", "application/json") response, err := client.Do(req) @@ -208,7 +217,7 @@ func FetchApps(maraconf configuration.Marathon) (AppList, error) { // try all configured endpoints until one succeeds for _, url := range maraconf.Endpoints() { - applist, err = _fetchApps(url) + applist, err = _fetchApps(maraconf, url) if err == nil { return applist, err } @@ -217,13 +226,13 @@ func FetchApps(maraconf configuration.Marathon) (AppList, error) { return nil, err } -func _fetchApps(url string) (AppList, error) { - tasks, err := fetchTasks(url) +func _fetchApps(maraconf configuration.Marathon, url string) (AppList, error) { + tasks, err := fetchTasks(maraconf, url) if err != nil { return nil, err } - marathonApps, err := fetchMarathonApps(url) + marathonApps, err := fetchMarathonApps(maraconf, url) if err != nil { return nil, err }