diff --git a/models/avatars/avatar.go b/models/avatars/avatar.go index c197a22dc1ae..bbe16483bf7f 100644 --- a/models/avatars/avatar.go +++ b/models/avatars/avatar.go @@ -5,6 +5,8 @@ package avatars import ( "context" + "crypto/md5" + "encoding/hex" "fmt" "net/url" "path" @@ -13,7 +15,6 @@ import ( "sync/atomic" "code.gitea.io/gitea/models/db" - "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/cache" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" @@ -90,7 +91,9 @@ func DefaultAvatarLink() string { // HashEmail hashes email address to MD5 string. https://en.gravatar.com/site/implement/hash/ func HashEmail(email string) string { - return base.EncodeMD5(strings.ToLower(strings.TrimSpace(email))) + m := md5.New() + _, _ = m.Write([]byte(strings.ToLower(strings.TrimSpace(email)))) + return hex.EncodeToString(m.Sum(nil)) } // GetEmailForHash converts a provided md5sum to the email diff --git a/models/git/protected_branch.go b/models/git/protected_branch.go index 528acc175a27..66a4b52b1790 100644 --- a/models/git/protected_branch.go +++ b/models/git/protected_branch.go @@ -17,7 +17,6 @@ import ( repo_model "code.gitea.io/gitea/models/repo" "code.gitea.io/gitea/models/unit" user_model "code.gitea.io/gitea/models/user" - "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/timeutil" "code.gitea.io/gitea/modules/util" @@ -127,7 +126,7 @@ func (protectBranch *ProtectedBranch) CanUserPush(ctx context.Context, user *use return writeAccess } - if base.Int64sContains(protectBranch.WhitelistUserIDs, user.ID) { + if slices.Contains(protectBranch.WhitelistUserIDs, user.ID) { return true } @@ -150,7 +149,7 @@ func IsUserMergeWhitelisted(ctx context.Context, protectBranch *ProtectedBranch, return permissionInRepo.CanWrite(unit.TypeCode) } - if base.Int64sContains(protectBranch.MergeWhitelistUserIDs, userID) { + if slices.Contains(protectBranch.MergeWhitelistUserIDs, userID) { return true } @@ -182,7 +181,7 @@ func IsUserOfficialReviewer(ctx context.Context, protectBranch *ProtectedBranch, return writeAccess, nil } - if base.Int64sContains(protectBranch.ApprovalsWhitelistUserIDs, user.ID) { + if slices.Contains(protectBranch.ApprovalsWhitelistUserIDs, user.ID) { return true, nil } diff --git a/models/git/protected_tag.go b/models/git/protected_tag.go index 12e53a3331e9..8a0504565125 100644 --- a/models/git/protected_tag.go +++ b/models/git/protected_tag.go @@ -6,11 +6,11 @@ package git import ( "context" "regexp" + "slices" "strings" "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/models/organization" - "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/timeutil" "github.com/gobwas/glob" @@ -76,7 +76,7 @@ func DeleteProtectedTag(ctx context.Context, pt *ProtectedTag) error { // IsUserAllowedModifyTag returns true if the user is allowed to modify the tag func IsUserAllowedModifyTag(ctx context.Context, pt *ProtectedTag, userID int64) (bool, error) { - if base.Int64sContains(pt.AllowlistUserIDs, userID) { + if slices.Contains(pt.AllowlistUserIDs, userID) { return true, nil } diff --git a/models/issues/review.go b/models/issues/review.go index e06670c9a10a..4cbfa4f44357 100644 --- a/models/issues/review.go +++ b/models/issues/review.go @@ -6,6 +6,7 @@ package issues import ( "context" "fmt" + "slices" "strings" "code.gitea.io/gitea/models/db" @@ -15,7 +16,6 @@ import ( access_model "code.gitea.io/gitea/models/perm/access" "code.gitea.io/gitea/models/unit" user_model "code.gitea.io/gitea/models/user" - "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/timeutil" "code.gitea.io/gitea/modules/util" @@ -279,7 +279,7 @@ func IsOfficialReviewerTeam(ctx context.Context, issue *Issue, team *organizatio return team.UnitAccessMode(ctx, unit.TypeCode) >= perm.AccessModeWrite, nil } - return base.Int64sContains(pb.ApprovalsWhitelistTeamIDs, team.ID), nil + return slices.Contains(pb.ApprovalsWhitelistTeamIDs, team.ID), nil } // CreateReview creates a new review based on opts diff --git a/modules/base/tool.go b/modules/base/tool.go index 71dcb83fb485..e9f4dfa27947 100644 --- a/modules/base/tool.go +++ b/modules/base/tool.go @@ -4,7 +4,6 @@ package base import ( - "crypto/md5" "crypto/sha1" "encoding/base64" "encoding/hex" @@ -16,7 +15,6 @@ import ( "strconv" "strings" "time" - "unicode" "unicode/utf8" "code.gitea.io/gitea/modules/git" @@ -27,13 +25,6 @@ import ( "github.com/minio/sha256-simd" ) -// EncodeMD5 encodes string to md5 hex value. -func EncodeMD5(str string) string { - m := md5.New() - _, _ = m.Write([]byte(str)) - return hex.EncodeToString(m.Sum(nil)) -} - // EncodeSha1 string to sha1 hex value. func EncodeSha1(str string) string { h := sha1.New() @@ -70,11 +61,6 @@ func BasicAuthDecode(encoded string) (string, string, error) { return auth[0], auth[1], nil } -// BasicAuthEncode encode basic auth string -func BasicAuthEncode(username, password string) string { - return base64.StdEncoding.EncodeToString([]byte(username + ":" + password)) -} - // VerifyTimeLimitCode verify time limit code func VerifyTimeLimitCode(data string, minutes int, code string) bool { if len(code) <= 18 { @@ -184,22 +170,6 @@ func Int64sToStrings(ints []int64) []string { return strs } -// Int64sContains returns if a int64 in a slice of int64 -func Int64sContains(intsSlice []int64, a int64) bool { - for _, c := range intsSlice { - if c == a { - return true - } - } - return false -} - -// IsLetter reports whether the rune is a letter (category L). -// https://github.com/golang/go/blob/c3b4918/src/go/scanner/scanner.go#L342 -func IsLetter(ch rune) bool { - return 'a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z' || ch == '_' || ch >= 0x80 && unicode.IsLetter(ch) -} - // EntryIcon returns the octicon class for displaying files/directories func EntryIcon(entry *git.TreeEntry) string { switch { diff --git a/modules/base/tool_test.go b/modules/base/tool_test.go index 0c3e76704ea7..d28deb593d41 100644 --- a/modules/base/tool_test.go +++ b/modules/base/tool_test.go @@ -11,13 +11,6 @@ import ( "github.com/stretchr/testify/assert" ) -func TestEncodeMD5(t *testing.T) { - assert.Equal(t, - "3858f62230ac3c915f300c664312c63f", - EncodeMD5("foobar"), - ) -} - func TestEncodeSha1(t *testing.T) { assert.Equal(t, "8843d7f92416211de9ebb963ff4ce28125932878", @@ -52,11 +45,6 @@ func TestBasicAuthDecode(t *testing.T) { assert.Error(t, err) } -func TestBasicAuthEncode(t *testing.T) { - assert.Equal(t, "Zm9vOmJhcg==", BasicAuthEncode("foo", "bar")) - assert.Equal(t, "MjM6IjotLS0t", BasicAuthEncode("23:\"", "----")) -} - func TestVerifyTimeLimitCode(t *testing.T) { tc := []struct { data string @@ -167,29 +155,6 @@ func TestInt64sToStrings(t *testing.T) { ) } -func TestInt64sContains(t *testing.T) { - assert.True(t, Int64sContains([]int64{6, 44324, 4324, 32, 1, 2323}, 1)) - assert.True(t, Int64sContains([]int64{2323}, 2323)) - assert.False(t, Int64sContains([]int64{6, 44324, 4324, 32, 1, 2323}, 232)) -} - -func TestIsLetter(t *testing.T) { - assert.True(t, IsLetter('a')) - assert.True(t, IsLetter('e')) - assert.True(t, IsLetter('q')) - assert.True(t, IsLetter('z')) - assert.True(t, IsLetter('A')) - assert.True(t, IsLetter('E')) - assert.True(t, IsLetter('Q')) - assert.True(t, IsLetter('Z')) - assert.True(t, IsLetter('_')) - assert.False(t, IsLetter('-')) - assert.False(t, IsLetter('1')) - assert.False(t, IsLetter('$')) - assert.False(t, IsLetter(0x00)) - assert.False(t, IsLetter(0x93)) -} - // TODO: Test EntryIcon func TestSetupGiteaRoot(t *testing.T) { diff --git a/routers/web/user/setting/profile.go b/routers/web/user/setting/profile.go index d8331fef43f5..00614565d203 100644 --- a/routers/web/user/setting/profile.go +++ b/routers/web/user/setting/profile.go @@ -14,6 +14,7 @@ import ( "path/filepath" "strings" + "code.gitea.io/gitea/models/avatars" "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/models/organization" repo_model "code.gitea.io/gitea/models/repo" @@ -130,7 +131,7 @@ func UpdateAvatarSetting(ctx *context.Context, form *forms.AvatarForm, ctxUser * ctxUser.UseCustomAvatar = form.Source == forms.AvatarLocal if len(form.Gravatar) > 0 { if form.Avatar != nil { - ctxUser.Avatar = base.EncodeMD5(form.Gravatar) + ctxUser.Avatar = avatars.HashEmail(form.Gravatar) } else { ctxUser.Avatar = "" }