@@ -3,7 +3,10 @@ package handler
3
3
import (
4
4
"log"
5
5
"net/http"
6
+ "net/http/httputil"
7
+ "net/url"
6
8
"os"
9
+ "strings"
7
10
8
11
"github.com/go-chi/chi/v5/middleware"
9
12
"github.com/go-redis/redis/v8"
21
24
func init () {
22
25
plexClient = NewPlexClient (PlexConfig {
23
26
BaseUrl : os .Getenv ("PLEX_BASEURL" ),
27
+ SslHost : os .Getenv ("PLEX_SSL_HOST" ),
24
28
Token : os .Getenv ("PLEX_TOKEN" ),
25
29
PlaxtUrl : os .Getenv ("PLAXT_URL" ),
26
30
RedirectWebApp : os .Getenv ("REDIRECT_WEB_APP" ),
@@ -46,14 +50,27 @@ func NewRouter() http.Handler {
46
50
if ! plexClient .NoRequestLogs {
47
51
r .Use (middleware .Logger )
48
52
}
49
- r .Use (wrapMiddleware , middleware .Recoverer , trafficMiddleware )
50
53
54
+ plexTvUrl , _ := url .Parse ("https://www." + domainPlexTv )
55
+ plexTvProxy := httputil .NewSingleHostReverseProxy (plexTvUrl )
56
+ plexTvRouter := r .Host (domainPlexTv ).Subrouter ()
57
+ sslRouter := plexTvRouter .MatcherFunc (func (r * http.Request , match * mux.RouteMatch ) bool {
58
+ return strings .Index (r .URL .Path , "servers.xml" ) != - 1
59
+ }).Subrouter ()
60
+ sslRouter .Use (sslMiddleware )
61
+ sslRouter .PathPrefix ("/" ).Handler (plexTvProxy )
62
+ plexTvRouter .PathPrefix ("/" ).Handler (plexTvProxy )
63
+
64
+ pmsRouter := r .MatcherFunc (func (r * http.Request , match * mux.RouteMatch ) bool {
65
+ return r .Host != domainPlexTv
66
+ }).Subrouter ()
67
+ pmsRouter .Use (wrapMiddleware , middleware .Recoverer , trafficMiddleware )
51
68
if redisClient != nil {
52
69
// bypass cache
53
- r .PathPrefix ("/:/" ).Handler (plexClient )
54
- r .PathPrefix ("/library/parts/" ).Handler (plexClient )
70
+ pmsRouter .PathPrefix ("/:/" ).Handler (plexClient )
71
+ pmsRouter .PathPrefix ("/library/parts/" ).Handler (plexClient )
55
72
56
- staticRouter := r .Methods (http .MethodGet ).Subrouter ()
73
+ staticRouter := pmsRouter .Methods (http .MethodGet ).Subrouter ()
57
74
staticRouter .Use (staticMiddleware )
58
75
staticRouter .Path ("/library/media/{key}/chapterImages/{id}" ).Handler (plexClient )
59
76
staticRouter .Path ("/library/metadata/{key}/art/{id}" ).Handler (plexClient )
@@ -62,11 +79,11 @@ func NewRouter() http.Handler {
62
79
staticRouter .PathPrefix ("/web/js/" ).Handler (plexClient )
63
80
staticRouter .PathPrefix ("/web/static/" ).Handler (plexClient )
64
81
65
- dynamicRouter := r .Methods (http .MethodGet ).Subrouter ()
82
+ dynamicRouter := pmsRouter .Methods (http .MethodGet ).Subrouter ()
66
83
dynamicRouter .Use (dynamicMiddleware )
67
84
dynamicRouter .PathPrefix ("/" ).Handler (plexClient )
68
85
}
86
+ pmsRouter .PathPrefix ("/" ).Handler (plexClient )
69
87
70
- r .PathPrefix ("/" ).Handler (plexClient )
71
88
return r
72
89
}
0 commit comments