|
8 | 8 | "log/slog" |
9 | 9 | "math" |
10 | 10 | "math/rand" |
| 11 | + "net/url" |
11 | 12 | "strings" |
12 | 13 | "sync" |
13 | 14 | "time" |
@@ -253,9 +254,14 @@ func newSystemDatabase(ctx context.Context, inputs newSystemDatabaseInput) (syst |
253 | 254 | customPool := inputs.customPool |
254 | 255 | logger := inputs.logger |
255 | 256 |
|
256 | | - maskedDatabaseURL := maskPassword(databaseURL) |
257 | | - fmt.Println(maskedDatabaseURL) |
258 | | - |
| 257 | + // Displaying Masked Database URL |
| 258 | + maskedDatabaseURL, err := maskPassword(databaseURL) |
| 259 | + if err != nil { |
| 260 | + logger.Warn("Failed to parse database URL", "error", err) |
| 261 | + } else { |
| 262 | + logger.Info("Masked Database URL", "url", maskedDatabaseURL) |
| 263 | + } |
| 264 | + |
259 | 265 | // Validate that schema is provided |
260 | 266 | if databaseSchema == "" { |
261 | 267 | return nil, fmt.Errorf("database schema cannot be empty") |
@@ -2470,3 +2476,31 @@ func backoffWithJitter(retryAttempt int) time.Duration { |
2470 | 2476 | jitter := 0.75 + rand.Float64()*0.5 // #nosec G404 -- trivial use of math/rand |
2471 | 2477 | return time.Duration(exp * jitter) |
2472 | 2478 | } |
| 2479 | + |
| 2480 | +// maskPassword replaces the password in a database URL with asterisks |
| 2481 | +func maskPassword(dbURL string) (string, error) { |
| 2482 | + parsedURL, err := url.Parse(dbURL) |
| 2483 | + |
| 2484 | + if err != nil { |
| 2485 | + return "", err |
| 2486 | + } |
| 2487 | + |
| 2488 | + // Check if there is user info with a password |
| 2489 | + if parsedURL.User != nil { |
| 2490 | + username := parsedURL.User.Username() |
| 2491 | + _, hasPassword := parsedURL.User.Password() |
| 2492 | + if hasPassword { |
| 2493 | + // Manually construct the URL with masked password to avoid encoding |
| 2494 | + maskedURL := parsedURL.Scheme + "://" + username + ":********@" + parsedURL.Host + parsedURL.Path |
| 2495 | + if parsedURL.RawQuery != "" { |
| 2496 | + maskedURL += "?" + parsedURL.RawQuery |
| 2497 | + } |
| 2498 | + if parsedURL.Fragment != "" { |
| 2499 | + maskedURL += "#" + parsedURL.Fragment |
| 2500 | + } |
| 2501 | + return maskedURL, nil |
| 2502 | + } |
| 2503 | + } |
| 2504 | + |
| 2505 | + return parsedURL.String(), nil |
| 2506 | +} |
0 commit comments