Add IRI to local resources (#1046)
* initial commit * add remote trail/list * fix errors * update to use new IRIs * use origin in migration instead * use UnsafeWithoutHooks * fix trail/list order of operations * fix remote trail/list fetch * fixes list document update * fix errors --------- Co-authored-by: Christian Beutel <>
This commit is contained in:
@@ -3,9 +3,7 @@ package federation
|
||||
import (
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"os"
|
||||
"path"
|
||||
"pocketbase/util"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -180,12 +178,7 @@ func processTrailAnnounceActivity(app core.App, actor *core.Record, activity pub
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
trailUrl, err := url.Parse(activity.Object.GetID().String())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
trailId := path.Base(trailUrl.Path)
|
||||
trail, err = app.FindRecordById("trails", trailId)
|
||||
trail, err = app.FindFirstRecordByData("trails", "iri", activity.Object.GetID().String())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -245,12 +238,7 @@ func processListAnnounceActivity(app core.App, actor *core.Record, activity pub.
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
listUrl, err := url.Parse(activity.Object.GetID().String())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
listId := path.Base(listUrl.Path)
|
||||
list, err = app.FindRecordById("trails", listId)
|
||||
list, err = app.FindFirstRecordByData("lists", "iri", activity.Object.GetID().String())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -4,9 +4,7 @@ import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"os"
|
||||
"path"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -228,12 +226,7 @@ func CreateSummitLogActivity(app core.App, ctx context.Context, summitLog *core.
|
||||
}
|
||||
|
||||
var trailIRI pub.IRI
|
||||
if summitLogTrailAuthor.GetBool("isLocal") {
|
||||
trailId := summitLog.GetString("trail")
|
||||
trailIRI = pub.IRI(fmt.Sprintf("%s/api/v1/trail/%s", origin, trailId))
|
||||
} else {
|
||||
trailIRI = pub.IRI(summitLogTrail.GetString("iri"))
|
||||
}
|
||||
trailIRI = pub.IRI(summitLogTrail.GetString("iri"))
|
||||
|
||||
recordId := security.RandomStringWithAlphabet(core.DefaultIdLength, core.DefaultIdAlphabet)
|
||||
|
||||
@@ -321,7 +314,7 @@ func CreateSummitLogActivity(app core.App, ctx context.Context, summitLog *core.
|
||||
logObject.Content = pub.NaturalLanguageValuesNew(pub.LangRefValueNew(pub.NilLangRef, summitLog.GetString("text")))
|
||||
logObject.AttributedTo = pub.IRI(summitLogAuthor.GetString("iri"))
|
||||
logObject.Published = summitLog.GetDateTime("created").Time()
|
||||
logObject.ID = pub.IRI(fmt.Sprintf("%s/api/v1/summit-log/%s", origin, summitLog.Id))
|
||||
logObject.ID = pub.IRI(summitLog.GetString("iri"))
|
||||
logObject.URL = pub.IRI(fmt.Sprintf("%s/trail/view/@%s/%s", origin, summitLogTrailAuthor.GetString("preferred_username"), summitLog.GetString("trail")))
|
||||
logObject.InReplyTo = trailIRI
|
||||
logObject.Tag = tags
|
||||
@@ -512,14 +505,8 @@ func processCreateOrUpdateCommentActivity(activity pub.Activity, app core.App, a
|
||||
return fmt.Errorf("error processing comment: InReplyTo empty")
|
||||
}
|
||||
|
||||
trailUrl, err := url.Parse(commentObject.InReplyTo.GetLink().String())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
trailId := path.Base(trailUrl.Path)
|
||||
|
||||
var trail *core.Record
|
||||
trail, err = app.FindFirstRecordByFilter("trails", "iri={:iri} || id={:id}", dbx.Params{"id": trailId, "iri": commentObject.InReplyTo.GetID().String()})
|
||||
trail, err = app.FindFirstRecordByData("trails", "iri", commentObject.InReplyTo.GetLink().String())
|
||||
|
||||
// if the trail is not present on this instance fetch it
|
||||
if err != nil {
|
||||
@@ -619,13 +606,7 @@ func processCreateOrUpdateSummitLogActivity(activity pub.Activity, app core.App,
|
||||
return err
|
||||
}
|
||||
|
||||
trailIRI, err := url.Parse(logObject.InReplyTo.GetID().String())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
trailId := path.Base(trailIRI.Path)
|
||||
|
||||
trail, err := app.FindFirstRecordByFilter("trails", "iri={:iri} || id={:id}", dbx.Params{"id": trailId, "iri": logObject.InReplyTo.GetID().String()})
|
||||
trail, err := app.FindFirstRecordByData("trails", "iri", logObject.InReplyTo.GetID().String())
|
||||
// if the trail is not present on this instance fetch it
|
||||
if err != nil {
|
||||
if err == sql.ErrNoRows {
|
||||
|
||||
@@ -39,7 +39,7 @@ func CreateTrailDeleteActivity(app core.App, r *core.Record) error {
|
||||
id := fmt.Sprintf("%s/api/v1/activitypub/activity/%s", origin, recordId)
|
||||
to := "https://www.w3.org/ns/activitystreams#Public"
|
||||
cc := author.GetString("iri") + "/followers"
|
||||
object := fmt.Sprintf("%s/api/v1/trail/%s", origin, r.Id)
|
||||
object := r.GetString("iri")
|
||||
|
||||
record := core.NewRecord(collection)
|
||||
record.Set("id", recordId)
|
||||
@@ -118,7 +118,7 @@ func CreateCommentDeleteActivity(app core.App, client meilisearch.ServiceManager
|
||||
|
||||
id := fmt.Sprintf("%s/api/v1/activitypub/activity/%s", origin, recordId)
|
||||
to := commentTrailAuthor.GetString("iri")
|
||||
object := fmt.Sprintf("%s/api/v1/comment/%s", origin, r.Id)
|
||||
object := r.GetString("iri")
|
||||
|
||||
activity := pub.DeleteNew(pub.IRI(id), pub.IRI(object))
|
||||
activity.Actor = pub.IRI(author.GetString("iri"))
|
||||
@@ -176,7 +176,7 @@ func CreateSummitLogDeleteActivity(app core.App, r *core.Record) error {
|
||||
|
||||
id := fmt.Sprintf("%s/api/v1/activitypub/activity/%s", origin, recordId)
|
||||
to := summitLogTrailAuthor.GetString("iri")
|
||||
object := fmt.Sprintf("%s/api/v1/summit-log/%s", origin, r.Id)
|
||||
object := r.GetString("iri")
|
||||
cc := pub.ItemCollection{pub.IRI(author.GetString("iri") + "/followers")}
|
||||
|
||||
activity := pub.DeleteNew(pub.IRI(id), pub.IRI(object))
|
||||
@@ -248,7 +248,7 @@ func CreateListDeleteActivity(app core.App, r *core.Record) error {
|
||||
id := fmt.Sprintf("%s/api/v1/activitypub/activity/%s", origin, recordId)
|
||||
to := "https://www.w3.org/ns/activitystreams#Public"
|
||||
cc := author.GetString("iri") + "/followers"
|
||||
object := fmt.Sprintf("%s/api/v1/list/%s", origin, r.Id)
|
||||
object := r.GetString("iri")
|
||||
|
||||
activity := pub.DeleteNew(pub.IRI(id), pub.IRI(object))
|
||||
activity.Actor = pub.IRI(author.GetString("iri"))
|
||||
|
||||
@@ -3,7 +3,6 @@ package federation
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path"
|
||||
"pocketbase/util"
|
||||
"time"
|
||||
|
||||
@@ -36,11 +35,6 @@ func CreateLikeActivity(app core.App, like *core.Record) error {
|
||||
|
||||
object := trail.GetString("iri")
|
||||
|
||||
if object == "" {
|
||||
// trail is local
|
||||
object = fmt.Sprintf("%s/api/v1/trail/%s", origin, trail.Id)
|
||||
}
|
||||
|
||||
collection, err := app.FindCollectionByNameOrId("activitypub_activities")
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -76,8 +70,7 @@ func ProcessLikeActivity(app core.App, actor *core.Record, activity pub.Activity
|
||||
return fmt.Errorf("ORIGIN not set")
|
||||
}
|
||||
|
||||
trailId := path.Base(activity.Object.GetID().String())
|
||||
trail, err := app.FindRecordById("trails", trailId)
|
||||
trail, err := app.FindFirstRecordByData("trails", "iri", activity.Object.GetID().String())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ package federation
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path"
|
||||
"time"
|
||||
|
||||
pub "github.com/go-ap/activitypub"
|
||||
@@ -91,10 +90,6 @@ func CreateUnlikeActivity(app core.App, like *core.Record) error {
|
||||
}
|
||||
|
||||
object := trail.GetString("iri")
|
||||
if object == "" {
|
||||
// trail is local
|
||||
object = fmt.Sprintf("%s/api/v1/trail/%s", origin, trail.Id)
|
||||
}
|
||||
|
||||
// find the original follow activity
|
||||
likeActivityRecord, err := app.FindFirstRecordByFilter("activitypub_activities", "actor={:actor}&&object={:object}&&type={:type}", dbx.Params{"actor": actor.GetString("iri"), "object": object, "type": string(pub.LikeType)})
|
||||
@@ -175,8 +170,7 @@ func processUnlikeActivity(app core.App, actor *core.Record, activity pub.Activi
|
||||
|
||||
likeActivity := activity.Object.(*pub.Activity)
|
||||
|
||||
trailId := path.Base(likeActivity.Object.GetID().String())
|
||||
trail, err := app.FindRecordById("trails", trailId)
|
||||
trail, err := app.FindFirstRecordByData("trails", "iri", likeActivity.Object.GetID().String())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user