I've a string like this: docker login -u username -p password docker-registry-url
.
I execute the command in a Groovy script with execute
. For debugging purposes, I print the command before execution, but since it contains sensitive data, I obfuscate the username and password.
def printableCmd = cmd.toString()
def m = printableCmd =~ /(?:.+) -u (.+) -p (.+) (?:.+)/
if (m.matches() && m[0].size() >= 3) {
printableCmd = m[0][-1..-2].inject(m[0][0]) { acc, val -> acc.replaceAll(val, "***") }
}
The above works as expected and prints docker login -u *** -p *** docker-registry-url
, but I'm wondering if there is a more idiomatic way to do this. Note that I don't want to delete the captured groups, just replace them with asterisks, thus making it very clear that the command is not wrong, but obfuscated for security purposes.