github.com/Axway/agent-sdk@v1.1.101/pkg/util/log/util.go (about)

     1  package log
     2  
     3  import (
     4  	"encoding/json"
     5  	"regexp"
     6  )
     7  
     8  // ObscureArguments obscure/mask/redact values for a set of trailing arguments
     9  func ObscureArguments(redactedFields []string, args ...interface{}) []interface{} {
    10  	var obscuredParams []interface{}
    11  	for _, arg := range args {
    12  		b, _ := json.Marshal(arg)
    13  		obscuredParams = append(obscuredParams, obscureParams(string(b), redactedFields))
    14  	}
    15  	return obscuredParams
    16  
    17  }
    18  
    19  // obscureParams obscure/mask/redact a set of values in a json string
    20  func obscureParams(jsn string, sensitiveParams []string) string {
    21  	for _, param := range sensitiveParams {
    22  		jsn = obscureParam(jsn, param)
    23  	}
    24  	return jsn
    25  }
    26  
    27  // obscureParam obscure/mask/redact a value in a json string
    28  func obscureParam(jsn string, param string) string {
    29  
    30  	rWithNumberSlash := *regexp.MustCompile(`"` + param + `": ?([0-9]+)`)
    31  	jsn = rWithNumberSlash.ReplaceAllString(jsn, `"`+param+`": "[redacted]"`)
    32  
    33  	rWithNumberNoSlash := *regexp.MustCompile(`\\"` + param + `\\":.*?([0-9]+)`)
    34  	jsn = rWithNumberNoSlash.ReplaceAllString(jsn, `"`+param+`": "[redacted]"`)
    35  
    36  	rWithSlash := *regexp.MustCompile(`\\"` + param + `\\":.*?"(.*?)\\"`)
    37  	jsn = rWithSlash.ReplaceAllString(jsn, `\"`+param+`\": "[redacted]"`)
    38  
    39  	rWithoutSlash := *regexp.MustCompile(`"` + param + `":.*?"(.*?)"`)
    40  	return rWithoutSlash.ReplaceAllString(jsn, `"`+param+`": "[redacted]"`)
    41  }