github.com/olli-ai/jx/v2@v2.0.400-0.20210921045218-14731b4dd448/pkg/util/secrets/secrets.go (about)

     1  package secrets
     2  
     3  import (
     4  	"github.com/pkg/errors"
     5  	"github.com/sethvargo/go-password/password"
     6  )
     7  
     8  const (
     9  	allowedSymbols   = "~!#%^_+-=?,."
    10  	length           = 20
    11  	numDigits        = 4
    12  	numSymbols       = 2
    13  	upperCaseAllowed = true
    14  	allowRepeat      = true
    15  )
    16  
    17  // DefaultGenerateSecret generates a secret using sensible defaults
    18  func DefaultGenerateSecret() (string, error) {
    19  	input := password.GeneratorInput{
    20  		Symbols: allowedSymbols,
    21  	}
    22  
    23  	generator, err := password.NewGenerator(&input)
    24  	if err != nil {
    25  		return "", errors.Wrap(err, "unable to create password generator")
    26  	}
    27  
    28  	secret, err := generator.Generate(length, numDigits, numSymbols, !upperCaseAllowed, allowRepeat)
    29  
    30  	if err != nil {
    31  		return "", errors.Wrap(err, "unable to generate secret")
    32  	}
    33  	return secret, nil
    34  }