diff options
Diffstat (limited to 'internal/federation/dereferencing')
| -rw-r--r-- | internal/federation/dereferencing/account.go | 30 | ||||
| -rw-r--r-- | internal/federation/dereferencing/error.go | 14 | ||||
| -rw-r--r-- | internal/federation/dereferencing/status.go | 75 | 
3 files changed, 4 insertions, 115 deletions
diff --git a/internal/federation/dereferencing/account.go b/internal/federation/dereferencing/account.go index 0ce35b0e4..4795db733 100644 --- a/internal/federation/dereferencing/account.go +++ b/internal/federation/dereferencing/account.go @@ -357,39 +357,13 @@ func (d *deref) enrichAccount(ctx context.Context, requestUser string, uri *url.  // dereferenceAccountable calls remoteAccountID with a GET request, and tries to parse whatever  // it finds as something that an account model can be constructed out of. -// -// Will work for Person, Application, or Service models.  func (d *deref) dereferenceAccountable(ctx context.Context, transport transport.Transport, remoteAccountID *url.URL) (ap.Accountable, error) {  	b, err := transport.Dereference(ctx, remoteAccountID)  	if err != nil { -		return nil, fmt.Errorf("DereferenceAccountable: error deferencing %s: %w", remoteAccountID.String(), err) -	} - -	m := make(map[string]interface{}) -	if err := json.Unmarshal(b, &m); err != nil { -		return nil, fmt.Errorf("DereferenceAccountable: error unmarshalling bytes into json: %w", err) -	} - -	t, err := streams.ToType(ctx, m) -	if err != nil { -		return nil, fmt.Errorf("DereferenceAccountable: error resolving json into ap vocab type: %w", err) -	} - -	//nolint:forcetypeassert -	switch t.GetTypeName() { -	case ap.ActorApplication: -		return t.(vocab.ActivityStreamsApplication), nil -	case ap.ActorGroup: -		return t.(vocab.ActivityStreamsGroup), nil -	case ap.ActorOrganization: -		return t.(vocab.ActivityStreamsOrganization), nil -	case ap.ActorPerson: -		return t.(vocab.ActivityStreamsPerson), nil -	case ap.ActorService: -		return t.(vocab.ActivityStreamsService), nil +		return nil, fmt.Errorf("dereferenceAccountable: error deferencing %s: %w", remoteAccountID.String(), err)  	} -	return nil, newErrWrongType(fmt.Errorf("DereferenceAccountable: type name %s not supported as Accountable", t.GetTypeName())) +	return ap.ResolveAccountable(ctx, b)  }  func (d *deref) fetchRemoteAccountAvatar(ctx context.Context, tsport transport.Transport, avatarURL string, accountID string) (string, error) { diff --git a/internal/federation/dereferencing/error.go b/internal/federation/dereferencing/error.go index f2fae63ac..769150cef 100644 --- a/internal/federation/dereferencing/error.go +++ b/internal/federation/dereferencing/error.go @@ -66,20 +66,6 @@ func newErrTransportError(err error) error {  	return &ErrTransportError{wrapped: err}  } -// ErrWrongType indicates that an unexpected type was returned from a remote call; -// for example, we were served a Person when we were looking for a statusable. -type ErrWrongType struct { -	wrapped error -} - -func (err *ErrWrongType) Error() string { -	return fmt.Sprintf("wrong received type: %v", err.wrapped) -} - -func newErrWrongType(err error) error { -	return &ErrWrongType{wrapped: err} -} -  // ErrOther denotes some other kind of weird error, perhaps from a malformed json  // or some other weird crapola.  type ErrOther struct { diff --git a/internal/federation/dereferencing/status.go b/internal/federation/dereferencing/status.go index 8e202d585..fe07be23a 100644 --- a/internal/federation/dereferencing/status.go +++ b/internal/federation/dereferencing/status.go @@ -19,14 +19,11 @@ package dereferencing  import (  	"context" -	"encoding/json"  	"errors"  	"fmt"  	"net/url"  	"strings" -	"github.com/superseriousbusiness/activity/streams" -	"github.com/superseriousbusiness/activity/streams/vocab"  	"github.com/superseriousbusiness/gotosocial/internal/ap"  	"github.com/superseriousbusiness/gotosocial/internal/config"  	"github.com/superseriousbusiness/gotosocial/internal/db" @@ -161,78 +158,10 @@ func (d *deref) dereferenceStatusable(ctx context.Context, tsport transport.Tran  	b, err := tsport.Dereference(ctx, remoteStatusID)  	if err != nil { -		return nil, fmt.Errorf("DereferenceStatusable: error deferencing %s: %s", remoteStatusID.String(), err) +		return nil, fmt.Errorf("dereferenceStatusable: error deferencing %s: %w", remoteStatusID.String(), err)  	} -	m := make(map[string]interface{}) -	if err := json.Unmarshal(b, &m); err != nil { -		return nil, fmt.Errorf("DereferenceStatusable: error unmarshalling bytes into json: %s", err) -	} - -	t, err := streams.ToType(ctx, m) -	if err != nil { -		return nil, fmt.Errorf("DereferenceStatusable: error resolving json into ap vocab type: %s", err) -	} - -	// Article, Document, Image, Video, Note, Page, Event, Place, Mention, Profile -	switch t.GetTypeName() { -	case ap.ObjectArticle: -		p, ok := t.(vocab.ActivityStreamsArticle) -		if !ok { -			return nil, errors.New("DereferenceStatusable: error resolving type as ActivityStreamsArticle") -		} -		return p, nil -	case ap.ObjectDocument: -		p, ok := t.(vocab.ActivityStreamsDocument) -		if !ok { -			return nil, errors.New("DereferenceStatusable: error resolving type as ActivityStreamsDocument") -		} -		return p, nil -	case ap.ObjectImage: -		p, ok := t.(vocab.ActivityStreamsImage) -		if !ok { -			return nil, errors.New("DereferenceStatusable: error resolving type as ActivityStreamsImage") -		} -		return p, nil -	case ap.ObjectVideo: -		p, ok := t.(vocab.ActivityStreamsVideo) -		if !ok { -			return nil, errors.New("DereferenceStatusable: error resolving type as ActivityStreamsVideo") -		} -		return p, nil -	case ap.ObjectNote: -		p, ok := t.(vocab.ActivityStreamsNote) -		if !ok { -			return nil, errors.New("DereferenceStatusable: error resolving type as ActivityStreamsNote") -		} -		return p, nil -	case ap.ObjectPage: -		p, ok := t.(vocab.ActivityStreamsPage) -		if !ok { -			return nil, errors.New("DereferenceStatusable: error resolving type as ActivityStreamsPage") -		} -		return p, nil -	case ap.ObjectEvent: -		p, ok := t.(vocab.ActivityStreamsEvent) -		if !ok { -			return nil, errors.New("DereferenceStatusable: error resolving type as ActivityStreamsEvent") -		} -		return p, nil -	case ap.ObjectPlace: -		p, ok := t.(vocab.ActivityStreamsPlace) -		if !ok { -			return nil, errors.New("DereferenceStatusable: error resolving type as ActivityStreamsPlace") -		} -		return p, nil -	case ap.ObjectProfile: -		p, ok := t.(vocab.ActivityStreamsProfile) -		if !ok { -			return nil, errors.New("DereferenceStatusable: error resolving type as ActivityStreamsProfile") -		} -		return p, nil -	} - -	return nil, newErrWrongType(fmt.Errorf("DereferenceStatusable: type name %s not supported as Statusable", t.GetTypeName())) +	return ap.ResolveStatusable(ctx, b)  }  // populateStatusFields fetches all the information we temporarily pinned to an incoming  | 
