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  }