From b8e3ec81c21baabbed2c2cc83cc102b5bd084610 Mon Sep 17 00:00:00 2001 From: Jan-Lukas Else Date: Tue, 20 Aug 2024 12:16:16 +0200 Subject: [PATCH] Upgrade to Go 1.23, some small changes --- Dockerfile | 2 +- check.go | 8 ++++---- config.go | 2 +- docs/build.md | 2 +- editor.go | 2 +- editorState.go | 2 +- go.mod | 18 +++++++++--------- go.sum | 32 ++++++++++++++++---------------- httpClient.go | 44 ++++++++++++++++++++++++-------------------- httpClient_test.go | 25 +++++++++++++++++++++++++ 10 files changed, 83 insertions(+), 54 deletions(-) diff --git a/Dockerfile b/Dockerfile index d9c20e5c..9f90cb98 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.22-alpine3.20 AS buildbase +FROM golang:1.23-alpine3.20 AS buildbase WORKDIR /app RUN apk add --no-cache git gcc musl-dev diff --git a/check.go b/check.go index c42a5991..009df705 100644 --- a/check.go +++ b/check.go @@ -10,7 +10,6 @@ import ( "time" "github.com/carlmjohnson/requests" - "github.com/klauspost/compress/gzhttp" "github.com/samber/lo" "github.com/sourcegraph/conc/pool" "go.goblog.app/app/pkgs/bodylimit" @@ -50,9 +49,10 @@ func (a *goBlog) checkLinks(posts ...*post) error { cache := cpkg.New[string, []byte](time.Minute, 5000) client := &http.Client{ Timeout: 30 * time.Second, - Transport: httpcachetransport.NewHttpCacheTransportNoBody(gzhttp.Transport(&http.Transport{ - DisableKeepAlives: true, MaxConnsPerHost: 1, - }), cache, 60*time.Minute, 5*bodylimit.MB), + Transport: httpcachetransport.NewHttpCacheTransportNoBody( + newHttpTransport(), + cache, 60*time.Minute, 5*bodylimit.MB, + ), } // Process all links type checkresult struct { diff --git a/config.go b/config.go index 2627ddf1..5f79199c 100644 --- a/config.go +++ b/config.go @@ -439,7 +439,7 @@ func (a *goBlog) initConfig(logging bool) error { a.cfg.Server.HttpsRedirect = true } // Check if any blog is configured - if a.cfg.Blogs == nil || len(a.cfg.Blogs) == 0 { + if len(a.cfg.Blogs) == 0 { a.cfg.Blogs = map[string]*configBlog{ "default": createDefaultBlog(), } diff --git a/docs/build.md b/docs/build.md index bf5796e2..eb7a0fb4 100644 --- a/docs/build.md +++ b/docs/build.md @@ -30,7 +30,7 @@ Requirements: - Linux - git -- go >= 1.22 +- go >= 1.23 - libsqlite3 with FTS5 and JSON enabled >= 3.38 (the newer the better) Build command: diff --git a/editor.go b/editor.go index 90abce27..5b7ff24c 100644 --- a/editor.go +++ b/editor.go @@ -13,13 +13,13 @@ import ( "time" "github.com/carlmjohnson/requests" + ws "github.com/coder/websocket" "go.goblog.app/app/pkgs/bufferpool" "go.goblog.app/app/pkgs/contenttype" "go.goblog.app/app/pkgs/gpxhelper" "go.goblog.app/app/pkgs/htmlbuilder" "go.hacdias.com/indielib/micropub" "gopkg.in/yaml.v3" - ws "nhooyr.io/websocket" ) const editorPath = "/editor" diff --git a/editorState.go b/editorState.go index 0969c0d8..9887d67c 100644 --- a/editorState.go +++ b/editorState.go @@ -6,8 +6,8 @@ import ( "net/http" "time" + ws "github.com/coder/websocket" "github.com/google/uuid" - ws "nhooyr.io/websocket" ) func (a *goBlog) serveEditorStateSync(w http.ResponseWriter, r *http.Request) { diff --git a/go.mod b/go.mod index a2e1f883..6332c04e 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module go.goblog.app/app -go 1.22.0 +go 1.23.0 require ( git.jlel.se/jlelse/go-geouri v0.0.0-20210525190615-a9c1d50f42d6 @@ -11,7 +11,8 @@ require ( github.com/alecthomas/chroma/v2 v2.14.0 github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de github.com/c2h5oh/datasize v0.0.0-20231215233829-aa82cc1e6500 - github.com/carlmjohnson/requests v0.24.1 + github.com/carlmjohnson/requests v0.24.2 + github.com/coder/websocket v1.8.12 github.com/dchest/captcha v1.0.0 github.com/disintegration/imaging v1.6.2 github.com/dmulholl/mp3lib v1.0.0 @@ -42,7 +43,7 @@ require ( github.com/posener/wstest v1.2.0 github.com/pquerna/otp v1.4.0 github.com/samber/go-singleflightx v0.3.1 - github.com/samber/lo v1.46.0 + github.com/samber/lo v1.47.0 github.com/schollz/sqlite3dump v1.3.1 github.com/snabb/sitemap v1.0.4 github.com/sourcegraph/conc v0.3.0 @@ -58,14 +59,13 @@ require ( github.com/xhit/go-simple-mail/v2 v2.16.0 github.com/yuin/goldmark v1.7.4 github.com/yuin/goldmark-emoji v1.0.3 - go.hacdias.com/indielib v0.3.1 + go.hacdias.com/indielib v0.4.0 golang.org/x/crypto v0.26.0 golang.org/x/net v0.28.0 golang.org/x/sync v0.8.0 golang.org/x/text v0.17.0 gopkg.in/yaml.v3 v3.0.1 - maunium.net/go/mautrix v0.19.0 - nhooyr.io/websocket v1.8.11 + maunium.net/go/mautrix v0.20.0 willnorris.com/go/microformats v1.2.1-0.20240301064101-b5d1b9d2120e ) @@ -114,12 +114,12 @@ require ( github.com/tidwall/sjson v1.2.5 // indirect github.com/toorop/go-dkim v0.0.0-20240103092955-90b7d1423f92 // indirect github.com/valyala/fastjson v1.6.4 // indirect - go.mau.fi/util v0.6.0 // indirect + go.mau.fi/util v0.7.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect + golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa // indirect golang.org/x/image v0.19.0 // indirect golang.org/x/oauth2 v0.22.0 // indirect - golang.org/x/sys v0.23.0 // indirect + golang.org/x/sys v0.24.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect willnorris.com/go/webmention v0.0.0-20220108183051-4a23794272f0 // indirect ) diff --git a/go.sum b/go.sum index 8662d282..e8049edf 100644 --- a/go.sum +++ b/go.sum @@ -34,8 +34,10 @@ github.com/boombuler/barcode v1.0.2 h1:79yrbttoZrLGkL/oOI8hBrUKucwOL0oOjUgEguGMc github.com/boombuler/barcode v1.0.2/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/c2h5oh/datasize v0.0.0-20231215233829-aa82cc1e6500 h1:6lhrsTEnloDPXyeZBvSYvQf8u86jbKehZPVDDlkgDl4= github.com/c2h5oh/datasize v0.0.0-20231215233829-aa82cc1e6500/go.mod h1:S/7n9copUssQ56c7aAgHqftWO4LTf4xY6CGWt8Bc+3M= -github.com/carlmjohnson/requests v0.24.1 h1:M8hmzyJr3A9D3u96MjCNuUVLd7Z3hQb7UjP5DsBp3lE= -github.com/carlmjohnson/requests v0.24.1/go.mod h1:duYA/jDnyZ6f3xbcF5PpZ9N8clgopubP2nK5i6MVMhU= +github.com/carlmjohnson/requests v0.24.2 h1:JDakhAmTIKL/qL/1P7Kkc2INGBJIkIFP6xUeUmPzLso= +github.com/carlmjohnson/requests v0.24.2/go.mod h1:duYA/jDnyZ6f3xbcF5PpZ9N8clgopubP2nK5i6MVMhU= +github.com/coder/websocket v1.8.12 h1:5bUXkEPPIbewrnkU8LTCLVaxi4N4J8ahufH2vlo4NAo= +github.com/coder/websocket v1.8.12/go.mod h1:LNVeNrXQZfe5qhS9ALED3uA+l5pPqvwXg3CKoDBB2gs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -207,8 +209,8 @@ github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6g github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/samber/go-singleflightx v0.3.1 h1:D9NAWs1t2TKf4wpkxRw6MIXqpDt2bXb5ZZyT2QuvybY= github.com/samber/go-singleflightx v0.3.1/go.mod h1:X2BR+oheHIYc73PvxRMlcASg6KYYTQyUYpdVU7t/ux4= -github.com/samber/lo v1.46.0 h1:w8G+oaCPgz1PoCJztqymCFaKwXt+5cCXn51uPxExFfQ= -github.com/samber/lo v1.46.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU= +github.com/samber/lo v1.47.0 h1:z7RynLwP5nbyRscyvcD043DWYoOcYRv3mV8lBeqOCLc= +github.com/samber/lo v1.47.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU= github.com/schollz/sqlite3dump v1.3.1 h1:QXizJ7XEJ7hggjqjZ3YRtF3+javm8zKtzNByYtEkPRA= github.com/schollz/sqlite3dump v1.3.1/go.mod h1:mzSTjZpJH4zAb1FN3iNlhWPbbdyeBpOaTW0hukyMHyI= github.com/scylladb/termtables v0.0.0-20191203121021-c4c0b6d42ff4/go.mod h1:C1a7PQSMz9NShzorzCiG2fk9+xuCgLkPeCvMHYR2OWg= @@ -284,10 +286,10 @@ github.com/yuin/goldmark v1.7.4 h1:BDXOHExt+A7gwPCJgPIIq7ENvceR7we7rOS9TNoLZeg= github.com/yuin/goldmark v1.7.4/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= github.com/yuin/goldmark-emoji v1.0.3 h1:aLRkLHOuBR2czCY4R8olwMjID+tENfhyFDMCRhbIQY4= github.com/yuin/goldmark-emoji v1.0.3/go.mod h1:tTkZEbwu5wkPmgTcitqddVxY9osFZiavD+r4AzQrh1U= -go.hacdias.com/indielib v0.3.1 h1:t6IUp2lfQBa3baXcBN9S/A4fBq4vzMWVbfCQgPcDpy8= -go.hacdias.com/indielib v0.3.1/go.mod h1:ushJ07W6LxAbZWhyqXzQQxXkalPkZo6cGz5Uj2wOdb4= -go.mau.fi/util v0.6.0 h1:W6SyB3Bm/GjenQ5iq8Z8WWdN85Gy2xS6L0wmnR7SVjg= -go.mau.fi/util v0.6.0/go.mod h1:ljYdq3sPfpICc3zMU+/mHV/sa4z0nKxc67hSBwnrk8U= +go.hacdias.com/indielib v0.4.0 h1:jB9G459Ne2WjwNwilCpfm5lyK4Q7U8aSd/jN98pSKhY= +go.hacdias.com/indielib v0.4.0/go.mod h1:2s7VsHwiaFeVldmreFOg0WXM32W1bytVPYnosAoQiyI= +go.mau.fi/util v0.7.0 h1:l31z+ivrSQw+cv/9eFebEqtQW2zhxivGypn+JT0h/ws= +go.mau.fi/util v0.7.0/go.mod h1:bWYreIoTULL/UiRbZdfddPh7uWDFW5yX4YCv5FB0eE0= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -295,8 +297,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= -golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= -golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= +golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa h1:ELnwvuAXPNtPk1TJRuGkI9fDTwym6AYBu0qzT8AcHdI= +golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= golang.org/x/image v0.0.0-20191009234506-e7c1f5e7dbb8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/image v0.19.0 h1:D9FX4QWkLfkeqaC62SonffIIuYdOk/UE2XKUBgRIBIQ= golang.org/x/image v0.19.0/go.mod h1:y0zrRqlQRWQ5PXaYCOMLTW2fpsxZ8Qh9I/ohnInJEys= @@ -333,8 +335,8 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.23.0 h1:YfKFowiIMvtgl1UERQoTPPToxltDeZfbj4H7dVUCwmM= -golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= +golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -367,10 +369,8 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gorm.io/driver/sqlite v1.1.3/go.mod h1:AKDgRWk8lcSQSw+9kxCJnX/yySj8G3rdwYlU57cB45c= gorm.io/gorm v1.20.1/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= gorm.io/gorm v1.20.6/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= -maunium.net/go/mautrix v0.19.0 h1:67eSJWam93mw44Q0/1SiOG7zQzXMUknUv5UaWkrODDU= -maunium.net/go/mautrix v0.19.0/go.mod h1:UE+mSQ4sDUuJMbjN0aB9EjQSGgXd48AzMvZ6+QJV1k8= -nhooyr.io/websocket v1.8.11 h1:f/qXNc2/3DpoSZkHt1DQu6rj4zGC8JmkkLkWss0MgN0= -nhooyr.io/websocket v1.8.11/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c= +maunium.net/go/mautrix v0.20.0 h1:bzQnVQR+LvQxV1YlAr7BSWCS8AWa0Ov0lyPhbbChM0o= +maunium.net/go/mautrix v0.20.0/go.mod h1:V725r8w7oddsS7CxnmTAp634A4nwJCFY7J3jiTMUz2c= willnorris.com/go/microformats v1.2.1-0.20240301064101-b5d1b9d2120e h1:TRIOwo0NxN4KVSgYlYmiQktd9I96YgZ3942/JVzhwTM= willnorris.com/go/microformats v1.2.1-0.20240301064101-b5d1b9d2120e/go.mod h1:zzo0hFA/E/nl1ZAjXiXA7KCKwCTdgBU+7HXltGgHeGA= willnorris.com/go/webmention v0.0.0-20220108183051-4a23794272f0 h1:V5+O+YZHchEwu6ZmPcqT1dQ+mHgE356Q+w9SVOQ+QZg= diff --git a/httpClient.go b/httpClient.go index 1b8b2b63..ecc6e04e 100644 --- a/httpClient.go +++ b/httpClient.go @@ -10,29 +10,33 @@ import ( func newHttpClient() *http.Client { return &http.Client{ - Timeout: time.Minute, - Transport: newAddUserAgentTransport( - gzhttp.Transport( - &http.Transport{ - // Default - Proxy: http.ProxyFromEnvironment, - ForceAttemptHTTP2: true, - MaxIdleConns: 100, - IdleConnTimeout: 90 * time.Second, - TLSHandshakeTimeout: 10 * time.Second, - ExpectContinueTimeout: 1 * time.Second, - DialContext: (&net.Dialer{ - Timeout: 30 * time.Second, - KeepAlive: 30 * time.Second, - }).DialContext, - // Custom - DisableKeepAlives: true, - }, - ), - ), + Timeout: time.Minute, + Transport: newHttpTransport(), } } +func newHttpTransport() http.RoundTripper { + return newAddUserAgentTransport( + gzhttp.Transport( + &http.Transport{ + // Default + Proxy: http.ProxyFromEnvironment, + ForceAttemptHTTP2: true, + MaxIdleConns: 100, + IdleConnTimeout: 90 * time.Second, + TLSHandshakeTimeout: 10 * time.Second, + ExpectContinueTimeout: 1 * time.Second, + DialContext: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + }).DialContext, + // Custom + DisableKeepAlives: true, + }, + ), + ) +} + type addUserAgentTransport struct { parent http.RoundTripper } diff --git a/httpClient_test.go b/httpClient_test.go index 159503e8..f630fba1 100644 --- a/httpClient_test.go +++ b/httpClient_test.go @@ -3,6 +3,7 @@ package main import ( "context" "io" + "net" "net/http" "net/http/httptest" "sync" @@ -94,3 +95,27 @@ func Test_addUserAgent(t *testing.T) { assert.Equal(t, appUserAgent, ua) } + +func Test_httpClientSocksProxy(t *testing.T) { + listener, err := net.Listen("tcp", "127.0.0.1:0") + require.NoError(t, err) + addr := listener.Addr().String() + + proxyCalled := false + + go func() { + conn, err := listener.Accept() + require.NoError(t, err) + + proxyCalled = true + + _ = conn.Close() + }() + + t.Setenv("HTTP_PROXY", "socks5h://"+addr+"/") + + client := newHttpClient() + _ = requests.URL("http://example.com").Client(client).Fetch(context.Background()) + + assert.True(t, proxyCalled) +}