chore(federation): re-enable nilnil lint (#11253)

First round of patches to re-enable some lints from my side.

This PR also refactors the general key fetching code quite a bit due to the way it currently worked
with relying on some values being nil sometimes.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/11253
Reviewed-by: elle <0xllx0@noreply.codeberg.org>
Reviewed-by: Gusted <gusted@noreply.codeberg.org>
Co-authored-by: famfo <famfo@famfo.xyz>
Co-committed-by: famfo <famfo@famfo.xyz>
This commit is contained in:
famfo 2026-04-13 22:05:29 +02:00 committed by Gusted
commit 5f432e32c8
16 changed files with 269 additions and 283 deletions

22
models/forgefed/error.go Normal file
View file

@ -0,0 +1,22 @@
// Copyright 2026 The Forgejo Authors. All rights reserved.
// SPDX-License-Identifier: GPL-3.0-or-later
package forgefed
import (
"fmt"
)
type ErrFederationHostNotFound struct {
SearchKey string
SearchValue string
}
func (err ErrFederationHostNotFound) Error() string {
return fmt.Sprintf("ErrFederationHostNotFound: search key: %s, search value: %s", err.SearchKey, err.SearchValue)
}
func IsErrFederationHostNotFound(err error) bool {
_, ok := err.(ErrFederationHostNotFound)
return ok
}

View file

@ -57,13 +57,13 @@ func GetFederationHost(ctx context.Context, ID int64) (*FederationHost, error) {
return host, nil
}
func findFederationHostFromDB(ctx context.Context, searchKey, searchValue string) (*FederationHost, error) {
func findFederationHostFromDB(ctx context.Context, searchKey string, searchValue ...any) (*FederationHost, error) {
host := new(FederationHost)
has, err := db.GetEngine(ctx).Where(searchKey, searchValue).Get(host)
has, err := db.GetEngine(ctx).Where(searchKey, searchValue...).Get(host)
if err != nil {
return nil, err
} else if !has {
return nil, nil
return nil, ErrFederationHostNotFound{SearchKey: searchKey, SearchValue: fmt.Sprintf("%v", searchValue)}
}
if res, err := validation.IsValid(host); !res {
return nil, err
@ -72,17 +72,7 @@ func findFederationHostFromDB(ctx context.Context, searchKey, searchValue string
}
func FindFederationHostByFqdnAndPort(ctx context.Context, fqdn string, port uint16) (*FederationHost, error) {
host := new(FederationHost)
has, err := db.GetEngine(ctx).Where("host_fqdn=? AND host_port=?", fqdn, port).Get(host)
if err != nil {
return nil, err
} else if !has {
return nil, nil
}
if res, err := validation.IsValid(host); !res {
return nil, err
}
return host, nil
return findFederationHostFromDB(ctx, "host_fqdn=? AND host_port=?", fqdn, port)
}
func FindFederationHostByKeyID(ctx context.Context, keyID string) (*FederationHost, error) {

View file

@ -105,3 +105,16 @@ func IsErrUserIsNotLocal(err error) bool {
_, ok := err.(ErrUserIsNotLocal)
return ok
}
type ErrFederatedUserNotExists struct {
Identifier string
}
func (err ErrFederatedUserNotExists) Error() string {
return fmt.Sprintf("No cached federated user found for identifier %s", err.Identifier)
}
func IsErrFederatedUserNotExists(err error) bool {
_, ok := err.(ErrFederatedUserNotExists)
return ok
}

View file

@ -65,7 +65,7 @@ func FindFederatedUser(ctx context.Context, externalID string, federationHostID
if err != nil {
return nil, nil, err
} else if !has {
return nil, nil, nil
return nil, nil, ErrFederatedUserNotExists{Identifier: externalID}
}
has, err = db.GetEngine(ctx).ID(federatedUser.UserID).Get(user)
if err != nil {
@ -134,16 +134,6 @@ func FindFederatedUsersByHostID(ctx context.Context, federationHostID int64, opt
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 {
return nil, nil, err
} else if federatedUser == nil {
return nil, nil, fmt.Errorf("FederatedUser not found (given externalId: %v, federationHostId: %v)", externalID, federationHostID)
}
return user, federatedUser, nil
}
func GetFederatedUserByUserID(ctx context.Context, userID int64) (*User, *FederatedUser, error) {
federatedUser := new(FederatedUser)
user := new(User)
@ -177,7 +167,7 @@ func FindFederatedUserByKeyID(ctx context.Context, keyID string) (*User, *Federa
if err != nil {
return nil, nil, err
} else if !has {
return nil, nil, nil
return nil, nil, ErrFederatedUserNotExists{Identifier: keyID}
}
has, err = db.GetEngine(ctx).ID(federatedUser.UserID).Get(user)
if err != nil {