Usage in FederatatedUser

This commit is contained in:
zam 2025-03-11 14:10:34 +01:00
parent 54ec6daa2d
commit 91e19646d0
3 changed files with 43 additions and 12 deletions

View file

@ -4,21 +4,28 @@
package user package user
import ( import (
"context"
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/modules/validation" "code.gitea.io/gitea/modules/validation"
) )
type FederatedUser struct { type FederatedUser struct {
ID int64 `xorm:"pk autoincr"` ID int64 `xorm:"pk autoincr"`
UserID int64 `xorm:"NOT NULL"` UserID int64 `xorm:"NOT NULL"`
ExternalID string `xorm:"UNIQUE(federation_user_mapping) NOT NULL"` ExternalID string `xorm:"UNIQUE(federation_user_mapping) NOT NULL"`
FederationHostID int64 `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{ result := FederatedUser{
UserID: userID, UserID: userID,
ExternalID: externalID, ExternalID: externalID,
FederationHostID: federationHostID, FederationHostID: federationHostID,
NormalizedFederatedURI: normalizedFederatedURI,
} }
if valid, err := validation.IsValid(result); !valid { if valid, err := validation.IsValid(result); !valid {
return FederatedUser{}, err return FederatedUser{}, err
@ -33,3 +40,27 @@ func (user FederatedUser) Validate() []string {
result = append(result, validation.ValidateNotEmpty(user.FederationHostID, "FederationHostID")...) result = append(result, validation.ValidateNotEmpty(user.FederationHostID, "FederationHostID")...)
return result 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
}

View file

@ -136,7 +136,7 @@ type User struct {
UseCustomAvatar bool UseCustomAvatar bool
// For federation // For federation
NormalizedFederatedURI string //NormalizedFederatedURI string
// Counters // Counters
NumFollowers int NumFollowers int

View file

@ -207,11 +207,11 @@ func CreateUserFromAP(ctx context.Context, personID fm.PersonID, federationHostI
LoginName: loginName, LoginName: loginName,
Type: user.UserTypeRemoteUser, Type: user.UserTypeRemoteUser,
IsAdmin: false, IsAdmin: false,
NormalizedFederatedURI: personID.AsURI(),
} }
federatedUser := user.FederatedUser{ federatedUser := user.FederatedUser{
ExternalID: personID.ID, ExternalID: personID.ID,
FederationHostID: federationHostID, FederationHostID: federationHostID,
NormalizedFederatedURI: personID.AsURI(),
} }
err = user.CreateFederatedUser(ctx, &newUser, &federatedUser) err = user.CreateFederatedUser(ctx, &newUser, &federatedUser)
if err != nil { if err != nil {