Code refactoring for #1841

This commit is contained in:
Alex X
2025-09-19 15:21:02 +03:00
parent 4577390130
commit 8b4df5f02c
3 changed files with 28 additions and 5 deletions
+2 -5
View File
@@ -8,10 +8,10 @@ import (
"strings" "strings"
"sync" "sync"
"time" "time"
"regexp"
"github.com/AlexxIT/go2rtc/internal/api" "github.com/AlexxIT/go2rtc/internal/api"
"github.com/AlexxIT/go2rtc/internal/app" "github.com/AlexxIT/go2rtc/internal/app"
"github.com/AlexxIT/go2rtc/pkg/core"
"github.com/gorilla/websocket" "github.com/gorilla/websocket"
"github.com/rs/zerolog" "github.com/rs/zerolog"
) )
@@ -133,10 +133,7 @@ func apiWS(w http.ResponseWriter, r *http.Request) {
if handler := wsHandlers[msg.Type]; handler != nil { if handler := wsHandlers[msg.Type]; handler != nil {
go func() { go func() {
if err = handler(tr, msg); err != nil { if err = handler(tr, msg); err != nil {
// Some streams such as ffmpeg might return credentials on error messages errMsg := core.StripUserinfo(err.Error())
errMsg := err.Error()
sanitizer := regexp.MustCompile(`(\w+)://(.*)@`)
errMsg = sanitizer.ReplaceAllString(errMsg, "$1://******@")
tr.Write(&Message{Type: "error", Value: msg.Type + ": " + errMsg}) tr.Write(&Message{Type: "error", Value: msg.Type + ": " + errMsg})
} }
}() }()
+14
View File
@@ -118,3 +118,17 @@ func TestName(t *testing.T) {
// stage3 // stage3
_ = prod2.Stop() _ = prod2.Stop()
} }
func TestStripUserinfo(t *testing.T) {
s := `streams:
test:
- ffmpeg:rtsp://username:password@10.1.2.3:554/stream1
- ffmpeg:rtsp://10.1.2.3:554/stream1@#video=copy
`
s = StripUserinfo(s)
require.Equal(t, `streams:
test:
- ffmpeg:rtsp://***@10.1.2.3:554/stream1
- ffmpeg:rtsp://10.1.2.3:554/stream1@#video=copy
`, s)
}
+12
View File
@@ -2,6 +2,7 @@ package core
import ( import (
"crypto/rand" "crypto/rand"
"regexp"
"runtime" "runtime"
"strconv" "strconv"
"strings" "strings"
@@ -77,3 +78,14 @@ func Caller() string {
_, file, line, _ := runtime.Caller(1) _, file, line, _ := runtime.Caller(1)
return file + ":" + strconv.Itoa(line) return file + ":" + strconv.Itoa(line)
} }
const (
unreserved = `A-Za-z0-9-._~`
subdelims = `!$&'()*+,;=`
userinfo = unreserved + subdelims + `%:`
)
func StripUserinfo(s string) string {
sanitizer := regexp.MustCompile(`://[` + userinfo + `]+@`)
return sanitizer.ReplaceAllString(s, `://***@`)
}