From 91e19646d0592df42c5b0113144de396c0fd4fb3 Mon Sep 17 00:00:00 2001 From: zam Date: Tue, 11 Mar 2025 14:10:34 +0100 Subject: [PATCH] Usage in FederatatedUser --- models/user/federated_user.go | 47 +++++++++++++++++++---- models/user/user.go | 2 +- services/federation/federation_service.go | 6 +-- 3 files changed, 43 insertions(+), 12 deletions(-) diff --git a/models/user/federated_user.go b/models/user/federated_user.go index 1fc42c3c32..7b0d57b373 100644 --- a/models/user/federated_user.go +++ b/models/user/federated_user.go @@ -4,21 +4,28 @@ package user import ( + "context" + + "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/modules/validation" ) type FederatedUser struct { - ID int64 `xorm:"pk autoincr"` - UserID int64 `xorm:"NOT NULL"` - ExternalID string `xorm:"UNIQUE(federation_user_mapping) NOT NULL"` - FederationHostID int64 `xorm:"UNIQUE(federation_user_mapping) NOT NULL"` + ID int64 `xorm:"pk autoincr"` + UserID int64 `xorm:"NOT NULL"` + ExternalID string `xorm:"UNIQUE(federation_user_mapping) NOT NULL"` + FederationHostID int64 `xorm:"UNIQUE(federation_user_mapping) NOT NULL"` + InboxURL *string + ActorURL *string + NormalizedFederatedURI string } -func NewFederatedUser(userID int64, externalID string, federationHostID int64) (FederatedUser, error) { +func NewFederatedUser(userID int64, externalID string, federationHostID int64, normalizedFederatedURI string) (FederatedUser, error) { result := FederatedUser{ - UserID: userID, - ExternalID: externalID, - FederationHostID: federationHostID, + UserID: userID, + ExternalID: externalID, + FederationHostID: federationHostID, + NormalizedFederatedURI: normalizedFederatedURI, } if valid, err := validation.IsValid(result); !valid { return FederatedUser{}, err @@ -33,3 +40,27 @@ func (user FederatedUser) Validate() []string { result = append(result, validation.ValidateNotEmpty(user.FederationHostID, "FederationHostID")...) return result } + +func (user *FederatedUser) SetInboxURL(ctx context.Context, url *string) error { + user.InboxURL = url + _, err := db.GetEngine(ctx).ID(user.ID).Cols("inbox_url").Update(user) + return err +} + +func GetFederatedUserByID(ctx context.Context, id int64) (*FederatedUser, error) { + var user FederatedUser + _, err := db.GetEngine(ctx).Where("id = ?", id).Get(&user) + if err != nil { + return nil, err + } + return &user, nil +} + +func GetUserByActorURL(ctx context.Context, actorURL string) (*User, error) { + var user User + _, err := db.GetEngine(ctx).Table("`user`").Join("INNER", "`federated_user`", "`user`.id = `federated_user`.user_id").Where("`federated_user`.actor_url = ?", actorURL).Get(&user) + if err != nil { + return nil, err + } + return &user, nil +} diff --git a/models/user/user.go b/models/user/user.go index 37dd69f42d..5044b6924e 100644 --- a/models/user/user.go +++ b/models/user/user.go @@ -136,7 +136,7 @@ type User struct { UseCustomAvatar bool // For federation - NormalizedFederatedURI string + //NormalizedFederatedURI string // Counters NumFollowers int diff --git a/services/federation/federation_service.go b/services/federation/federation_service.go index 4c6f5ca0ca..46b6a7ccfb 100644 --- a/services/federation/federation_service.go +++ b/services/federation/federation_service.go @@ -207,11 +207,11 @@ func CreateUserFromAP(ctx context.Context, personID fm.PersonID, federationHostI LoginName: loginName, Type: user.UserTypeRemoteUser, IsAdmin: false, - NormalizedFederatedURI: personID.AsURI(), } federatedUser := user.FederatedUser{ - ExternalID: personID.ID, - FederationHostID: federationHostID, + ExternalID: personID.ID, + FederationHostID: federationHostID, + NormalizedFederatedURI: personID.AsURI(), } err = user.CreateFederatedUser(ctx, &newUser, &federatedUser) if err != nil {