CreateSecret implementaion
[aaf/sms.git] / sms-service / src / sms / backend / backend.go
index ceb28a4..3ea651a 100644 (file)
 package backend
 
 import (
-       vaultwrap "sms/backend/vault"
+       smsconfig "sms/config"
 )
 
-// SecretDomain struct that will be passed around between http handler
-// and code that interfaces with vault
+// SecretDomain is where Secrets are stored.
+// A single domain can have any number of secrets
 type SecretDomain struct {
-       ID         int
-       Name       string
-       MountPoint string
+       UUID string `json:"uuid"`
+       Name string `json:"name"`
+}
+
+// SecretKeyValue is building block for a Secret
+type SecretKeyValue struct {
+       Key   string `json:"name"`
+       Value string `json:"value"`
+}
+
+// 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]interface{} `json:"values"`
 }
 
 // SecretBackend interface that will be implemented for various secret backends
 type SecretBackend interface {
-       Init()
+       Init() error
 
-       GetStatus() bool
+       GetStatus() (bool, error)
+       GetSecretDomain(name string) (SecretDomain, error)
+       GetSecret(dom string, sec string) (Secret, error)
+
+       CreateSecretDomain(name string) (SecretDomain, error)
+       CreateSecret(dom string, sec Secret) error
+
+       DeleteSecretDomain(name string) error
+       DeleteSecret(dom string, name string) error
 }
 
 // InitSecretBackend returns an interface implementation
-func InitSecretBackend() SecretBackend {
-       backendImpl := &vaultwrap.Vault{}
-       backendImpl.Init()
-       return backendImpl
+func InitSecretBackend() (SecretBackend, error) {
+       backendImpl := &Vault{
+               vaultAddress: smsconfig.SMSConfig.VaultAddress,
+               vaultToken:   smsconfig.SMSConfig.VaultToken,
+       }
+
+       err := backendImpl.Init()
+       if err != nil {
+               return nil, err
+       }
+
+       return backendImpl, nil
 }
 
 // LoginBackend Interface that will be implemented for various login backends