@@ -10,8 +10,6 @@ import (
1010 "net/url"
1111 "strings"
1212
13- "github.com/darkweak/souin/pkg/middleware"
14- "github.com/hashicorp/golang-lru/v2/expirable"
1513 "github.com/picosh/pico/pkg/apps/pgs"
1614 "github.com/picosh/pico/pkg/shared"
1715 "github.com/prometheus/client_golang/prometheus/promhttp"
@@ -27,19 +25,11 @@ func main() {
2725 _ = pubsub .Close ()
2826 }()
2927 cfg := pgs .NewPgsConfig (logger , nil , nil , drain )
30- httpCache := pgs .SetupCache (cfg )
31- router := & pgs.WebRouter {
32- Cfg : cfg ,
33- RedirectsCache : expirable .NewLRU [string , []* pgs.RedirectRule ](2048 , nil , shared .CacheTimeout ),
34- HeadersCache : expirable .NewLRU [string , []* pgs.HeaderRule ](2048 , nil , shared .CacheTimeout ),
35- }
36- cacher := & cachedHttp {
37- handler : httpCache ,
38- routes : router ,
39- }
28+ proxy := & proxyServe {cfg .Logger }
29+ httpCache := pgs .NewPgsHttpCache (cfg , "pgs-nue" , proxy )
30+ cacher := & cachedHttp {}
4031
41- go router .WatchCacheClear ()
42- go router .CacheMgmt (ctx , httpCache , cfg .CacheClearingQueue )
32+ go pgs .CacheMgmt (ctx , cfg .CacheClearingQueue , cfg , httpCache .Cache )
4333
4434 portStr := fmt .Sprintf (":%s" , cfg .WebPort )
4535 cfg .Logger .Info (
@@ -51,29 +41,27 @@ func main() {
5141 cfg .Logger .Error ("listen and serve" , "err" , err )
5242}
5343
54- type cachedHttp struct {
55- handler * middleware.SouinBaseHandler
56- routes * pgs.WebRouter
57- }
58-
59- type CustomTransport struct {
60- * http.Transport
44+ type proxyServe struct {
6145 Logger * slog.Logger
6246}
6347
64- func (t * CustomTransport ) RoundTrip (request * http.Request ) (* http.Response , error ) {
65- // reqDump, _ := httputil.DumpRequestOut(request, false)
66- // t.Logger.Info("request", "dump", string(reqDump))
67- response , err := http .DefaultTransport .RoundTrip (request )
48+ func (p * proxyServe ) ServeHTTP (w http.ResponseWriter , req * http.Request ) {
49+ url , _ := url .Parse (partialURL (req ))
6850
69- // body, err := httputil.DumpResponse(response, false)
70- // if err != nil {
71- // // copying the response body did not work
72- // return nil, err
73- // }
74- // t.Logger.Info("response", "dump", string(body))
51+ p .Logger .Info ("proxying request to ash.pgs.sh" , "url" , url .String ())
52+ defaultTransport := http .DefaultTransport .(* http.Transport )
53+ oldDialContext := defaultTransport .DialContext
54+ newTransport := CustomTransport {Transport : defaultTransport , Logger : p .Logger }
55+ newTransport .DialContext = func (ctx context.Context , network , addr string ) (net.Conn , error ) {
56+ return oldDialContext (ctx , "tcp" , "ash.pgs.sh:443" )
57+ }
58+ proxy := httputil .NewSingleHostReverseProxy (url )
59+ proxy .Transport = & newTransport
60+ proxy .ServeHTTP (w , req )
61+ }
7562
76- return response , err
63+ type cachedHttp struct {
64+ Logger * slog.Logger
7765}
7866
7967func (c * cachedHttp ) ServeHTTP (writer http.ResponseWriter , req * http.Request ) {
@@ -83,35 +71,19 @@ func (c *cachedHttp) ServeHTTP(writer http.ResponseWriter, req *http.Request) {
8371 }
8472
8573 if req .URL .Path == "/check" {
86- c .routes . Cfg . Logger .Info ("proxying `/check` request to ash.pgs.sh" , "query" , req .URL .RawQuery )
74+ c .Logger .Info ("proxying `/check` request to ash.pgs.sh" , "query" , req .URL .RawQuery )
8775 req , _ := http .NewRequest ("GET" , "https://ash.pgs.sh/check?" + req .URL .RawQuery , nil )
8876 req .Host = "pgs.sh"
8977 // reqDump, _ := httputil.DumpRequestOut(req, true)
9078 // fmt.Printf("REQUEST:\n%s", string(reqDump))
9179
9280 resp , err := http .DefaultClient .Do (req )
9381 if err != nil {
94- c .routes . Cfg . Logger .Error ("check request" , "err" , err )
82+ c .Logger .Error ("check request" , "err" , err )
9583 }
9684 writer .WriteHeader (resp .StatusCode )
9785 return
9886 }
99-
100- _ = c .handler .ServeHTTP (writer , req , func (w http.ResponseWriter , r * http.Request ) error {
101- url , _ := url .Parse (partialURL (r ))
102-
103- c .routes .Cfg .Logger .Info ("proxying request to ash.pgs.sh" , "url" , url .String ())
104- defaultTransport := http .DefaultTransport .(* http.Transport )
105- oldDialContext := defaultTransport .DialContext
106- newTransport := CustomTransport {Transport : defaultTransport , Logger : c .routes .Cfg .Logger }
107- newTransport .DialContext = func (ctx context.Context , network , addr string ) (net.Conn , error ) {
108- return oldDialContext (ctx , "tcp" , "ash.pgs.sh:443" )
109- }
110- proxy := httputil .NewSingleHostReverseProxy (url )
111- proxy .Transport = & newTransport
112- proxy .ServeHTTP (w , r )
113- return nil
114- })
11587}
11688
11789func partialURL (r * http.Request ) string {
@@ -121,3 +93,23 @@ func partialURL(r *http.Request) string {
12193 builder .WriteString (r .Host )
12294 return builder .String ()
12395}
96+
97+ type CustomTransport struct {
98+ * http.Transport
99+ Logger * slog.Logger
100+ }
101+
102+ func (t * CustomTransport ) RoundTrip (request * http.Request ) (* http.Response , error ) {
103+ // reqDump, _ := httputil.DumpRequestOut(request, false)
104+ // t.Logger.Info("request", "dump", string(reqDump))
105+ response , err := http .DefaultTransport .RoundTrip (request )
106+
107+ // body, err := httputil.DumpResponse(response, false)
108+ // if err != nil {
109+ // // copying the response body did not work
110+ // return nil, err
111+ // }
112+ // t.Logger.Info("response", "dump", string(body))
113+
114+ return response , err
115+ }
0 commit comments