github.com/hashicorp/vault/sdk@v0.13.0/database/helper/credsutil/sql.go (about)

     1  // Copyright (c) HashiCorp, Inc.
     2  // SPDX-License-Identifier: MPL-2.0
     3  
     4  package credsutil
     5  
     6  import (
     7  	"context"
     8  	"time"
     9  
    10  	"github.com/hashicorp/vault/sdk/database/dbplugin"
    11  )
    12  
    13  const (
    14  	NoneLength int = -1
    15  )
    16  
    17  // SQLCredentialsProducer implements CredentialsProducer and provides a generic credentials producer for most sql database types.
    18  type SQLCredentialsProducer struct {
    19  	DisplayNameLen    int
    20  	RoleNameLen       int
    21  	UsernameLen       int
    22  	Separator         string
    23  	LowercaseUsername bool
    24  }
    25  
    26  func (scp *SQLCredentialsProducer) GenerateCredentials(ctx context.Context) (string, error) {
    27  	password, err := scp.GeneratePassword()
    28  	if err != nil {
    29  		return "", err
    30  	}
    31  	return password, nil
    32  }
    33  
    34  func (scp *SQLCredentialsProducer) GenerateUsername(config dbplugin.UsernameConfig) (string, error) {
    35  	caseOp := KeepCase
    36  	if scp.LowercaseUsername {
    37  		caseOp = Lowercase
    38  	}
    39  	return GenerateUsername(
    40  		DisplayName(config.DisplayName, scp.DisplayNameLen),
    41  		RoleName(config.RoleName, scp.RoleNameLen),
    42  		Case(caseOp),
    43  		Separator(scp.Separator),
    44  		MaxLength(scp.UsernameLen),
    45  	)
    46  }
    47  
    48  func (scp *SQLCredentialsProducer) GeneratePassword() (string, error) {
    49  	password, err := RandomAlphaNumeric(20, true)
    50  	if err != nil {
    51  		return "", err
    52  	}
    53  
    54  	return password, nil
    55  }
    56  
    57  func (scp *SQLCredentialsProducer) GenerateExpiration(ttl time.Time) (string, error) {
    58  	return ttl.Format("2006-01-02 15:04:05-0700"), nil
    59  }