Fix error message sanitiziation (#3082)
parent
5dc37b187c
commit
3c1b1ca78e
@ -0,0 +1,48 @@ |
||||
// Copyright 2017 The Gitea Authors. All rights reserved.
|
||||
// Use of this source code is governed by a MIT-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package util |
||||
|
||||
import ( |
||||
"net/url" |
||||
"strings" |
||||
) |
||||
|
||||
// urlSafeError wraps an error whose message may contain a sensitive URL
|
||||
type urlSafeError struct { |
||||
err error |
||||
unsanitizedURL string |
||||
} |
||||
|
||||
func (err urlSafeError) Error() string { |
||||
return SanitizeMessage(err.err.Error(), err.unsanitizedURL) |
||||
} |
||||
|
||||
// URLSanitizedError returns the sanitized version an error whose message may
|
||||
// contain a sensitive URL
|
||||
func URLSanitizedError(err error, unsanitizedURL string) error { |
||||
return urlSafeError{err: err, unsanitizedURL: unsanitizedURL} |
||||
} |
||||
|
||||
// SanitizeMessage sanitizes a message which may contains a sensitive URL
|
||||
func SanitizeMessage(message, unsanitizedURL string) string { |
||||
sanitizedURL := SanitizeURLCredentials(unsanitizedURL, true) |
||||
return strings.Replace(message, unsanitizedURL, sanitizedURL, -1) |
||||
} |
||||
|
||||
// SanitizeURLCredentials sanitizes a url, either removing user credentials
|
||||
// or replacing them with a placeholder.
|
||||
func SanitizeURLCredentials(unsanitizedURL string, usePlaceholder bool) string { |
||||
u, err := url.Parse(unsanitizedURL) |
||||
if err != nil { |
||||
// don't log the error, since it might contain unsanitized URL.
|
||||
return "(unparsable url)" |
||||
} |
||||
if u.User != nil && usePlaceholder { |
||||
u.User = url.User("<credentials>") |
||||
} else { |
||||
u.User = nil |
||||
} |
||||
return u.String() |
||||
} |
Loading…
Reference in new issue