diff options
| author | 2021-08-25 15:34:33 +0200 | |
|---|---|---|
| committer | 2021-08-25 15:34:33 +0200 | |
| commit | 2dc9fc1626507bb54417fc4a1920b847cafb27a2 (patch) | |
| tree | 4ddeac479b923db38090aac8bd9209f3646851c1 /internal/transport | |
| parent | Manually approves followers (#146) (diff) | |
| download | gotosocial-2dc9fc1626507bb54417fc4a1920b847cafb27a2.tar.xz | |
Pg to bun (#148)
* start moving to bun
* changing more stuff
* more
* and yet more
* tests passing
* seems stable now
* more big changes
* small fix
* little fixes
Diffstat (limited to 'internal/transport')
| -rw-r--r-- | internal/transport/controller.go | 7 | ||||
| -rw-r--r-- | internal/transport/deliver.go | 26 | ||||
| -rw-r--r-- | internal/transport/dereference.go | 22 | ||||
| -rw-r--r-- | internal/transport/derefinstance.go | 41 | ||||
| -rw-r--r-- | internal/transport/derefmedia.go | 23 | ||||
| -rw-r--r-- | internal/transport/finger.go | 24 | ||||
| -rw-r--r-- | internal/transport/transport.go | 24 |
7 files changed, 137 insertions, 30 deletions
diff --git a/internal/transport/controller.go b/internal/transport/controller.go index 4eb6b5658..c2f5026e0 100644 --- a/internal/transport/controller.go +++ b/internal/transport/controller.go @@ -19,6 +19,7 @@ package transport import ( + "context" "crypto" "fmt" "sync" @@ -33,7 +34,7 @@ import ( // Controller generates transports for use in making federation requests to other servers. type Controller interface { NewTransport(pubKeyID string, privkey crypto.PrivateKey) (Transport, error) - NewTransportForUsername(username string) (Transport, error) + NewTransportForUsername(ctx context.Context, username string) (Transport, error) } type controller struct { @@ -90,7 +91,7 @@ func (c *controller) NewTransport(pubKeyID string, privkey crypto.PrivateKey) (T }, nil } -func (c *controller) NewTransportForUsername(username string) (Transport, error) { +func (c *controller) NewTransportForUsername(ctx context.Context, username string) (Transport, error) { // We need an account to use to create a transport for dereferecing something. // If a username has been given, we can fetch the account with that username and use it. // Otherwise, we can take the instance account and use those credentials to make the request. @@ -101,7 +102,7 @@ func (c *controller) NewTransportForUsername(username string) (Transport, error) u = username } - ourAccount, err := c.db.GetLocalAccountByUsername(u) + ourAccount, err := c.db.GetLocalAccountByUsername(ctx, u) if err != nil { return nil, fmt.Errorf("error getting account %s from db: %s", username, err) } diff --git a/internal/transport/deliver.go b/internal/transport/deliver.go index 844cb6bea..fd0fb576f 100644 --- a/internal/transport/deliver.go +++ b/internal/transport/deliver.go @@ -1,3 +1,21 @@ +/* + GoToSocial + Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + package transport import ( @@ -5,12 +23,12 @@ import ( "net/url" ) -func (t *transport) BatchDeliver(c context.Context, b []byte, recipients []*url.URL) error { - return t.sigTransport.BatchDeliver(c, b, recipients) +func (t *transport) BatchDeliver(ctx context.Context, b []byte, recipients []*url.URL) error { + return t.sigTransport.BatchDeliver(ctx, b, recipients) } -func (t *transport) Deliver(c context.Context, b []byte, to *url.URL) error { +func (t *transport) Deliver(ctx context.Context, b []byte, to *url.URL) error { l := t.log.WithField("func", "Deliver") l.Debugf("performing POST to %s", to.String()) - return t.sigTransport.Deliver(c, b, to) + return t.sigTransport.Deliver(ctx, b, to) } diff --git a/internal/transport/dereference.go b/internal/transport/dereference.go index d7a28fe17..85fa370ee 100644 --- a/internal/transport/dereference.go +++ b/internal/transport/dereference.go @@ -1,3 +1,21 @@ +/* + GoToSocial + Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + package transport import ( @@ -5,8 +23,8 @@ import ( "net/url" ) -func (t *transport) Dereference(c context.Context, iri *url.URL) ([]byte, error) { +func (t *transport) Dereference(ctx context.Context, iri *url.URL) ([]byte, error) { l := t.log.WithField("func", "Dereference") l.Debugf("performing GET to %s", iri.String()) - return t.sigTransport.Dereference(c, iri) + return t.sigTransport.Dereference(ctx, iri) } diff --git a/internal/transport/derefinstance.go b/internal/transport/derefinstance.go index a8b2ddfc7..3d72d7581 100644 --- a/internal/transport/derefinstance.go +++ b/internal/transport/derefinstance.go @@ -1,3 +1,21 @@ +/* + GoToSocial + Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + package transport import ( @@ -16,7 +34,7 @@ import ( "github.com/superseriousbusiness/gotosocial/internal/util" ) -func (t *transport) DereferenceInstance(c context.Context, iri *url.URL) (*gtsmodel.Instance, error) { +func (t *transport) DereferenceInstance(ctx context.Context, iri *url.URL) (*gtsmodel.Instance, error) { l := t.log.WithField("func", "DereferenceInstance") var i *gtsmodel.Instance @@ -27,7 +45,7 @@ func (t *transport) DereferenceInstance(c context.Context, iri *url.URL) (*gtsmo // // This will only work with Mastodon-api compatible instances: Mastodon, some Pleroma instances, GoToSocial. l.Debugf("trying to dereference instance %s by /api/v1/instance", iri.Host) - i, err = dereferenceByAPIV1Instance(c, t, iri) + i, err = dereferenceByAPIV1Instance(ctx, t, iri) if err == nil { l.Debugf("successfully dereferenced instance using /api/v1/instance") return i, nil @@ -37,7 +55,7 @@ func (t *transport) DereferenceInstance(c context.Context, iri *url.URL) (*gtsmo // If that doesn't work, try to dereference using /.well-known/nodeinfo. // This will involve two API calls and return less info overall, but should be more widely compatible. l.Debugf("trying to dereference instance %s by /.well-known/nodeinfo", iri.Host) - i, err = dereferenceByNodeInfo(c, t, iri) + i, err = dereferenceByNodeInfo(ctx, t, iri) if err == nil { l.Debugf("successfully dereferenced instance using /.well-known/nodeinfo") return i, nil @@ -58,7 +76,7 @@ func (t *transport) DereferenceInstance(c context.Context, iri *url.URL) (*gtsmo }, nil } -func dereferenceByAPIV1Instance(c context.Context, t *transport, iri *url.URL) (*gtsmodel.Instance, error) { +func dereferenceByAPIV1Instance(ctx context.Context, t *transport, iri *url.URL) (*gtsmodel.Instance, error) { l := t.log.WithField("func", "dereferenceByAPIV1Instance") cleanIRI := &url.URL{ @@ -68,11 +86,10 @@ func dereferenceByAPIV1Instance(c context.Context, t *transport, iri *url.URL) ( } l.Debugf("performing GET to %s", cleanIRI.String()) - req, err := http.NewRequest("GET", cleanIRI.String(), nil) + req, err := http.NewRequestWithContext(ctx, "GET", cleanIRI.String(), nil) if err != nil { return nil, err } - req = req.WithContext(c) req.Header.Add("Accept", "application/json") req.Header.Add("Date", t.clock.Now().UTC().Format("Mon, 02 Jan 2006 15:04:05")+" GMT") req.Header.Add("User-Agent", fmt.Sprintf("%s %s", t.appAgent, t.gofedAgent)) @@ -216,7 +233,7 @@ func dereferenceByNodeInfo(c context.Context, t *transport, iri *url.URL) (*gtsm return i, nil } -func callNodeInfoWellKnown(c context.Context, t *transport, iri *url.URL) (*url.URL, error) { +func callNodeInfoWellKnown(ctx context.Context, t *transport, iri *url.URL) (*url.URL, error) { l := t.log.WithField("func", "callNodeInfoWellKnown") cleanIRI := &url.URL{ @@ -226,11 +243,11 @@ func callNodeInfoWellKnown(c context.Context, t *transport, iri *url.URL) (*url. } l.Debugf("performing GET to %s", cleanIRI.String()) - req, err := http.NewRequest("GET", cleanIRI.String(), nil) + req, err := http.NewRequestWithContext(ctx, "GET", cleanIRI.String(), nil) if err != nil { return nil, err } - req = req.WithContext(c) + req.Header.Add("Accept", "application/json") req.Header.Add("Date", t.clock.Now().UTC().Format("Mon, 02 Jan 2006 15:04:05")+" GMT") req.Header.Add("User-Agent", fmt.Sprintf("%s %s", t.appAgent, t.gofedAgent)) @@ -281,15 +298,15 @@ func callNodeInfoWellKnown(c context.Context, t *transport, iri *url.URL) (*url. return nodeinfoHref, nil } -func callNodeInfo(c context.Context, t *transport, iri *url.URL) (*apimodel.Nodeinfo, error) { +func callNodeInfo(ctx context.Context, t *transport, iri *url.URL) (*apimodel.Nodeinfo, error) { l := t.log.WithField("func", "callNodeInfo") l.Debugf("performing GET to %s", iri.String()) - req, err := http.NewRequest("GET", iri.String(), nil) + req, err := http.NewRequestWithContext(ctx, "GET", iri.String(), nil) if err != nil { return nil, err } - req = req.WithContext(c) + req.Header.Add("Accept", "application/json") req.Header.Add("Date", t.clock.Now().UTC().Format("Mon, 02 Jan 2006 15:04:05")+" GMT") req.Header.Add("User-Agent", fmt.Sprintf("%s %s", t.appAgent, t.gofedAgent)) diff --git a/internal/transport/derefmedia.go b/internal/transport/derefmedia.go index 5fa901100..e265bfdd4 100644 --- a/internal/transport/derefmedia.go +++ b/internal/transport/derefmedia.go @@ -1,3 +1,21 @@ +/* + GoToSocial + Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + package transport import ( @@ -8,14 +26,13 @@ import ( "net/url" ) -func (t *transport) DereferenceMedia(c context.Context, iri *url.URL, expectedContentType string) ([]byte, error) { +func (t *transport) DereferenceMedia(ctx context.Context, iri *url.URL, expectedContentType string) ([]byte, error) { l := t.log.WithField("func", "DereferenceMedia") l.Debugf("performing GET to %s", iri.String()) - req, err := http.NewRequest("GET", iri.String(), nil) + req, err := http.NewRequestWithContext(ctx, "GET", iri.String(), nil) if err != nil { return nil, err } - req = req.WithContext(c) if expectedContentType == "" { req.Header.Add("Accept", "*/*") } else { diff --git a/internal/transport/finger.go b/internal/transport/finger.go index 12cd2fb64..ce092e83f 100644 --- a/internal/transport/finger.go +++ b/internal/transport/finger.go @@ -1,3 +1,21 @@ +/* + GoToSocial + Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + package transport import ( @@ -8,7 +26,7 @@ import ( "net/url" ) -func (t *transport) Finger(c context.Context, targetUsername string, targetDomain string) ([]byte, error) { +func (t *transport) Finger(ctx context.Context, targetUsername string, targetDomain string) ([]byte, error) { l := t.log.WithField("func", "Finger") urlString := fmt.Sprintf("https://%s/.well-known/webfinger?resource=acct:%s@%s", targetDomain, targetUsername, targetDomain) l.Debugf("performing GET to %s", urlString) @@ -20,11 +38,11 @@ func (t *transport) Finger(c context.Context, targetUsername string, targetDomai l.Debugf("performing GET to %s", iri.String()) - req, err := http.NewRequest("GET", iri.String(), nil) + req, err := http.NewRequestWithContext(ctx, "GET", iri.String(), nil) if err != nil { return nil, err } - req = req.WithContext(c) + req.Header.Add("Accept", "application/json") req.Header.Add("Accept", "application/jrd+json") req.Header.Add("Date", t.clock.Now().UTC().Format("Mon, 02 Jan 2006 15:04:05")+" GMT") diff --git a/internal/transport/transport.go b/internal/transport/transport.go index 04c72de5c..8d8262834 100644 --- a/internal/transport/transport.go +++ b/internal/transport/transport.go @@ -1,3 +1,21 @@ +/* + GoToSocial + Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + package transport import ( @@ -17,11 +35,11 @@ import ( type Transport interface { pub.Transport // DereferenceMedia fetches the bytes of the given media attachment IRI, with the expectedContentType. - DereferenceMedia(c context.Context, iri *url.URL, expectedContentType string) ([]byte, error) + DereferenceMedia(ctx context.Context, iri *url.URL, expectedContentType string) ([]byte, error) // DereferenceInstance dereferences remote instance information, first by checking /api/v1/instance, and then by checking /.well-known/nodeinfo. - DereferenceInstance(c context.Context, iri *url.URL) (*gtsmodel.Instance, error) + DereferenceInstance(ctx context.Context, iri *url.URL) (*gtsmodel.Instance, error) // Finger performs a webfinger request with the given username and domain, and returns the bytes from the response body. - Finger(c context.Context, targetUsername string, targetDomains string) ([]byte, error) + Finger(ctx context.Context, targetUsername string, targetDomains string) ([]byte, error) } // transport implements the Transport interface |
