1. use slices.Contains, remove Int64sContains 2. use HashEmail, remove base.EncodeMD5 3. remove BasicAuthEncode, IsLettertags/v1.22.0-rc0
@@ -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 |
@@ -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 | |||
} | |||
@@ -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 | |||
} | |||
@@ -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 |
@@ -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 { |
@@ -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) { |
@@ -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 = "" | |||
} |