* fix: use ActivityPub actor ID for shared trails/lists search token filtering * fix deprecated meili token storage --------- Co-authored-by: Flomp <Flomp@users.noreply.github.com> Co-authored-by: Christian Beutel <>
82 lines
1.9 KiB
Go
82 lines
1.9 KiB
Go
package hooks
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"pocketbase/util"
|
|
|
|
"github.com/meilisearch/meilisearch-go"
|
|
"github.com/pocketbase/dbx"
|
|
"github.com/pocketbase/pocketbase/core"
|
|
)
|
|
|
|
func CreateUserHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
|
|
return func(e *core.RecordEvent) error {
|
|
err := createDefaultUserSettings(e.App, e.Record.Id)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = util.ActorFromUser(e.App, e.Record)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return e.Next()
|
|
}
|
|
}
|
|
|
|
func UpdateUserHandler(client meilisearch.ServiceManager) func(e *core.RecordEvent) error {
|
|
return func(e *core.RecordEvent) error {
|
|
actor, err := e.App.FindFirstRecordByData("activitypub_actors", "user", e.Record.Id)
|
|
if err != nil {
|
|
return e.Next()
|
|
}
|
|
|
|
icon := ""
|
|
origin := os.Getenv("ORIGIN")
|
|
if origin != "" && e.Record.GetString("avatar") != "" {
|
|
icon = fmt.Sprintf("%s/api/v1/files/_pb_users_auth_/%s/%s", origin, e.Record.Id, e.Record.GetString("avatar"))
|
|
}
|
|
actor.Set("icon", icon)
|
|
if err := e.App.Save(actor); err != nil {
|
|
return err
|
|
}
|
|
|
|
trails, err := e.App.FindRecordsByFilter("trails", "author={:author}", "", -1, 0, dbx.Params{"author": actor.Id})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if len(trails) > 0 {
|
|
if err := util.IndexTrails(e.App, trails, client); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
lists, err := e.App.FindRecordsByFilter("lists", "author={:author}", "", -1, 0, dbx.Params{"author": actor.Id})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if len(lists) > 0 {
|
|
if err := util.IndexLists(e.App, lists, client); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return e.Next()
|
|
}
|
|
}
|
|
|
|
func createDefaultUserSettings(app core.App, userId string) error {
|
|
collection, err := app.FindCollectionByNameOrId("settings")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
settings := core.NewRecord(collection)
|
|
settings.Set("language", "en")
|
|
settings.Set("unit", "metric")
|
|
settings.Set("mapFocus", "trails")
|
|
settings.Set("user", userId)
|
|
return app.Save(settings)
|
|
}
|