summaryrefslogtreecommitdiff
path: root/internal/federation/commonbehavior.go
diff options
context:
space:
mode:
authorLibravatar Tobi Smethurst <31960611+tsmethurst@users.noreply.github.com>2021-06-27 16:52:18 +0200
committerLibravatar GitHub <noreply@github.com>2021-06-27 16:52:18 +0200
commit87cf621e21283728b2bb5517c6a6981087cc7ce5 (patch)
treebd53f99ac3a0f242668bc33a3aeb0b3350957fb7 /internal/federation/commonbehavior.go
parentGo fmt (diff)
downloadgotosocial-87cf621e21283728b2bb5517c6a6981087cc7ce5.tar.xz
Remote instance dereferencing (#70)
Remote instances are now dereferenced when they post to an inbox on a GtS instance. Dereferencing will be done first by checking the /api/v1/instance endpoint of an instance. If that doesn't work, /.well-known/nodeinfo will be checked. If that doesn't work, only a minimal representation of the instance will be stored. A new field was added to the Instance database model. To create it: alter table instances add column contact_account_username text;
Diffstat (limited to 'internal/federation/commonbehavior.go')
-rw-r--r--internal/federation/commonbehavior.go55
1 files changed, 0 insertions, 55 deletions
diff --git a/internal/federation/commonbehavior.go b/internal/federation/commonbehavior.go
index fab9ce112..29eb9b6f3 100644
--- a/internal/federation/commonbehavior.go
+++ b/internal/federation/commonbehavior.go
@@ -20,15 +20,10 @@ package federation
import (
"context"
- "fmt"
"net/http"
- "net/url"
- "github.com/go-fed/activity/pub"
"github.com/go-fed/activity/streams"
"github.com/go-fed/activity/streams/vocab"
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/util"
)
/*
@@ -101,53 +96,3 @@ func (f *federator) GetOutbox(ctx context.Context, r *http.Request) (vocab.Activ
// the CLIENT API, not through the federation API, so we just do nothing here.
return streams.NewActivityStreamsOrderedCollectionPage(), nil
}
-
-// NewTransport returns a new Transport on behalf of a specific actor.
-//
-// The actorBoxIRI will be either the inbox or outbox of an actor who is
-// attempting to do the dereferencing or delivery. Any authentication
-// scheme applied on the request must be based on this actor. The
-// request must contain some sort of credential of the user, such as a
-// HTTP Signature.
-//
-// The gofedAgent passed in should be used by the Transport
-// implementation in the User-Agent, as well as the application-specific
-// user agent string. The gofedAgent will indicate this library's use as
-// well as the library's version number.
-//
-// Any server-wide rate-limiting that needs to occur should happen in a
-// Transport implementation. This factory function allows this to be
-// created, so peer servers are not DOS'd.
-//
-// Any retry logic should also be handled by the Transport
-// implementation.
-//
-// Note that the library will not maintain a long-lived pointer to the
-// returned Transport so that any private credentials are able to be
-// garbage collected.
-func (f *federator) NewTransport(ctx context.Context, actorBoxIRI *url.URL, gofedAgent string) (pub.Transport, error) {
-
- var username string
- var err error
-
- if util.IsInboxPath(actorBoxIRI) {
- username, err = util.ParseInboxPath(actorBoxIRI)
- if err != nil {
- return nil, fmt.Errorf("couldn't parse path %s as an inbox: %s", actorBoxIRI.String(), err)
- }
- } else if util.IsOutboxPath(actorBoxIRI) {
- username, err = util.ParseOutboxPath(actorBoxIRI)
- if err != nil {
- return nil, fmt.Errorf("couldn't parse path %s as an outbox: %s", actorBoxIRI.String(), err)
- }
- } else {
- return nil, fmt.Errorf("id %s was neither an inbox path nor an outbox path", actorBoxIRI.String())
- }
-
- account := &gtsmodel.Account{}
- if err := f.db.GetLocalAccountByUsername(username, account); err != nil {
- return nil, fmt.Errorf("error getting account with username %s from the db: %s", username, err)
- }
-
- return f.transportController.NewTransport(account.PublicKeyURI, account.PrivateKey)
-}