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:
Flomp
2026-06-07 12:20:13 +02:00
committed by GitHub
parent f912a186a6
commit fc735130cc
19 changed files with 273 additions and 131 deletions

View File

@@ -1,6 +1,8 @@
package hooks
import (
"fmt"
"os"
"pocketbase/federation"
"pocketbase/util"
@@ -12,7 +14,23 @@ import (
func CreateCommentHandler() func(e *core.RecordRequestEvent) error {
return func(e *core.RecordRequestEvent) error {
e.Next()
err := e.Next()
if err != nil {
return err
}
// add local iri
origin := os.Getenv("ORIGIN")
if origin == "" {
return fmt.Errorf("ORIGIN not set")
}
if e.Record.GetString("iri") == "" {
e.Record.Set("iri", fmt.Sprintf("%s/api/v1/comment/%s", origin, e.Record.Id))
}
err = e.App.UnsafeWithoutHooks().Save(e.Record)
if err != nil {
return err
}
userActor, err := e.App.FindFirstRecordByData("activitypub_actors", "user", e.Auth.Id)
if err != nil {

View File

@@ -1,6 +1,8 @@
package hooks
import (
"fmt"
"os"
"pocketbase/federation"
"pocketbase/util"
@@ -18,20 +20,32 @@ func CreateListHandler(client meilisearch.ServiceManager) func(e *core.RecordEve
return err
}
// add local iri
origin := os.Getenv("ORIGIN")
if origin == "" {
return fmt.Errorf("ORIGIN not set")
}
if e.Record.GetString("iri") == "" {
e.Record.Set("iri", fmt.Sprintf("%s/api/v1/list/%s", origin, e.Record.Id))
if err = e.App.UnsafeWithoutHooks().Save(e.Record); err != nil {
return err
}
}
if err := util.IndexLists(e.App, []*core.Record{record}, client); err != nil {
return err
}
err = e.Next()
if err != nil {
return err
}
if !author.GetBool("isLocal") {
// this happens if someone fetches a remote list
// we create a stub list record for later reference
// no need to create an activity for that
return e.Next()
}
err = e.Next()
if err != nil {
return err
return nil
}
err = federation.CreateListActivity(e.App, e.Record, pub.CreateType)

View File

@@ -1,6 +1,8 @@
package hooks
import (
"fmt"
"os"
"pocketbase/federation"
"pocketbase/util"
@@ -11,12 +13,24 @@ import (
func CreateSummitLogHandler(client meilisearch.ServiceManager) func(e *core.RecordRequestEvent) error {
return func(e *core.RecordRequestEvent) error {
err := e.Next()
if err != nil {
return err
}
// add local iri
origin := os.Getenv("ORIGIN")
if origin == "" {
return fmt.Errorf("ORIGIN not set")
}
if e.Record.GetString("iri") == "" {
e.Record.Set("iri", fmt.Sprintf("%s/api/v1/summit-log/%s", origin, e.Record.Id))
}
err = e.App.UnsafeWithoutHooks().Save(e.Record)
if err != nil {
return err
}
userActor, err := e.App.FindFirstRecordByData("activitypub_actors", "user", e.Auth.Id)
if err != nil {
return err

View File

@@ -1,7 +1,9 @@
package hooks
import (
"fmt"
"log"
"os"
"pocketbase/federation"
"pocketbase/util"
"time"
@@ -23,21 +25,35 @@ func CreateTrailHandler(client meilisearch.ServiceManager) func(e *core.RecordEv
if err := util.SavePolyline(e.App, record); err != nil {
log.Printf("failed to save polyline for trail %s: %v", record.Id, err)
}
// add local iri
origin := os.Getenv("ORIGIN")
if origin == "" {
return fmt.Errorf("ORIGIN not set")
}
if e.Record.GetString("iri") == "" {
e.Record.Set("iri", fmt.Sprintf("%s/api/v1/trail/%s", origin, e.Record.Id))
if err = e.App.UnsafeWithoutHooks().Save(e.Record); err != nil {
return err
}
}
if err := util.IndexTrails(e.App, []*core.Record{record}, client); err != nil {
return err
}
if !userActor.GetBool("isLocal") {
// this happens if someone fetches a remote trail
// we create a stub trail record for later reference
// no need to create an activity for that
return e.Next()
}
err = e.Next()
if err != nil {
return err
}
if !userActor.GetBool("isLocal") {
// this happens if someone fetches a remote list
// we create a stub list record for later reference
// no need to create an activity for that
return nil
}
ctx, err := util.GetSafeActorContext(nil, userActor)
if err != nil {

28
db/hooks/waypoint.go Normal file
View File

@@ -0,0 +1,28 @@
package hooks
import (
"fmt"
"os"
"github.com/pocketbase/pocketbase/core"
)
func CreateWaypointHandler() func(e *core.RecordRequestEvent) error {
return func(e *core.RecordRequestEvent) error {
err := e.Next()
if err != nil {
return err
}
// add local iri
origin := os.Getenv("ORIGIN")
if origin == "" {
return fmt.Errorf("ORIGIN not set")
}
if e.Record.GetString("iri") == "" {
e.Record.Set("iri", fmt.Sprintf("%s/api/v1/waypoint/%s", origin, e.Record.Id))
}
return e.App.UnsafeWithoutHooks().Save(e.Record)
}
}