// 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
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
uuid "github.com/hashicorp/go-uuid"
vaultapi "github.com/hashicorp/vault/api"
+ "errors"
"fmt"
"log"
"strings"
// 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
import (
"encoding/json"
+ "fmt"
"github.com/gorilla/mux"
"net/http"
dom, err := h.secretBackend.CreateSecretDomain(d.Name)
if err != nil {
- http.Error(w, err.Error(), 400)
+ http.Error(w, err.Error(), 500)
return
}
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
}
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
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
}
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 {