CreateSecret implementaion 43/31943/4
authorvamshi.nemalikonda <vn00480215@techmahindra.com>
Thu, 22 Feb 2018 10:44:25 +0000 (10:44 +0000)
committerKiran <kiran.k.kamineni@intel.com>
Thu, 22 Feb 2018 20:55:46 +0000 (12:55 -0800)
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 <vn00480215@techmahindra.com>
sms-service/src/sms/backend/backend.go
sms-service/src/sms/backend/vault.go
sms-service/src/sms/handler/handler.go
sms-service/src/sms/handler/handler_test.go

index 2536fe1..3ea651a 100644 (file)
@@ -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
index c912dae..2a0b3cd 100644 (file)
@@ -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
index f287263..ed68c81 100644 (file)
@@ -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
 }
index 3ca2ae6..affa6f7 100644 (file)
@@ -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 {