48 lines
957 B
Go
48 lines
957 B
Go
// backend\postgres_url.go
|
|
|
|
package main
|
|
|
|
import (
|
|
"net/url"
|
|
"strings"
|
|
)
|
|
|
|
// stripPasswordFromPostgresURL:
|
|
// - wenn URL ein Passwort hat, wird es extrahiert und URL ohne Passwort zurückgegeben
|
|
// - unterstützt postgres:// und postgresql://
|
|
func stripPasswordFromPostgresURL(raw string) (sanitized string, password string) {
|
|
raw = strings.TrimSpace(raw)
|
|
if raw == "" {
|
|
return "", ""
|
|
}
|
|
|
|
low := strings.ToLower(raw)
|
|
if !strings.HasPrefix(low, "postgres://") && !strings.HasPrefix(low, "postgresql://") {
|
|
// nicht anfassen, evtl. nutzt du später andere DSNs
|
|
return raw, ""
|
|
}
|
|
|
|
u, err := url.Parse(raw)
|
|
if err != nil {
|
|
return raw, ""
|
|
}
|
|
if u.User == nil {
|
|
return raw, ""
|
|
}
|
|
|
|
user := u.User.Username()
|
|
pw, hasPw := u.User.Password()
|
|
if hasPw && strings.TrimSpace(pw) != "" {
|
|
password = pw
|
|
}
|
|
|
|
// Sanitized: nur user ohne password
|
|
if user != "" {
|
|
u.User = url.User(user)
|
|
} else {
|
|
u.User = nil
|
|
}
|
|
|
|
return u.String(), password
|
|
}
|