From cc966ff9a0e42a6c3475afe83b85699ac9fdc2d3 Mon Sep 17 00:00:00 2001 From: Gusted Date: Sun, 26 Jun 2022 14:52:04 +0200 Subject: [PATCH 1/4] Add username check to doctor - Add a new breaking change detector to Gitea's doctor, which checks if all users still have a valid username according to Gitea. Given from time-to-time we need to make changes, either due to new routes or due to security, it's for a instance's admin to check if all users still have a valid username. --- modules/doctor/breaking.go | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/modules/doctor/breaking.go b/modules/doctor/breaking.go index c4b58d20fb26d..cd82e36b4ea51 100644 --- a/modules/doctor/breaking.go +++ b/modules/doctor/breaking.go @@ -58,6 +58,29 @@ func checkUserEmail(ctx context.Context, logger log.Logger, _ bool) error { return nil } +// From time to time Gitea makes changes to the reserved usernames and which symbols +// are allowed for various reasons. This check helps with detecting users that are according +// to Gitea don't have a valid username. +func checkUserName(ctx context.Context, logger log.Logger, _ bool) error { + var invalidUserCount int64 + if err := iterateUserAccounts(ctx, func(u *user.User) error { + if err := user.IsUsableUsername(u.Name); err != nil { + invalidUserCount++ + logger.Warn("User[id=%d] have not a valid username: %v", u.ID, u.Name, err) + } + return nil + }); err != nil { + return fmt.Errorf("iterateUserAccounts: %v", err) + } + + if invalidUserCount == 0 { + logger.Info("All users have a valid username.") + } else { + logger.Warn("%d user(s) have a non-valid username.", invalidUserCount) + } + return nil +} + func init() { Register(&Check{ Title: "Check if users has an valid email address", @@ -66,4 +89,11 @@ func init() { Run: checkUserEmail, Priority: 9, }) + Register(&Check{ + Title: "Check if users has an valid username", + Name: "check-user-name", + IsDefault: false, + Run: checkUserName, + Priority: 9, + }) } From 2c380e44abc92bc07719a60286039e933382024c Mon Sep 17 00:00:00 2001 From: Gusted Date: Sun, 26 Jun 2022 14:59:13 +0200 Subject: [PATCH 2/4] Fix extra argument --- modules/doctor/breaking.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/doctor/breaking.go b/modules/doctor/breaking.go index cd82e36b4ea51..2811bc46f9ae2 100644 --- a/modules/doctor/breaking.go +++ b/modules/doctor/breaking.go @@ -66,7 +66,7 @@ func checkUserName(ctx context.Context, logger log.Logger, _ bool) error { if err := iterateUserAccounts(ctx, func(u *user.User) error { if err := user.IsUsableUsername(u.Name); err != nil { invalidUserCount++ - logger.Warn("User[id=%d] have not a valid username: %v", u.ID, u.Name, err) + logger.Warn("User[id=%d] have not a valid username: %v", u.ID, err) } return nil }); err != nil { From 03d06f8b3668fa06ba2026157be4f0546b8e91b6 Mon Sep 17 00:00:00 2001 From: Gusted Date: Sun, 26 Jun 2022 14:03:17 +0000 Subject: [PATCH 3/4] Apply suggestions from code review Co-authored-by: Jimmy Praet --- modules/doctor/breaking.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/doctor/breaking.go b/modules/doctor/breaking.go index 2811bc46f9ae2..319ea96142d7e 100644 --- a/modules/doctor/breaking.go +++ b/modules/doctor/breaking.go @@ -66,7 +66,7 @@ func checkUserName(ctx context.Context, logger log.Logger, _ bool) error { if err := iterateUserAccounts(ctx, func(u *user.User) error { if err := user.IsUsableUsername(u.Name); err != nil { invalidUserCount++ - logger.Warn("User[id=%d] have not a valid username: %v", u.ID, err) + logger.Warn("User[id=%d] does not have a valid username: %v", u.ID, err) } return nil }); err != nil { @@ -90,7 +90,7 @@ func init() { Priority: 9, }) Register(&Check{ - Title: "Check if users has an valid username", + Title: "Check if users have a valid username", Name: "check-user-name", IsDefault: false, Run: checkUserName, From b37187f7806d42273e36dd28fd165236f48c2011 Mon Sep 17 00:00:00 2001 From: techknowlogick Date: Mon, 27 Jun 2022 17:31:38 -0400 Subject: [PATCH 4/4] Apply suggestions from code review Co-authored-by: delvh --- modules/doctor/breaking.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/doctor/breaking.go b/modules/doctor/breaking.go index 319ea96142d7e..3e01d97d7c731 100644 --- a/modules/doctor/breaking.go +++ b/modules/doctor/breaking.go @@ -59,8 +59,8 @@ func checkUserEmail(ctx context.Context, logger log.Logger, _ bool) error { } // From time to time Gitea makes changes to the reserved usernames and which symbols -// are allowed for various reasons. This check helps with detecting users that are according -// to Gitea don't have a valid username. +// are allowed for various reasons. This check helps with detecting users that, according +// to our reserved names, don't have a valid username. func checkUserName(ctx context.Context, logger log.Logger, _ bool) error { var invalidUserCount int64 if err := iterateUserAccounts(ctx, func(u *user.User) error { @@ -91,7 +91,7 @@ func init() { }) Register(&Check{ Title: "Check if users have a valid username", - Name: "check-user-name", + Name: "check-user-names", IsDefault: false, Run: checkUserName, Priority: 9,