fix: assorted ActivityPub code only refactors (#8708)

Fix parts of issue #8221 and part of PR #4767

Is linked to https://codeberg.org/forgejo/forgejo/pulls/8274

The commit 555f6e57ad fixes timeout forgejo/forgejo#8274 (Kommentar)

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/8708
Reviewed-by: Earl Warren <earl-warren@noreply.codeberg.org>
Co-authored-by: Michael Jerger <michael.jerger@meissa-gmbh.de>
Co-committed-by: Michael Jerger <michael.jerger@meissa-gmbh.de>
This commit is contained in:
Michael Jerger 2025-07-28 15:17:29 +02:00 committed by Earl Warren
parent 106707b40f
commit 388e4eb44b
20 changed files with 744 additions and 69 deletions

View file

@ -18,7 +18,6 @@ import (
"forgejo.org/modules/log"
"forgejo.org/modules/setting"
"forgejo.org/modules/validation"
context_service "forgejo.org/services/context"
"github.com/google/uuid"
)
@ -27,7 +26,7 @@ func Init() error {
return nil
}
func FindOrCreateFederationHost(ctx *context_service.Base, actorURI string) (*forgefed.FederationHost, error) {
func FindOrCreateFederationHost(ctx context.Context, actorURI string) (*forgefed.FederationHost, error) {
rawActorID, err := fm.NewActorID(actorURI)
if err != nil {
return nil, err
@ -46,7 +45,7 @@ func FindOrCreateFederationHost(ctx *context_service.Base, actorURI string) (*fo
return federationHost, nil
}
func FindOrCreateFederatedUser(ctx *context_service.Base, actorURI string) (*user.User, *user.FederatedUser, *forgefed.FederationHost, error) {
func FindOrCreateFederatedUser(ctx context.Context, actorURI string) (*user.User, *user.FederatedUser, *forgefed.FederationHost, error) {
user, federatedUser, federationHost, err := findFederatedUser(ctx, actorURI)
if err != nil {
return nil, nil, nil, err
@ -57,20 +56,21 @@ func FindOrCreateFederatedUser(ctx *context_service.Base, actorURI string) (*use
}
if user != nil {
log.Trace("Found local federatedUser: %#v", user)
log.Trace("Local ActivityPub user found (actorURI: %#v, user: %#v)", actorURI, user)
} else {
log.Trace("Attempting to create new user and federatedUser for actorURI: %#v", actorURI)
user, federatedUser, err = createUserFromAP(ctx, personID, federationHost.ID)
if err != nil {
return nil, nil, nil, err
}
log.Trace("Created federatedUser from ap: %#v", user)
log.Trace("Created user %#v with federatedUser %#v from distant server", user, federatedUser)
}
log.Trace("Got user: %v", user.Name)
return user, federatedUser, federationHost, nil
}
func findFederatedUser(ctx *context_service.Base, actorURI string) (*user.User, *user.FederatedUser, *forgefed.FederationHost, error) {
func findFederatedUser(ctx context.Context, actorURI string) (*user.User, *user.FederatedUser, *forgefed.FederationHost, error) {
federationHost, err := FindOrCreateFederationHost(ctx, actorURI)
if err != nil {
return nil, nil, nil, err
@ -90,6 +90,7 @@ func findFederatedUser(ctx *context_service.Base, actorURI string) (*user.User,
func createFederationHostFromAP(ctx context.Context, actorID fm.ActorID) (*forgefed.FederationHost, error) {
actionsUser := user.NewAPServerActor()
clientFactory, err := activitypub.GetClientFactory(ctx)
if err != nil {
return nil, err
@ -161,7 +162,7 @@ func fetchUserFromAP(ctx context.Context, personID fm.PersonID, federationHostID
return nil, nil, err
}
log.Info("Fetched valid person:%q", person)
log.Info("Fetched valid person from distant server: %q", person)
localFqdn, err := url.ParseRequestURI(setting.AppURL)
if err != nil {
@ -220,7 +221,7 @@ func fetchUserFromAP(ctx context.Context, personID fm.PersonID, federationHostID
},
}
log.Info("Fetch federatedUser:%q", federatedUser)
log.Info("Fetched person's %q federatedUser from distant server: %q", person, federatedUser)
return &newUser, &federatedUser, nil
}
@ -234,6 +235,6 @@ func createUserFromAP(ctx context.Context, personID fm.PersonID, federationHostI
return nil, nil, err
}
log.Info("Created federatedUser:%q", federatedUser)
log.Info("Created federatedUser: %q", federatedUser)
return newUser, federatedUser, nil
}