From 95f214c99ba0b3497a46f7567082216732a5fe0b Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Thu, 5 Feb 2015 15:40:51 -0800 Subject: [PATCH 1/2] Append to Users list --- pkg/api/webuiapi/webuiapi.go | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pkg/api/webuiapi/webuiapi.go b/pkg/api/webuiapi/webuiapi.go index 389e5061c..262aabf28 100644 --- a/pkg/api/webuiapi/webuiapi.go +++ b/pkg/api/webuiapi/webuiapi.go @@ -77,6 +77,13 @@ func (web *webUiApi) accessHandler(w http.ResponseWriter, req *http.Request) { } user.SecretKey = string(secretkey) + err = web.conf.ReadConfig() + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + w.Write([]byte(err.Error())) + return + } + web.conf.AddUser(user) err = web.conf.WriteConfig() if err != nil { From 72d0999dcb0602d9babd677ea0d5ebddac9b4e8b Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Thu, 5 Feb 2015 15:59:44 -0800 Subject: [PATCH 2/2] Reply back AccessKey, Secretkey through json --- pkg/api/webuiapi/webuiapi.go | 41 +++++++++++++++++++++++++++++------- pkg/utils/config/config.go | 18 ++++++++++++++++ 2 files changed, 51 insertions(+), 8 deletions(-) diff --git a/pkg/api/webuiapi/webuiapi.go b/pkg/api/webuiapi/webuiapi.go index 262aabf28..70bb51bda 100644 --- a/pkg/api/webuiapi/webuiapi.go +++ b/pkg/api/webuiapi/webuiapi.go @@ -17,6 +17,8 @@ package webuiapi import ( + "bytes" + "encoding/json" "log" "net/http" "path" @@ -35,6 +37,11 @@ type webUiApi struct { webPath string } +// No encoder interface exists, so we create one. +type encoder interface { + Encode(v interface{}) error +} + func HttpHandler() http.Handler { mux := mux.NewRouter() var api = webUiApi{} @@ -49,6 +56,17 @@ func HttpHandler() http.Handler { return mux } +func writeResponse(w http.ResponseWriter, response interface{}) []byte { + var bytesBuffer bytes.Buffer + var encoder encoder + w.Header().Set("Content-Type", "application/json") + encoder = json.NewEncoder(&bytesBuffer) + w.Header().Set("Server", "Minio Management Console") + w.Header().Set("Connection", "close") + encoder.Encode(response) + return bytesBuffer.Bytes() +} + func (web *webUiApi) accessHandler(w http.ResponseWriter, req *http.Request) { var err error var accesskey, secretkey []byte @@ -58,6 +76,18 @@ func (web *webUiApi) accessHandler(w http.ResponseWriter, req *http.Request) { return } + err = web.conf.ReadConfig() + if err != nil { + w.WriteHeader(http.StatusInternalServerError) + w.Write([]byte(err.Error())) + return + } + + if web.conf.IsUserExists(username) { + w.WriteHeader(http.StatusConflict) + return + } + var user = config.User{} user.Name = username @@ -77,13 +107,6 @@ func (web *webUiApi) accessHandler(w http.ResponseWriter, req *http.Request) { } user.SecretKey = string(secretkey) - err = web.conf.ReadConfig() - if err != nil { - w.WriteHeader(http.StatusInternalServerError) - w.Write([]byte(err.Error())) - return - } - web.conf.AddUser(user) err = web.conf.WriteConfig() if err != nil { @@ -99,5 +122,7 @@ func (web *webUiApi) accessHandler(w http.ResponseWriter, req *http.Request) { return } - log.Println("Config:", web.conf.Users) + // Get user back for sending it over HTTP reply + user = web.conf.GetUser(username) + w.Write(writeResponse(w, user)) } diff --git a/pkg/utils/config/config.go b/pkg/utils/config/config.go index 97bfabf13..ec4e64435 100644 --- a/pkg/utils/config/config.go +++ b/pkg/utils/config/config.go @@ -45,6 +45,24 @@ func (c *Config) GetConfigPath() string { return c.configPath } +func (c *Config) IsUserExists(username string) bool { + for _, user := range c.Users { + if user.Name == username { + return true + } + } + return false +} + +func (c *Config) GetUser(username string) User { + for _, user := range c.Users { + if user.Name == username { + return user + } + } + return User{} +} + func (c *Config) AddUser(user User) { var currentUsers map[string]User if len(c.Users) == 0 {