From cfc939f3cb2042c220d38ad730e993d133d926e9 Mon Sep 17 00:00:00 2001 From: "vamshi.nemalikonda" Date: Thu, 22 Feb 2018 10:44:25 +0000 Subject: CreateSecret implementaion Implementaion code added for createsecret method Updated handler.go to check return value from createsecret Added checktoken before write secret Issue-ID: AAF-126 Change-Id: Ia46a0f1be5904072da74e04d123f88b09b46ed69 Signed-off-by: vamshi.nemalikonda --- sms-service/src/sms/backend/backend.go | 6 +++--- sms-service/src/sms/backend/vault.go | 17 +++++++++++++++-- sms-service/src/sms/handler/handler.go | 20 ++++++++++++++------ sms-service/src/sms/handler/handler_test.go | 4 ++-- 4 files changed, 34 insertions(+), 13 deletions(-) (limited to 'sms-service/src') diff --git a/sms-service/src/sms/backend/backend.go b/sms-service/src/sms/backend/backend.go index 2536fe1..3ea651a 100644 --- a/sms-service/src/sms/backend/backend.go +++ b/sms-service/src/sms/backend/backend.go @@ -36,8 +36,8 @@ type SecretKeyValue struct { // Secret is the struct that defines the structure of a secret // A single Secret can have any number of SecretKeyValue pairs type Secret struct { - Name string `json:"name"` - Values map[string]string `json:"values"` + Name string `json:"name"` + Values map[string]interface{} `json:"values"` } // SecretBackend interface that will be implemented for various secret backends @@ -49,7 +49,7 @@ type SecretBackend interface { GetSecret(dom string, sec string) (Secret, error) CreateSecretDomain(name string) (SecretDomain, error) - CreateSecret(dom string, sec Secret) (Secret, error) + CreateSecret(dom string, sec Secret) error DeleteSecretDomain(name string) error DeleteSecret(dom string, name string) error diff --git a/sms-service/src/sms/backend/vault.go b/sms-service/src/sms/backend/vault.go index c912dae..2a0b3cd 100644 --- a/sms-service/src/sms/backend/vault.go +++ b/sms-service/src/sms/backend/vault.go @@ -20,6 +20,7 @@ import ( uuid "github.com/hashicorp/go-uuid" vaultapi "github.com/hashicorp/vault/api" + "errors" "fmt" "log" "strings" @@ -128,9 +129,21 @@ func (v *Vault) CreateSecretDomain(name string) (SecretDomain, error) { // CreateSecret creates a secret mounted on a particular domain name // The secret itself is mounted on a path specified by name -func (v *Vault) CreateSecret(dom string, sec Secret) (Secret, error) { +func (v *Vault) CreateSecret(dom string, sec Secret) error { + err := v.checkToken() + if err != nil { + return errors.New("Token checking returned an error" + err.Error()) + } - return Secret{}, nil + dom = v.vaultMount + "/" + dom + + // Vault write return is empty on successful write + _, err = v.vaultClient.Logical().Write(dom+"/"+sec.Name, sec.Values) + if err != nil { + return errors.New("Unable to create Secret at provided path") + } + + return nil } // DeleteSecretDomain deletes a secret domain which translates to diff --git a/sms-service/src/sms/handler/handler.go b/sms-service/src/sms/handler/handler.go index f287263..ed68c81 100644 --- a/sms-service/src/sms/handler/handler.go +++ b/sms-service/src/sms/handler/handler.go @@ -18,6 +18,7 @@ package handler import ( "encoding/json" + "fmt" "github.com/gorilla/mux" "net/http" @@ -43,7 +44,7 @@ func (h handler) createSecretDomainHandler(w http.ResponseWriter, r *http.Reques dom, err := h.secretBackend.CreateSecretDomain(d.Name) if err != nil { - http.Error(w, err.Error(), 400) + http.Error(w, err.Error(), 500) return } @@ -59,7 +60,8 @@ func (h handler) getSecretDomainHandler(w http.ResponseWriter, r *http.Request) vars := mux.Vars(r) domName := vars["domName"] - h.secretBackend.GetSecretDomain(domName) + fmt.Fprintf(w, "Got req %s", domName) + //h.secretBackend.GetSecretDomain(domName) //encode data into json and return } @@ -85,7 +87,13 @@ func (h handler) createSecretHandler(w http.ResponseWriter, r *http.Request) { return } - h.secretBackend.CreateSecret(domName, b) + err = h.secretBackend.CreateSecret(domName, b) + if err != nil { + http.Error(w, err.Error(), 500) + return + } + + w.WriteHeader(http.StatusCreated) } // getSecretHandler handles reading a secret by given domain name and secret name @@ -163,9 +171,9 @@ func CreateRouter(b smsbackend.SecretBackend) http.Handler { router.HandleFunc("/v1/sms/domain/{domName}", h.getSecretDomainHandler).Methods("GET") router.HandleFunc("/v1/sms/domain/{domName}", h.deleteSecretDomainHandler).Methods("DELETE") - router.HandleFunc("v1/sms/domain/{domainName}/secret", h.createSecretHandler).Methods("POST") - router.HandleFunc("v1/sms/domain/{domainName}/secret/{secretName}", h.getSecretHandler).Methods("GET") - router.HandleFunc("v1/sms/domain/{domainName}/secret/{secretName}", h.deleteSecretHandler).Methods("DELETE") + router.HandleFunc("/v1/sms/domain/{domName}/secret", h.createSecretHandler).Methods("POST") + router.HandleFunc("/v1/sms/domain/{domName}/secret/{secretName}", h.getSecretHandler).Methods("GET") + router.HandleFunc("/v1/sms/domain/{domName}/secret/{secretName}", h.deleteSecretHandler).Methods("DELETE") return router } diff --git a/sms-service/src/sms/handler/handler_test.go b/sms-service/src/sms/handler/handler_test.go index 3ca2ae6..affa6f7 100644 --- a/sms-service/src/sms/handler/handler_test.go +++ b/sms-service/src/sms/handler/handler_test.go @@ -54,8 +54,8 @@ func (b *TestBackend) CreateSecretDomain(name string) (smsbackend.SecretDomain, return smsbackend.SecretDomain{}, nil } -func (b *TestBackend) CreateSecret(dom string, sec smsbackend.Secret) (smsbackend.Secret, error) { - return smsbackend.Secret{}, nil +func (b *TestBackend) CreateSecret(dom string, sec smsbackend.Secret) error { + return nil } func (b *TestBackend) DeleteSecretDomain(name string) error { -- cgit 1.2.3-korg