feat: add admin views for federation configuration, hosts and users (#11115)

Fixes #9282

Adds a new admin panel category for federation related administration.

Includes views for:
- Instance Federation Configuration
- List of Federation Hosts
- (Per-Instance) List of Federated Users

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11115
Reviewed-by: elle <0xllx0@noreply.codeberg.org>
Reviewed-by: Panagiotis "Ivory" Vasilopoulos <git@n0toose.net>
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: Florian Pallas <mail@fpallas.com>
Co-committed-by: Florian Pallas <mail@fpallas.com>
This commit is contained in:
Florian Pallas 2026-04-09 19:38:33 +02:00 committed by Gusted
commit 4e6a782a89
21 changed files with 973 additions and 12 deletions

View file

@ -83,6 +83,57 @@ func FindFederatedUser(ctx context.Context, externalID string, federationHostID
return user, federatedUser, nil
}
func CountFederatedUsers(ctx context.Context) (int64, error) {
return db.GetEngine(ctx).Count(FederatedUser{})
}
func FindFederatedUsers(ctx context.Context, opts db.ListOptions) (users []*FederatedUser, err error) {
sess := db.GetEngine(ctx)
if opts.PageSize > 0 {
sess = db.SetSessionPagination(sess, &opts)
}
err = sess.Find(&users)
if err != nil {
return nil, err
}
for _, user := range users {
if res, err := validation.IsValid(user); !res {
return nil, err
}
}
return users, err
}
func CountFederatedUsersByHostID(ctx context.Context, federationHostID int64) (int64, error) {
return db.GetEngine(ctx).Where("federation_host_id = ?", federationHostID).Count(FederatedUser{})
}
func FindFederatedUsersByHostID(ctx context.Context, federationHostID int64, opts db.ListOptions) ([]*FederatedUser, error) {
var users []*FederatedUser
sess := db.GetEngine(ctx).Where("federation_host_id = ?", federationHostID)
if opts.PageSize > 0 {
sess = db.SetSessionPagination(sess, &opts)
}
err := sess.Find(&users)
if err != nil {
return nil, err
}
for _, user := range users {
if res, err := validation.IsValid(user); !res {
return nil, err
}
}
return users, nil
}
func GetFederatedUser(ctx context.Context, externalID string, federationHostID int64) (*User, *FederatedUser, error) {
user, federatedUser, err := FindFederatedUser(ctx, externalID, federationHostID)
if err != nil {