mirror of
https://github.com/TECHNOFAB11/dbmate.git
synced 2025-12-12 08:00:04 +01:00
parent
2b61b4375a
commit
11c251bd25
2 changed files with 30 additions and 1 deletions
11
main.go
11
main.go
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"log"
|
"log"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
|
"regexp"
|
||||||
|
|
||||||
"github.com/joho/godotenv"
|
"github.com/joho/godotenv"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
|
|
@ -19,7 +20,8 @@ func main() {
|
||||||
err := app.Run(os.Args)
|
err := app.Run(os.Args)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_, _ = fmt.Fprintf(os.Stderr, "Error: %s\n", err)
|
errText := redactLogString(fmt.Sprintf("Error: %s\n", err))
|
||||||
|
_, _ = fmt.Fprint(os.Stderr, errText)
|
||||||
os.Exit(2)
|
os.Exit(2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -219,3 +221,10 @@ func getDatabaseURL(c *cli.Context) (u *url.URL, err error) {
|
||||||
|
|
||||||
return url.Parse(value)
|
return url.Parse(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// redactLogString attempts to redact passwords from errors
|
||||||
|
func redactLogString(in string) string {
|
||||||
|
re := regexp.MustCompile("([a-zA-Z]+://[^:]+:)[^@]+@")
|
||||||
|
|
||||||
|
return re.ReplaceAllString(in, "${1}********@")
|
||||||
|
}
|
||||||
|
|
|
||||||
20
main_test.go
20
main_test.go
|
|
@ -35,3 +35,23 @@ func TestGetDatabaseUrl(t *testing.T) {
|
||||||
require.Equal(t, "example.org", u.Host)
|
require.Equal(t, "example.org", u.Host)
|
||||||
require.Equal(t, "/db", u.Path)
|
require.Equal(t, "/db", u.Path)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRedactLogString(t *testing.T) {
|
||||||
|
examples := []struct {
|
||||||
|
in string
|
||||||
|
expected string
|
||||||
|
}{
|
||||||
|
{"normal string",
|
||||||
|
"normal string"},
|
||||||
|
// malformed URL example (note forward slash in password)
|
||||||
|
{"parse \"mysql://username:otS33+tb/e4=@localhost:3306/database\": invalid",
|
||||||
|
"parse \"mysql://username:********@localhost:3306/database\": invalid"},
|
||||||
|
// invalid port, but probably not a password since there is no @
|
||||||
|
{"parse \"mysql://localhost:abc/database\": invalid",
|
||||||
|
"parse \"mysql://localhost:abc/database\": invalid"},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, ex := range examples {
|
||||||
|
require.Equal(t, ex.expected, redactLogString(ex.in))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue