get.porter.sh/porter@v1.3.0/pkg/generator/credentials.go (about)

     1  package generator
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"sort"
     7  	"strings"
     8  
     9  	"get.porter.sh/porter/pkg/secrets"
    10  	"get.porter.sh/porter/pkg/storage"
    11  	"github.com/cnabio/cnab-go/bundle"
    12  )
    13  
    14  // GenerateCredentialsOptions are the options to generate a Credential Set
    15  type GenerateCredentialsOptions struct {
    16  	GenerateOptions
    17  
    18  	// Credentials from the bundle
    19  	Credentials map[string]bundle.Credential
    20  }
    21  
    22  // GenerateCredentials will generate a credential set based on the given options
    23  func GenerateCredentials(opts GenerateCredentialsOptions) (storage.CredentialSet, error) {
    24  	if opts.Name == "" {
    25  		return storage.CredentialSet{}, errors.New("credentialset name is required")
    26  	}
    27  	generator := genSurvey
    28  	if opts.Silent {
    29  		generator = genEmptySet
    30  	}
    31  	credSet, err := genCredentialSet(opts.Namespace, opts.Name, opts.Credentials, generator)
    32  	if err != nil {
    33  		return storage.CredentialSet{}, err
    34  	}
    35  
    36  	credSet.Labels = opts.Labels
    37  	return credSet, nil
    38  }
    39  
    40  func genCredentialSet(namespace string, name string, creds map[string]bundle.Credential, fn generator) (storage.CredentialSet, error) {
    41  	cs := storage.NewCredentialSet(namespace, name)
    42  	cs.Credentials = []secrets.SourceMap{}
    43  
    44  	if strings.ContainsAny(name, "./\\") {
    45  		return cs, fmt.Errorf("credentialset name '%s' cannot contain the following characters: './\\'", name)
    46  	}
    47  
    48  	var credentialNames []string
    49  	for name := range creds {
    50  		credentialNames = append(credentialNames, name)
    51  	}
    52  
    53  	sort.Strings(credentialNames)
    54  
    55  	for _, name := range credentialNames {
    56  		c, err := fn(name, surveyCredentials, withRequired(creds[name].Required), withDescription(creds[name].Description))
    57  		if err != nil {
    58  			return cs, err
    59  		}
    60  		cs.Credentials = append(cs.Credentials, c)
    61  	}
    62  
    63  	return cs, nil
    64  }