From 325175fc75f92fc4c29a4b0c9f94af62db5dc500 Mon Sep 17 00:00:00 2001 From: Jan-Lukas Else Date: Thu, 28 Apr 2022 23:09:38 +0200 Subject: [PATCH] Fix webfinger --- activityPub.go | 22 +++++++++++++--------- activityPub_test.go | 22 ++++++++++++++++++++++ go.mod | 8 ++++---- go.sum | 15 ++++++++------- 4 files changed, 47 insertions(+), 20 deletions(-) diff --git a/activityPub.go b/activityPub.go index 749e1be..307eae0 100644 --- a/activityPub.go +++ b/activityPub.go @@ -51,14 +51,7 @@ func (a *goBlog) initActivityPub() error { } }) // Prepare webfinger - a.webfingerResources = map[string]*configBlog{} - a.webfingerAccts = map[string]string{} - for name, blog := range a.cfg.Blogs { - acct := "acct:" + name + "@" + a.cfg.Server.publicHostname - a.webfingerResources[acct] = blog - a.webfingerResources[a.apIri(blog)] = blog - a.webfingerAccts[a.apIri(blog)] = acct - } + a.prepareWebfinger() // Read key and prepare signing err := a.loadActivityPubPrivateKey() if err != nil { @@ -98,6 +91,17 @@ func (a *goBlog) apEnabled() bool { return true } +func (a *goBlog) prepareWebfinger() { + a.webfingerResources = map[string]*configBlog{} + a.webfingerAccts = map[string]string{} + for name, blog := range a.cfg.Blogs { + acct := "acct:" + name + "@" + a.cfg.Server.publicHostname + a.webfingerResources[acct] = blog + a.webfingerResources[a.apIri(blog)] = blog + a.webfingerAccts[a.apIri(blog)] = acct + } +} + func (a *goBlog) apHandleWebfinger(w http.ResponseWriter, r *http.Request) { blog, ok := a.webfingerResources[r.URL.Query().Get("resource")] if !ok { @@ -108,7 +112,7 @@ func (a *goBlog) apHandleWebfinger(w http.ResponseWriter, r *http.Request) { // Encode buf := bufferpool.Get() defer bufferpool.Put(buf) - if err := xml.NewEncoder(buf).Encode(map[string]any{ + if err := json.NewEncoder(buf).Encode(map[string]any{ "subject": a.webfingerAccts[apIri], "aliases": []string{ a.webfingerAccts[apIri], diff --git a/activityPub_test.go b/activityPub_test.go index 11e4611..8697650 100644 --- a/activityPub_test.go +++ b/activityPub_test.go @@ -3,6 +3,8 @@ package main import ( "crypto/x509" "encoding/pem" + "net/http" + "net/http/httptest" "path/filepath" "testing" @@ -47,3 +49,23 @@ func Test_loadActivityPubPrivateKey(t *testing.T) { assert.Equal(t, string(oldPemEncoded), string(newPemEncoded)) } + +func Test_webfinger(t *testing.T) { + app := &goBlog{ + cfg: createDefaultTestConfig(t), + } + app.cfg.Server.PublicAddress = "https://example.com" + _ = app.initConfig() + _ = app.initDatabase(false) + defer app.db.close() + app.initComponents(false) + + app.prepareWebfinger() + + req := httptest.NewRequest(http.MethodGet, "/.well-known/webfinger?resource=acct:default@example.com", nil) + rec := httptest.NewRecorder() + + app.apHandleWebfinger(rec, req) + + assert.Equal(t, http.StatusOK, rec.Code) +} diff --git a/go.mod b/go.mod index ab4ca08..bf845d8 100644 --- a/go.mod +++ b/go.mod @@ -43,7 +43,7 @@ require ( github.com/paulmach/go.geojson v1.4.0 github.com/posener/wstest v1.2.0 github.com/pquerna/otp v1.3.0 - github.com/samber/lo v1.16.0 + github.com/samber/lo v1.18.0 github.com/schollz/sqlite3dump v1.3.1 github.com/snabb/sitemap v1.0.0 github.com/spf13/cast v1.4.1 @@ -57,13 +57,13 @@ require ( github.com/yuin/goldmark v1.4.12 // master github.com/yuin/goldmark-emoji v1.0.2-0.20210607094911-0487583eca38 - golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 + golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c golang.org/x/text v0.3.7 gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b nhooyr.io/websocket v1.8.7 - tailscale.com v1.24.0 + tailscale.com v1.24.1 // main willnorris.com/go/microformats v1.1.2-0.20210827044458-ff2a6ae41971 ) @@ -92,7 +92,7 @@ require ( github.com/dlclark/regexp2 v1.4.0 // indirect github.com/dustin/go-humanize v1.0.0 // indirect github.com/felixge/httpsnoop v1.0.1 // indirect - github.com/fsnotify/fsnotify v1.5.3 // indirect + github.com/fsnotify/fsnotify v1.5.4 // indirect github.com/go-ole/go-ole v1.2.6 // indirect github.com/godbus/dbus/v5 v5.0.6 // indirect github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b // indirect diff --git a/go.sum b/go.sum index 3d83c12..2f1269c 100644 --- a/go.sum +++ b/go.sum @@ -153,8 +153,9 @@ github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8S github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/frankban/quicktest v1.14.0 h1:+cqqvzZV87b4adx/5ayVOaYZ2CrvM4ejQvUdBzPPUss= github.com/frankban/quicktest v1.14.0/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og= -github.com/fsnotify/fsnotify v1.5.3 h1:vNFpj2z7YIbwh2bw7x35sqYpp2wfuq+pivKbWG09B8c= github.com/fsnotify/fsnotify v1.5.3/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= +github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= @@ -415,8 +416,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.8.1-0.20211023094830-115ce09fd6b4 h1:Ha8xCaq6ln1a+R91Km45Oq6lPXj2Mla6CRJYcuV2h1w= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/samber/lo v1.16.0 h1:+6T6SrR32p8Ve8gckYnpsN63pHB3/53ZPw6R/CwufCc= -github.com/samber/lo v1.16.0/go.mod h1:2I7tgIv8Q1SG2xEIkRq0F2i2zgxVpnyPOP0d3Gj2r+A= +github.com/samber/lo v1.18.0 h1:Us2BxtWXMLfIHm7lOJ3FnsSz1pzYAI7yfRZPV/5nBPU= +github.com/samber/lo v1.18.0/go.mod h1:2I7tgIv8Q1SG2xEIkRq0F2i2zgxVpnyPOP0d3Gj2r+A= 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= @@ -516,8 +517,8 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA= -golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f h1:OeJjE6G4dgCY4PIXvIRQbE8+RX+uXZyGhUy/ksMGJoc= +golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -895,8 +896,8 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8 rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= software.sslmate.com/src/go-pkcs12 v0.0.0-20210415151418-c5206de65a78 h1:SqYE5+A2qvRhErbsXFfUEUmpWEKxxRSMgGLkvRAFOV4= -tailscale.com v1.24.0 h1:0xn+j4E7dW+myqocoka1JtDhvheK4G5S3XjOwXJyDs0= -tailscale.com v1.24.0/go.mod h1:5yjfQLg8gHScx/9S/SX0sim5sUKkk14HdATuAUHxGmA= +tailscale.com v1.24.1 h1:3GYzkpkNGoowEF305as+P2/KTPrtoTqxa3dkXfy+Bqs= +tailscale.com v1.24.1/go.mod h1:5yjfQLg8gHScx/9S/SX0sim5sUKkk14HdATuAUHxGmA= willnorris.com/go/microformats v1.1.2-0.20210827044458-ff2a6ae41971 h1:b4juh5znIpBA1KnzHMP0UB4Cs+3/0b0XfchkWE81FXw= willnorris.com/go/microformats v1.1.2-0.20210827044458-ff2a6ae41971/go.mod h1:kvVnWrkkEscVAIITCEoiTX66Hcyg59C7q0E49mb9TJ0= willnorris.com/go/webmention v0.0.0-20220108183051-4a23794272f0 h1:V5+O+YZHchEwu6ZmPcqT1dQ+mHgE356Q+w9SVOQ+QZg=