github.com/hashicorp/vault/sdk@v0.11.0/helper/template/funcs.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: MPL-2.0 3 4 package template 5 6 import ( 7 "crypto/sha256" 8 "encoding/base64" 9 "fmt" 10 "strconv" 11 "strings" 12 "time" 13 14 UUID "github.com/hashicorp/go-uuid" 15 ) 16 17 func unixTime() string { 18 return strconv.FormatInt(time.Now().Unix(), 10) 19 } 20 21 func unixTimeMillis() string { 22 return strconv.FormatInt(time.Now().UnixNano()/int64(time.Millisecond), 10) 23 } 24 25 func timestamp(format string) string { 26 return time.Now().Format(format) 27 } 28 29 func truncate(maxLen int, str string) (string, error) { 30 if maxLen <= 0 { 31 return "", fmt.Errorf("max length must be > 0 but was %d", maxLen) 32 } 33 if len(str) > maxLen { 34 return str[:maxLen], nil 35 } 36 return str, nil 37 } 38 39 const ( 40 sha256HashLen = 8 41 ) 42 43 func truncateSHA256(maxLen int, str string) (string, error) { 44 if maxLen <= 8 { 45 return "", fmt.Errorf("max length must be > 8 but was %d", maxLen) 46 } 47 48 if len(str) <= maxLen { 49 return str, nil 50 } 51 52 truncIndex := maxLen - sha256HashLen 53 hash := hashSHA256(str[truncIndex:]) 54 result := fmt.Sprintf("%s%s", str[:truncIndex], hash[:sha256HashLen]) 55 return result, nil 56 } 57 58 func hashSHA256(str string) string { 59 return fmt.Sprintf("%x", sha256.Sum256([]byte(str))) 60 } 61 62 func encodeBase64(str string) string { 63 return base64.StdEncoding.EncodeToString([]byte(str)) 64 } 65 66 func uppercase(str string) string { 67 return strings.ToUpper(str) 68 } 69 70 func lowercase(str string) string { 71 return strings.ToLower(str) 72 } 73 74 func replace(find string, replace string, str string) string { 75 return strings.ReplaceAll(str, find, replace) 76 } 77 78 func uuid() (string, error) { 79 return UUID.GenerateUUID() 80 }