summaryrefslogtreecommitdiff
path: root/internal/transport/dereference.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/transport/dereference.go')
-rw-r--r--internal/transport/dereference.go39
1 files changed, 31 insertions, 8 deletions
diff --git a/internal/transport/dereference.go b/internal/transport/dereference.go
index 61d99c5c5..36157b673 100644
--- a/internal/transport/dereference.go
+++ b/internal/transport/dereference.go
@@ -20,32 +20,55 @@ package transport
import (
"context"
+ "fmt"
+ "io/ioutil"
+ "net/http"
"net/url"
- "github.com/sirupsen/logrus"
"github.com/spf13/viper"
"github.com/superseriousbusiness/gotosocial/internal/config"
"github.com/superseriousbusiness/gotosocial/internal/uris"
)
func (t *transport) Dereference(ctx context.Context, iri *url.URL) ([]byte, error) {
- l := logrus.WithField("func", "Dereference")
-
// if the request is to us, we can shortcut for certain URIs rather than going through
// the normal request flow, thereby saving time and energy
if iri.Host == viper.GetString(config.Keys.Host) {
if uris.IsFollowersPath(iri) {
// the request is for followers of one of our accounts, which we can shortcut
- return t.dereferenceFollowersShortcut(ctx, iri)
+ return t.controller.dereferenceLocalFollowers(ctx, iri)
}
if uris.IsUserPath(iri) {
// the request is for one of our accounts, which we can shortcut
- return t.dereferenceUserShortcut(ctx, iri)
+ return t.controller.dereferenceLocalUser(ctx, iri)
}
}
- // the request is either for a remote host or for us but we don't have a shortcut, so continue as normal
- l.Debugf("performing GET to %s", iri.String())
- return t.sigTransport.Dereference(ctx, iri)
+ // Build IRI just once
+ iriStr := iri.String()
+
+ // Prepare new HTTP request to endpoint
+ req, err := http.NewRequestWithContext(ctx, "GET", iriStr, nil)
+ if err != nil {
+ return nil, err
+ }
+ req.Header.Add("Accept", "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"")
+ req.Header.Add("Accept-Charset", "utf-8")
+ req.Header.Add("User-Agent", t.controller.userAgent)
+ req.Header.Set("Host", iri.Host)
+
+ // Perform the HTTP request
+ rsp, err := t.GET(req)
+ if err != nil {
+ return nil, err
+ }
+ defer rsp.Body.Close()
+
+ // Check for an expected status code
+ if rsp.StatusCode != http.StatusOK {
+ return nil, fmt.Errorf("GET request to %s failed (%d): %s", iriStr, rsp.StatusCode, rsp.Status)
+ }
+
+ return ioutil.ReadAll(rsp.Body)
}