github.com/octohelm/wagon@v0.0.0-20240308040401-88662650dc0b/pkg/engine/plan/task/core/secret.go (about) 1 package core 2 3 import ( 4 "context" 5 "encoding/json" 6 "sync" 7 8 "dagger.io/dagger" 9 "github.com/opencontainers/go-digest" 10 ) 11 12 func init() { 13 DefaultFactory.Register(&Secret{}) 14 } 15 16 type Secret struct { 17 Meta struct { 18 Secret struct { 19 ID string `json:"id,omitempty"` 20 } `json:"secret"` 21 } `json:"$wagon"` 22 } 23 24 var secretids = sync.Map{} 25 26 func (s Secret) SecretID() dagger.SecretID { 27 if id, ok := fsids.Load(s.Meta.Secret.ID); ok { 28 return id.(dagger.SecretID) 29 } 30 return "" 31 } 32 33 func (s *Secret) SetSecretID(id dagger.SecretID) { 34 key := digest.FromString(string(id)).String() 35 fsids.Store(key, id) 36 s.Meta.Secret.ID = key 37 } 38 39 func (s *Secret) SetSecretIDBy(ctx context.Context, secret *dagger.Secret) error { 40 id, err := secret.ID(ctx) 41 if err != nil { 42 return err 43 } 44 s.SetSecretID(id) 45 return nil 46 } 47 48 type SecretOrString struct { 49 Value string 50 Secret *Secret 51 } 52 53 func (SecretOrString) OneOf() []any { 54 return []any{ 55 "", 56 &Secret{}, 57 } 58 } 59 60 func (s *SecretOrString) UnmarshalJSON(data []byte) error { 61 if len(data) > 0 && data[0] == '{' { 62 se := &Secret{} 63 if err := json.Unmarshal(data, se); err != nil { 64 return err 65 } 66 s.Secret = se 67 return nil 68 } 69 return json.Unmarshal(data, &s.Value) 70 } 71 72 func (s SecretOrString) MarshalJSON() ([]byte, error) { 73 if s.Secret != nil { 74 return json.Marshal(s.Secret) 75 } 76 return json.Marshal(s.Value) 77 }