Skip to content

Commit f31a40e

Browse files
committed
feat(ssl): remove localAddresses from requests to plex.tv
1 parent 85e9592 commit f31a40e

File tree

2 files changed

+14
-14
lines changed

2 files changed

+14
-14
lines changed

handler/main.go

+4-8
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import (
66
"net/http/httputil"
77
"net/url"
88
"os"
9-
"strings"
109

1110
"github.com/go-chi/chi/v5/middleware"
1211
"github.com/go-redis/redis/v8"
@@ -47,24 +46,21 @@ func init() {
4746
func NewRouter() http.Handler {
4847
r := mux.NewRouter()
4948
r.Use(handlers.ProxyHeaders, normalizeMiddleware)
49+
if !plexClient.NoRequestLogs {
50+
r.Use(middleware.Logger)
51+
}
5052

5153
plexTvUrl, _ := url.Parse("https://www." + domainPlexTv)
5254
plexTvProxy := httputil.NewSingleHostReverseProxy(plexTvUrl)
5355
plexTvRouter := r.Host(domainPlexTv).Subrouter()
54-
plexTvRouter.Use(middleware.Logger)
55-
sslRouter := plexTvRouter.MatcherFunc(func(r *http.Request, match *mux.RouteMatch) bool {
56-
return strings.Index(r.URL.Path, "servers.xml") != -1
57-
}).Subrouter()
56+
sslRouter := plexTvRouter.Methods(http.MethodPost).Path("/servers.xml").Subrouter()
5857
sslRouter.Use(sslMiddleware)
5958
sslRouter.PathPrefix("/").Handler(plexTvProxy)
6059
plexTvRouter.PathPrefix("/").Handler(plexTvProxy)
6160

6261
pmsRouter := r.MatcherFunc(func(r *http.Request, match *mux.RouteMatch) bool {
6362
return r.Host != domainPlexTv
6463
}).Subrouter()
65-
if !plexClient.NoRequestLogs {
66-
pmsRouter.Use(middleware.Logger)
67-
}
6864
pmsRouter.Use(wrapMiddleware, middleware.Recoverer, trafficMiddleware)
6965
if redisClient != nil {
7066
// bypass cache

handler/middleware.go

+10-6
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"net/http/httptest"
1111
"net/url"
1212
"path/filepath"
13+
"regexp"
1314
"strconv"
1415
"strings"
1516
"time"
@@ -21,20 +22,23 @@ var (
2122
cacheInfoCtxKey = &ctxKeyType{"cacheInfo"}
2223
tokenCtxKey = &ctxKeyType{"token"}
2324
userCtxKey = &ctxKeyType{"user"}
25+
26+
reLocalAddresses = regexp.MustCompile(` localAddresses="[^"]*"`)
2427
)
2528

2629
func sslMiddleware(next http.Handler) http.Handler {
2730
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
2831
if plexClient.sslHost != "" && r.Body != nil {
32+
nr := cloneRequest(r, r.Header, r.URL.Query())
2933
bodyBytes, _ := io.ReadAll(r.Body)
30-
bodyStr := string(bodyBytes)
31-
common.GetLogger().Print(bodyStr)
32-
3334
sslHost := fmt.Sprintf("address=\"%s\" scheme=\"https\"", plexClient.sslHost)
34-
modifiedBody := strings.ReplaceAll(bodyStr, "host=\"\"", sslHost)
35-
r.Body = io.NopCloser(strings.NewReader(modifiedBody))
35+
modifiedBody := bytes.ReplaceAll(bodyBytes, []byte("host=\"\""), []byte(sslHost))
36+
modifiedBody = reLocalAddresses.ReplaceAll(modifiedBody, []byte(""))
37+
nr.Body = io.NopCloser(bytes.NewReader(modifiedBody))
38+
next.ServeHTTP(w, nr)
39+
} else {
40+
next.ServeHTTP(w, r)
3641
}
37-
next.ServeHTTP(w, r)
3842
})
3943
}
4044

0 commit comments

Comments
 (0)