mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-11-27 17:33:32 -06:00
follow requests prettymuch working
This commit is contained in:
parent
2453957a6e
commit
d68c64505b
15 changed files with 520 additions and 16 deletions
|
|
@ -519,3 +519,29 @@ func extractMention(i Mentionable) (*gtsmodel.Mention, error) {
|
|||
mention.MentionedAccountURI = hrefProp.GetIRI().String()
|
||||
return mention, nil
|
||||
}
|
||||
|
||||
func extractActor(i withActor) (*url.URL, error) {
|
||||
actorProp := i.GetActivityStreamsActor()
|
||||
if actorProp == nil {
|
||||
return nil, errors.New("actor property was nil")
|
||||
}
|
||||
for iter := actorProp.Begin(); iter != actorProp.End(); iter = iter.Next() {
|
||||
if iter.IsIRI() && iter.GetIRI() != nil {
|
||||
return iter.GetIRI(), nil
|
||||
}
|
||||
}
|
||||
return nil, errors.New("no iri found for actor prop")
|
||||
}
|
||||
|
||||
func extractObject(i withObject) (*url.URL, error) {
|
||||
objectProp := i.GetActivityStreamsObject()
|
||||
if objectProp == nil {
|
||||
return nil, errors.New("object property was nil")
|
||||
}
|
||||
for iter := objectProp.Begin(); iter != objectProp.End(); iter = iter.Next() {
|
||||
if iter.IsIRI() && iter.GetIRI() != nil {
|
||||
return iter.GetIRI(), nil
|
||||
}
|
||||
}
|
||||
return nil, errors.New("no iri found for object prop")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -95,6 +95,14 @@ type Mentionable interface {
|
|||
withHref
|
||||
}
|
||||
|
||||
type Followable interface {
|
||||
withJSONLDId
|
||||
withTypeName
|
||||
|
||||
withActor
|
||||
withObject
|
||||
}
|
||||
|
||||
type withJSONLDId interface {
|
||||
GetJSONLDId() vocab.JSONLDIdProperty
|
||||
}
|
||||
|
|
@ -218,3 +226,11 @@ type withHref interface {
|
|||
type withUpdated interface {
|
||||
GetActivityStreamsUpdated() vocab.ActivityStreamsUpdatedProperty
|
||||
}
|
||||
|
||||
type withActor interface {
|
||||
GetActivityStreamsActor() vocab.ActivityStreamsActorProperty
|
||||
}
|
||||
|
||||
type withObject interface {
|
||||
GetActivityStreamsObject() vocab.ActivityStreamsObjectProperty
|
||||
}
|
||||
|
|
|
|||
|
|
@ -306,6 +306,41 @@ func (c *converter) ASStatusToStatus(statusable Statusable) (*gtsmodel.Status, e
|
|||
return status, nil
|
||||
}
|
||||
|
||||
func (c *converter) ASFollowToFollowRequest(followable Followable) (*gtsmodel.FollowRequest, error) {
|
||||
|
||||
idProp := followable.GetJSONLDId()
|
||||
if idProp == nil || !idProp.IsIRI() {
|
||||
return nil, errors.New("no id property set on follow, or was not an iri")
|
||||
}
|
||||
uri := idProp.GetIRI().String()
|
||||
|
||||
origin, err := extractActor(followable)
|
||||
if err != nil {
|
||||
return nil, errors.New("error extracting actor property from follow")
|
||||
}
|
||||
originAccount := >smodel.Account{}
|
||||
if err := c.db.GetWhere("uri", origin.String(), originAccount); err != nil {
|
||||
return nil, fmt.Errorf("error extracting account with uri %s from the database: %s", origin.String(), err)
|
||||
}
|
||||
|
||||
target, err := extractObject(followable)
|
||||
if err != nil {
|
||||
return nil, errors.New("error extracting object property from follow")
|
||||
}
|
||||
targetAccount := >smodel.Account{}
|
||||
if err := c.db.GetWhere("uri", target.String(), targetAccount); err != nil {
|
||||
return nil, fmt.Errorf("error extracting account with uri %s from the database: %s", origin.String(), err)
|
||||
}
|
||||
|
||||
followRequest := >smodel.FollowRequest{
|
||||
URI: uri,
|
||||
AccountID: originAccount.ID,
|
||||
TargetAccountID: targetAccount.ID,
|
||||
}
|
||||
|
||||
return followRequest, nil
|
||||
}
|
||||
|
||||
func isPublic(tos []*url.URL) bool {
|
||||
for _, entry := range tos {
|
||||
if strings.EqualFold(entry.String(), "https://www.w3.org/ns/activitystreams#Public") {
|
||||
|
|
|
|||
|
|
@ -92,6 +92,8 @@ type TypeConverter interface {
|
|||
ASRepresentationToAccount(accountable Accountable) (*gtsmodel.Account, error)
|
||||
// ASStatus converts a remote activitystreams 'status' representation into a gts model status.
|
||||
ASStatusToStatus(statusable Statusable) (*gtsmodel.Status, error)
|
||||
// ASFollowToFollowRequest converts a remote activitystreams `follow` representation into gts model follow request.
|
||||
ASFollowToFollowRequest(followable Followable) (*gtsmodel.FollowRequest, error)
|
||||
|
||||
/*
|
||||
INTERNAL (gts) MODEL TO ACTIVITYSTREAMS MODEL
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue