mirror of
https://github.com/go-task/task.git
synced 2025-11-23 22:24:45 +02:00
38 lines
914 B
Go
38 lines
914 B
Go
package templater
|
|
|
|
import (
|
|
"github.com/go-task/task/v3/taskfile/ast"
|
|
)
|
|
|
|
// MaskSecrets replaces template placeholders with their values, masking secrets.
|
|
// This function uses the Go templater to resolve all variables ({{.VAR}}) while
|
|
// masking secret ones as "*****".
|
|
func MaskSecrets(cmdTemplate string, vars *ast.Vars) string {
|
|
if vars == nil || vars.Len() == 0 {
|
|
return cmdTemplate
|
|
}
|
|
|
|
// Create a cache map with secrets masked
|
|
maskedVars := vars.DeepCopy()
|
|
for name, v := range maskedVars.All() {
|
|
if v.Secret {
|
|
// Replace secret value with mask
|
|
maskedVars.Set(name, ast.Var{
|
|
Value: "*****",
|
|
Secret: true,
|
|
})
|
|
}
|
|
}
|
|
|
|
// Use the templater to resolve the template with masked secrets
|
|
cache := &Cache{Vars: maskedVars}
|
|
result := Replace(cmdTemplate, cache)
|
|
|
|
// If there was an error, return the original template
|
|
if cache.Err() != nil {
|
|
return cmdTemplate
|
|
}
|
|
|
|
return result
|
|
}
|