From cbb142ec414b78d6b2c4067cb7f8eed947263d26 Mon Sep 17 00:00:00 2001 From: Mike Holloway Date: Fri, 17 Apr 2020 14:13:53 -0500 Subject: [PATCH] added support for basic authentication into ChartMuseum --- README.md | 9 ++++++++ controllers/chartmuseum.go | 45 +++++++++++++++++++++++++++++++++++--- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 963076e..219fa6a 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,15 @@ To add a simple basic auth to ChartMuseumUI, you can add the following configura BASIC_AUTH_USERS: '[{"username":"admin", "password":"password"}, {"username":"user", "password":"s3cr3t"}]' ``` +### Adding back end authentication to ChartMuseumUI + +To add a back end credentials to be used by ChartMuseumUI, you can add the following configuration + +``` +BACKEND_BASIC_AUTH_USER: username +BACKEND_BASIC_AUTH_PASS: password +``` + ## Built With * [beego](https://beego.me/) - The web framework used diff --git a/controllers/chartmuseum.go b/controllers/chartmuseum.go index 172bea3..7701720 100644 --- a/controllers/chartmuseum.go +++ b/controllers/chartmuseum.go @@ -16,7 +16,22 @@ func getCharts() map[string][]models.Chart { l := logs.GetLogger() l.Printf("Getting charts on url: %s\n", getBaseURL()) - res, err := httplib.Get(getBaseURL()).Debug(true).Bytes() + + backendUser := os.Getenv("BACKEND_BASIC_AUTH_USER") + backendPass := os.Getenv("BACKEND_BASIC_AUTH_PASS") + + var err error + var res []byte + if len(backendUser) == 0 { + res, err = httplib.Get(getBaseURL()).Debug(true).Bytes() + } else if len(backendPass) == 0 { + l.Println("BACKEND_BASIC_AUTH_USER supplied without BACKEND_BASIC_AUTH_PASS, trying anyway") + res, err = httplib.Get(getBaseURL()).SetBasicAuth(backendUser, "").Debug(true).Bytes() + } else { + res, err = httplib.Get(getBaseURL()).SetBasicAuth(backendUser, backendPass).Debug(true).Bytes() + } + + if err != nil { l.Panic(err.Error) } @@ -36,7 +51,19 @@ func uploadChart(filePath string) { l := logs.GetLogger() - cmd := exec.Command("curl", "-L", "--data-binary", "@"+filePath, getBaseURL()) + backendUser := os.Getenv("BACKEND_BASIC_AUTH_USER") + backendPass := os.Getenv("BACKEND_BASIC_AUTH_PASS") + + cmd := exec.Command("echo") + if len(backendUser) == 0 { + cmd = exec.Command("curl", "-L", "--data-binary", "@"+filePath, getBaseURL()) + } else if len(backendPass) == 0 { + l.Println("BACKEND_BASIC_AUTH_USER supplied without BACKEND_BASIC_AUTH_PASS, trying anyway") + cmd = exec.Command("curl", "-L", "--user", backendUser+":", "--data-binary", "@"+filePath, getBaseURL()) + } else { + cmd = exec.Command("curl", "-L", "--user", backendUser+":"+backendPass,"--data-binary", "@"+filePath, getBaseURL()) + } + out, err := cmd.CombinedOutput() if err != nil { l.Fatalf("cmd.Run() failed with %s\n", err) @@ -48,7 +75,19 @@ func deleteChart(name string, version string) { l := logs.GetLogger() l.Println("in deleteChart()") - cmd := exec.Command("curl", "-X", "DELETE", getBaseURL()+"/"+name+"/"+version) + + backendUser := os.Getenv("BACKEND_BASIC_AUTH_USER") + backendPass := os.Getenv("BACKEND_BASIC_AUTH_PASS") + + cmd := exec.Command("echo") + if len(backendUser) == 0 { + cmd = exec.Command("curl", "-X", "DELETE", getBaseURL()+"/"+name+"/"+version) + } else if len(backendPass) == 0 { + cmd = exec.Command("curl", "--user", backendUser+":", "-X", "DELETE", getBaseURL()+"/"+name+"/"+version) + } else { + cmd = exec.Command("curl", "--user", backendUser+":"+backendPass, "-X", "DELETE", getBaseURL()+"/"+name+"/"+version) + } + out, err := cmd.CombinedOutput() if err != nil { l.Fatalf("cmd.Run() failed with %s\n", err)