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 }