Documentation
¶
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type EncodedResource ¶ added in v0.20.0
type EncodedResource string
EncodedResource is a string that encodes a resource
type Registry ¶ added in v0.3.0
type Registry struct {
// contains filtered or unexported fields
}
type Resource ¶
type Resource struct {
Name string `json:",omitempty" yaml:"Name,omitempty"`
URL string `json:",omitempty" yaml:"URL,omitempty"`
Key string `json:",omitempty" yaml:"Key,omitempty"` //encryption key
MaxRetry int `json:",omitempty" yaml:"MaxRetry,omitempty"`
TimeoutMs int `json:",omitempty" yaml:"TimeoutMs,omitempty"`
Fallback *Resource `json:",omitempty" yaml:"Fallback,omitempty"`
Options []storage.Option `json:"-" yaml:"-"`
Data []byte `json:",omitempty" yaml:"Data,omitempty"`
// contains filtered or unexported fields
}
Resource represents a secret config
func NewResource ¶
NewResource creates a resource
type Secret ¶
type Secret struct {
*Resource
Target interface{}
IsPlain bool
// contains filtered or unexported fields
}
Secret represent secret
type Service ¶
type Service struct {
// contains filtered or unexported fields
}
Service represents secret service
func (*Service) Load ¶
Load loads secret
Example ¶
{ //loading generic credentials from google secret manager
resource := NewResource("", "gcp://secretmanager/projects/gcp-e2e/secrets/mycred", "")
secrets := New()
secret, err := secrets.Load(context.Background(), resource)
if err != nil {
log.Fatalln(err)
}
fmt.Printf("%T -> %s\n", secret.Target, secret.String())
dsn := "${Username}:${Password}@/dbname"
db, err := sql.Open("mysql", secret.Expand(dsn))
fmt.Printf("%v %v\n", db, err)
}
{ //loading secret from google cloud secret manager
resource := NewResource("secret", "gcp://secretmanager/projects/gcp-e2e/secrets/test2sec", "")
secrets := New()
secret, err := secrets.Load(context.Background(), resource)
if err != nil {
log.Fatalln(err)
}
fmt.Printf("%v\n", secret.String())
}
{ //loading secret from cloud storage encrypted with GCP KMS
cipher, err := gcp.New(context.Background())
if err != nil {
log.Fatalln(err)
}
kms.Register(gcp.Scheme, cipher)
resource := NewResource("secret", "gs://mybucket/asset.enc", "gcp://kms/projects/my-project/locations/us-central1/keyRings/my-ring/cryptoKeys/my-key")
secrets := New()
secret, err := secrets.Load(context.Background(), resource)
if err != nil {
log.Fatalln(err)
}
fmt.Printf("%v \n", secret.String())
}
{ //loading local secret
//Assume that : /tmp/secret.json {"Username":"Bob","EncryptedSecret":"AAAAAAAAAAAtM4MTWOJOJ4SyE44PjH66"}
//make sure _ "github.com/viant/scy/kms/blowfish" is imported
resource := NewResource(cred.Basic{}, "/tmp/secret.json", "blowfish://default")
secrets := New()
secret, err := secrets.Load(context.Background(), resource)
if err != nil {
log.Fatalln(err)
}
basicCred := secret.Target.(*cred.Basic)
fmt.Printf("user: %v, password: %v\n", basicCred.Username, basicCred.Password)
dsn := "${cred.Username}:${cred.Password}}@/dbname"
db, err := sql.Open("mysql", secret.Expand(dsn))
fmt.Printf("%v %v\n", db, err)
}
{ //loading encrypted file
resource := NewResource("password", "/tmp/password.enc", "blowfish://default")
secrets := New()
secret, err := secrets.Load(context.Background(), resource)
if err != nil {
log.Fatalln(err)
}
dsn := "myuser:${password}}@/dbname"
db, err := sql.Open("mysql", secret.Expand(dsn))
if err != nil {
log.Fatalln(err)
}
fmt.Printf("%v %v\n", db, err)
}
{ //loading structured encrypted file
resource := NewResource("password", "/tmp/cred.enc", "blowfish://default")
secrets := New()
secret, err := secrets.Load(context.Background(), resource)
if err != nil {
log.Fatalln(err)
}
dsn := "${cred.Username}:${cred.Password}}@/dbname"
db, err := sql.Open("mysql", secret.Expand(dsn))
if err != nil {
log.Fatalln(err)
}
fmt.Printf("%v %v\n", db, err)
}
Click to show internal directories.
Click to hide internal directories.