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  }