Compare commits

..

No commits in common. "3f318a4bad432b206386ba31399f84341913caf4" and "aa1d95300ab1b34a3b4c9f5902ea821f2aa99f6e" have entirely different histories.

154 changed files with 539 additions and 701 deletions

View File

@ -6,6 +6,7 @@ Kim Carlbäcker <kim.carlbacker@gmail.com> (@bkcsoft)
LefsFlare <nobody@nobody.tld> (@LefsFlarey) LefsFlare <nobody@nobody.tld> (@LefsFlarey)
Lunny Xiao <xiaolunwen@gmail.com> (@lunny) Lunny Xiao <xiaolunwen@gmail.com> (@lunny)
Matthias Loibl <mail@matthiasloibl.com> (@metalmatze) Matthias Loibl <mail@matthiasloibl.com> (@metalmatze)
Morgan Bazalgette <the@howl.moe> (@thehowl)
Rachid Zarouali <nobody@nobody.tld> (@xinity) Rachid Zarouali <nobody@nobody.tld> (@xinity)
Rémy Boulanouar <admin@dblk.org> (@DblK) Rémy Boulanouar <admin@dblk.org> (@DblK)
Sandro Santilli <strk@kbt.io> (@strk) Sandro Santilli <strk@kbt.io> (@strk)

View File

@ -57,7 +57,7 @@ func runDeleteUser(c *cli.Context) error {
var err error var err error
var user *user_model.User var user *user_model.User
if c.IsSet("email") { if c.IsSet("email") {
user, err = user_model.GetUserByEmail(ctx, c.String("email")) user, err = user_model.GetUserByEmail(c.String("email"))
} else if c.IsSet("username") { } else if c.IsSet("username") {
user, err = user_model.GetUserByName(ctx, c.String("username")) user, err = user_model.GetUserByName(ctx, c.String("username"))
} else { } else {

View File

@ -97,12 +97,12 @@ func GetActivityStatsTopAuthors(ctx context.Context, repo *repo_model.Repository
} }
users := make(map[int64]*ActivityAuthorData) users := make(map[int64]*ActivityAuthorData)
var unknownUserID int64 var unknownUserID int64
unknownUserAvatarLink := user_model.NewGhostUser().AvatarLink(ctx) unknownUserAvatarLink := user_model.NewGhostUser().AvatarLink()
for _, v := range code.Authors { for _, v := range code.Authors {
if len(v.Email) == 0 { if len(v.Email) == 0 {
continue continue
} }
u, err := user_model.GetUserByEmail(ctx, v.Email) u, err := user_model.GetUserByEmail(v.Email)
if u == nil || user_model.IsErrUserNotExist(err) { if u == nil || user_model.IsErrUserNotExist(err) {
unknownUserID-- unknownUserID--
users[unknownUserID] = &ActivityAuthorData{ users[unknownUserID] = &ActivityAuthorData{
@ -119,7 +119,7 @@ func GetActivityStatsTopAuthors(ctx context.Context, repo *repo_model.Repository
users[u.ID] = &ActivityAuthorData{ users[u.ID] = &ActivityAuthorData{
Name: u.DisplayName(), Name: u.DisplayName(),
Login: u.LowerName, Login: u.LowerName,
AvatarLink: u.AvatarLink(ctx), AvatarLink: u.AvatarLink(),
HomeLink: u.HomeLink(), HomeLink: u.HomeLink(),
Commits: v.Commits, Commits: v.Commits,
} }

View File

@ -4,7 +4,6 @@
package asymkey package asymkey
import ( import (
"context"
"fmt" "fmt"
"hash" "hash"
"strings" "strings"
@ -71,14 +70,14 @@ const (
) )
// ParseCommitsWithSignature checks if signaute of commits are corresponding to users gpg keys. // ParseCommitsWithSignature checks if signaute of commits are corresponding to users gpg keys.
func ParseCommitsWithSignature(ctx context.Context, oldCommits []*user_model.UserCommit, repoTrustModel repo_model.TrustModelType, isOwnerMemberCollaborator func(*user_model.User) (bool, error)) []*SignCommit { func ParseCommitsWithSignature(oldCommits []*user_model.UserCommit, repoTrustModel repo_model.TrustModelType, isOwnerMemberCollaborator func(*user_model.User) (bool, error)) []*SignCommit {
newCommits := make([]*SignCommit, 0, len(oldCommits)) newCommits := make([]*SignCommit, 0, len(oldCommits))
keyMap := map[string]bool{} keyMap := map[string]bool{}
for _, c := range oldCommits { for _, c := range oldCommits {
signCommit := &SignCommit{ signCommit := &SignCommit{
UserCommit: c, UserCommit: c,
Verification: ParseCommitWithSignature(ctx, c.Commit), Verification: ParseCommitWithSignature(c.Commit),
} }
_ = CalculateTrustStatus(signCommit.Verification, repoTrustModel, isOwnerMemberCollaborator, &keyMap) _ = CalculateTrustStatus(signCommit.Verification, repoTrustModel, isOwnerMemberCollaborator, &keyMap)
@ -89,12 +88,12 @@ func ParseCommitsWithSignature(ctx context.Context, oldCommits []*user_model.Use
} }
// ParseCommitWithSignature check if signature is good against keystore. // ParseCommitWithSignature check if signature is good against keystore.
func ParseCommitWithSignature(ctx context.Context, c *git.Commit) *CommitVerification { func ParseCommitWithSignature(c *git.Commit) *CommitVerification {
var committer *user_model.User var committer *user_model.User
if c.Committer != nil { if c.Committer != nil {
var err error var err error
// Find Committer account // Find Committer account
committer, err = user_model.GetUserByEmail(ctx, c.Committer.Email) // This finds the user by primary email or activated email so commit will not be valid if email is not committer, err = user_model.GetUserByEmail(c.Committer.Email) // This finds the user by primary email or activated email so commit will not be valid if email is not
if err != nil { // Skipping not user for committer if err != nil { // Skipping not user for committer
committer = &user_model.User{ committer = &user_model.User{
Name: c.Committer.Name, Name: c.Committer.Name,

View File

@ -147,13 +147,13 @@ func generateRecognizedAvatarURL(u url.URL, size int) string {
// generateEmailAvatarLink returns a email avatar link. // generateEmailAvatarLink returns a email avatar link.
// if final is true, it may use a slow path (eg: query DNS). // if final is true, it may use a slow path (eg: query DNS).
// if final is false, it always uses a fast path. // if final is false, it always uses a fast path.
func generateEmailAvatarLink(ctx context.Context, email string, size int, final bool) string { func generateEmailAvatarLink(email string, size int, final bool) string {
email = strings.TrimSpace(email) email = strings.TrimSpace(email)
if email == "" { if email == "" {
return DefaultAvatarLink() return DefaultAvatarLink()
} }
enableFederatedAvatar := system_model.GetSettingBool(ctx, system_model.KeyPictureEnableFederatedAvatar) enableFederatedAvatar := system_model.GetSettingBool(system_model.KeyPictureEnableFederatedAvatar)
var err error var err error
if enableFederatedAvatar && system_model.LibravatarService != nil { if enableFederatedAvatar && system_model.LibravatarService != nil {
@ -174,7 +174,7 @@ func generateEmailAvatarLink(ctx context.Context, email string, size int, final
return urlStr return urlStr
} }
disableGravatar := system_model.GetSettingBool(ctx, system_model.KeyPictureDisableGravatar) disableGravatar := system_model.GetSettingBool(system_model.KeyPictureDisableGravatar)
if !disableGravatar { if !disableGravatar {
// copy GravatarSourceURL, because we will modify its Path. // copy GravatarSourceURL, because we will modify its Path.
avatarURLCopy := *system_model.GravatarSourceURL avatarURLCopy := *system_model.GravatarSourceURL
@ -186,11 +186,11 @@ func generateEmailAvatarLink(ctx context.Context, email string, size int, final
} }
// GenerateEmailAvatarFastLink returns a avatar link (fast, the link may be a delegated one: "/avatar/${hash}") // GenerateEmailAvatarFastLink returns a avatar link (fast, the link may be a delegated one: "/avatar/${hash}")
func GenerateEmailAvatarFastLink(ctx context.Context, email string, size int) string { func GenerateEmailAvatarFastLink(email string, size int) string {
return generateEmailAvatarLink(ctx, email, size, false) return generateEmailAvatarLink(email, size, false)
} }
// GenerateEmailAvatarFinalLink returns a avatar final link (maybe slow) // GenerateEmailAvatarFinalLink returns a avatar final link (maybe slow)
func GenerateEmailAvatarFinalLink(ctx context.Context, email string, size int) string { func GenerateEmailAvatarFinalLink(email string, size int) string {
return generateEmailAvatarLink(ctx, email, size, true) return generateEmailAvatarLink(email, size, true)
} }

View File

@ -7,7 +7,6 @@ import (
"testing" "testing"
avatars_model "code.gitea.io/gitea/models/avatars" avatars_model "code.gitea.io/gitea/models/avatars"
"code.gitea.io/gitea/models/db"
system_model "code.gitea.io/gitea/models/system" system_model "code.gitea.io/gitea/models/system"
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
@ -17,15 +16,15 @@ import (
const gravatarSource = "https://secure.gravatar.com/avatar/" const gravatarSource = "https://secure.gravatar.com/avatar/"
func disableGravatar(t *testing.T) { func disableGravatar(t *testing.T) {
err := system_model.SetSettingNoVersion(db.DefaultContext, system_model.KeyPictureEnableFederatedAvatar, "false") err := system_model.SetSettingNoVersion(system_model.KeyPictureEnableFederatedAvatar, "false")
assert.NoError(t, err) assert.NoError(t, err)
err = system_model.SetSettingNoVersion(db.DefaultContext, system_model.KeyPictureDisableGravatar, "true") err = system_model.SetSettingNoVersion(system_model.KeyPictureDisableGravatar, "true")
assert.NoError(t, err) assert.NoError(t, err)
system_model.LibravatarService = nil system_model.LibravatarService = nil
} }
func enableGravatar(t *testing.T) { func enableGravatar(t *testing.T) {
err := system_model.SetSettingNoVersion(db.DefaultContext, system_model.KeyPictureDisableGravatar, "false") err := system_model.SetSettingNoVersion(system_model.KeyPictureDisableGravatar, "false")
assert.NoError(t, err) assert.NoError(t, err)
setting.GravatarSource = gravatarSource setting.GravatarSource = gravatarSource
err = system_model.Init() err = system_model.Init()
@ -48,11 +47,11 @@ func TestSizedAvatarLink(t *testing.T) {
disableGravatar(t) disableGravatar(t)
assert.Equal(t, "/testsuburl/assets/img/avatar_default.png", assert.Equal(t, "/testsuburl/assets/img/avatar_default.png",
avatars_model.GenerateEmailAvatarFastLink(db.DefaultContext, "gitea@example.com", 100)) avatars_model.GenerateEmailAvatarFastLink("gitea@example.com", 100))
enableGravatar(t) enableGravatar(t)
assert.Equal(t, assert.Equal(t,
"https://secure.gravatar.com/avatar/353cbad9b58e69c96154ad99f92bedc7?d=identicon&s=100", "https://secure.gravatar.com/avatar/353cbad9b58e69c96154ad99f92bedc7?d=identicon&s=100",
avatars_model.GenerateEmailAvatarFastLink(db.DefaultContext, "gitea@example.com", 100), avatars_model.GenerateEmailAvatarFastLink("gitea@example.com", 100),
) )
} }

View File

@ -351,8 +351,7 @@ func hashCommitStatusContext(context string) string {
func ConvertFromGitCommit(ctx context.Context, commits []*git.Commit, repo *repo_model.Repository) []*SignCommitWithStatuses { func ConvertFromGitCommit(ctx context.Context, commits []*git.Commit, repo *repo_model.Repository) []*SignCommitWithStatuses {
return ParseCommitsWithStatus(ctx, return ParseCommitsWithStatus(ctx,
asymkey_model.ParseCommitsWithSignature( asymkey_model.ParseCommitsWithSignature(
ctx, user_model.ValidateCommitsWithEmails(commits),
user_model.ValidateCommitsWithEmails(ctx, commits),
repo.GetTrustModel(), repo.GetTrustModel(),
func(user *user_model.User) (bool, error) { func(user *user_model.User) (bool, error) {
return repo_model.IsOwnerMemberCollaborator(repo, user.ID) return repo_model.IsOwnerMemberCollaborator(repo, user.ID)

View File

@ -1244,8 +1244,3 @@ func FixCommentTypeLabelWithOutsideLabels(ctx context.Context) (int64, error) {
return res.RowsAffected() return res.RowsAffected()
} }
// HasOriginalAuthor returns if a comment was migrated and has an original author.
func (c *Comment) HasOriginalAuthor() bool {
return c.OriginalAuthor != "" && c.OriginalAuthorID != 0
}

View File

@ -2403,8 +2403,3 @@ func DeleteOrphanedIssues(ctx context.Context) error {
} }
return nil return nil
} }
// HasOriginalAuthor returns if an issue was migrated and has an original author.
func (issue *Issue) HasOriginalAuthor() bool {
return issue.OriginalAuthor != "" && issue.OriginalAuthorID != 0
}

View File

@ -156,8 +156,8 @@ func (org *Organization) hasMemberWithUserID(ctx context.Context, userID int64)
} }
// AvatarLink returns the full avatar link with http host // AvatarLink returns the full avatar link with http host
func (org *Organization) AvatarLink(ctx context.Context) string { func (org *Organization) AvatarLink() string {
return org.AsUser().AvatarLink(ctx) return org.AsUser().AvatarLink()
} }
// HTMLURL returns the organization's full link. // HTMLURL returns the organization's full link.

View File

@ -85,7 +85,12 @@ func (repo *Repository) relAvatarLink(ctx context.Context) string {
} }
// AvatarLink returns a link to the repository's avatar. // AvatarLink returns a link to the repository's avatar.
func (repo *Repository) AvatarLink(ctx context.Context) string { func (repo *Repository) AvatarLink() string {
return repo.avatarLink(db.DefaultContext)
}
// avatarLink returns user avatar absolute link.
func (repo *Repository) avatarLink(ctx context.Context) string {
link := repo.relAvatarLink(ctx) link := repo.relAvatarLink(ctx)
// we only prepend our AppURL to our known (relative, internal) avatar link to get an absolute URL // we only prepend our AppURL to our known (relative, internal) avatar link to get an absolute URL
if strings.HasPrefix(link, "/") && !strings.HasPrefix(link, "//") { if strings.HasPrefix(link, "/") && !strings.HasPrefix(link, "//") {

View File

@ -80,8 +80,8 @@ func IsErrDataExpired(err error) bool {
} }
// GetSettingNoCache returns specific setting without using the cache // GetSettingNoCache returns specific setting without using the cache
func GetSettingNoCache(ctx context.Context, key string) (*Setting, error) { func GetSettingNoCache(key string) (*Setting, error) {
v, err := GetSettings(ctx, []string{key}) v, err := GetSettings([]string{key})
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -91,31 +91,27 @@ func GetSettingNoCache(ctx context.Context, key string) (*Setting, error) {
return v[strings.ToLower(key)], nil return v[strings.ToLower(key)], nil
} }
const contextCacheKey = "system_setting"
// GetSetting returns the setting value via the key // GetSetting returns the setting value via the key
func GetSetting(ctx context.Context, key string) (string, error) { func GetSetting(key string) (string, error) {
return cache.GetWithContextCache(ctx, contextCacheKey, key, func() (string, error) {
return cache.GetString(genSettingCacheKey(key), func() (string, error) { return cache.GetString(genSettingCacheKey(key), func() (string, error) {
res, err := GetSettingNoCache(ctx, key) res, err := GetSettingNoCache(key)
if err != nil { if err != nil {
return "", err return "", err
} }
return res.SettingValue, nil return res.SettingValue, nil
}) })
})
} }
// GetSettingBool return bool value of setting, // GetSettingBool return bool value of setting,
// none existing keys and errors are ignored and result in false // none existing keys and errors are ignored and result in false
func GetSettingBool(ctx context.Context, key string) bool { func GetSettingBool(key string) bool {
s, _ := GetSetting(ctx, key) s, _ := GetSetting(key)
v, _ := strconv.ParseBool(s) v, _ := strconv.ParseBool(s)
return v return v
} }
// GetSettings returns specific settings // GetSettings returns specific settings
func GetSettings(ctx context.Context, keys []string) (map[string]*Setting, error) { func GetSettings(keys []string) (map[string]*Setting, error) {
for i := 0; i < len(keys); i++ { for i := 0; i < len(keys); i++ {
keys[i] = strings.ToLower(keys[i]) keys[i] = strings.ToLower(keys[i])
} }
@ -165,17 +161,16 @@ func GetAllSettings() (AllSettings, error) {
} }
// DeleteSetting deletes a specific setting for a user // DeleteSetting deletes a specific setting for a user
func DeleteSetting(ctx context.Context, setting *Setting) error { func DeleteSetting(setting *Setting) error {
cache.RemoveContextData(ctx, contextCacheKey, setting.SettingKey)
cache.Remove(genSettingCacheKey(setting.SettingKey)) cache.Remove(genSettingCacheKey(setting.SettingKey))
_, err := db.GetEngine(db.DefaultContext).Delete(setting) _, err := db.GetEngine(db.DefaultContext).Delete(setting)
return err return err
} }
func SetSettingNoVersion(ctx context.Context, key, value string) error { func SetSettingNoVersion(key, value string) error {
s, err := GetSettingNoCache(ctx, key) s, err := GetSettingNoCache(key)
if IsErrSettingIsNotExist(err) { if IsErrSettingIsNotExist(err) {
return SetSetting(ctx, &Setting{ return SetSetting(&Setting{
SettingKey: key, SettingKey: key,
SettingValue: value, SettingValue: value,
}) })
@ -184,11 +179,11 @@ func SetSettingNoVersion(ctx context.Context, key, value string) error {
return err return err
} }
s.SettingValue = value s.SettingValue = value
return SetSetting(ctx, s) return SetSetting(s)
} }
// SetSetting updates a users' setting for a specific key // SetSetting updates a users' setting for a specific key
func SetSetting(ctx context.Context, setting *Setting) error { func SetSetting(setting *Setting) error {
if err := upsertSettingValue(strings.ToLower(setting.SettingKey), setting.SettingValue, setting.Version); err != nil { if err := upsertSettingValue(strings.ToLower(setting.SettingKey), setting.SettingValue, setting.Version); err != nil {
return err return err
} }
@ -197,11 +192,9 @@ func SetSetting(ctx context.Context, setting *Setting) error {
cc := cache.GetCache() cc := cache.GetCache()
if cc != nil { if cc != nil {
if err := cc.Put(genSettingCacheKey(setting.SettingKey), setting.SettingValue, setting_module.CacheService.TTLSeconds()); err != nil { return cc.Put(genSettingCacheKey(setting.SettingKey), setting.SettingValue, setting_module.CacheService.TTLSeconds())
return err
} }
}
cache.SetContextData(ctx, contextCacheKey, setting.SettingKey, setting.SettingValue)
return nil return nil
} }
@ -251,7 +244,7 @@ var (
func Init() error { func Init() error {
var disableGravatar bool var disableGravatar bool
disableGravatarSetting, err := GetSettingNoCache(db.DefaultContext, KeyPictureDisableGravatar) disableGravatarSetting, err := GetSettingNoCache(KeyPictureDisableGravatar)
if IsErrSettingIsNotExist(err) { if IsErrSettingIsNotExist(err) {
disableGravatar = setting_module.GetDefaultDisableGravatar() disableGravatar = setting_module.GetDefaultDisableGravatar()
disableGravatarSetting = &Setting{SettingValue: strconv.FormatBool(disableGravatar)} disableGravatarSetting = &Setting{SettingValue: strconv.FormatBool(disableGravatar)}
@ -262,7 +255,7 @@ func Init() error {
} }
var enableFederatedAvatar bool var enableFederatedAvatar bool
enableFederatedAvatarSetting, err := GetSettingNoCache(db.DefaultContext, KeyPictureEnableFederatedAvatar) enableFederatedAvatarSetting, err := GetSettingNoCache(KeyPictureEnableFederatedAvatar)
if IsErrSettingIsNotExist(err) { if IsErrSettingIsNotExist(err) {
enableFederatedAvatar = setting_module.GetDefaultEnableFederatedAvatar(disableGravatar) enableFederatedAvatar = setting_module.GetDefaultEnableFederatedAvatar(disableGravatar)
enableFederatedAvatarSetting = &Setting{SettingValue: strconv.FormatBool(enableFederatedAvatar)} enableFederatedAvatarSetting = &Setting{SettingValue: strconv.FormatBool(enableFederatedAvatar)}
@ -275,13 +268,13 @@ func Init() error {
if setting_module.OfflineMode { if setting_module.OfflineMode {
disableGravatar = true disableGravatar = true
enableFederatedAvatar = false enableFederatedAvatar = false
if !GetSettingBool(db.DefaultContext, KeyPictureDisableGravatar) { if !GetSettingBool(KeyPictureDisableGravatar) {
if err := SetSettingNoVersion(db.DefaultContext, KeyPictureDisableGravatar, "true"); err != nil { if err := SetSettingNoVersion(KeyPictureDisableGravatar, "true"); err != nil {
return fmt.Errorf("Failed to set setting %q: %w", KeyPictureDisableGravatar, err) return fmt.Errorf("Failed to set setting %q: %w", KeyPictureDisableGravatar, err)
} }
} }
if GetSettingBool(db.DefaultContext, KeyPictureEnableFederatedAvatar) { if GetSettingBool(KeyPictureEnableFederatedAvatar) {
if err := SetSettingNoVersion(db.DefaultContext, KeyPictureEnableFederatedAvatar, "false"); err != nil { if err := SetSettingNoVersion(KeyPictureEnableFederatedAvatar, "false"); err != nil {
return fmt.Errorf("Failed to set setting %q: %w", KeyPictureEnableFederatedAvatar, err) return fmt.Errorf("Failed to set setting %q: %w", KeyPictureEnableFederatedAvatar, err)
} }
} }

View File

@ -7,7 +7,6 @@ import (
"strings" "strings"
"testing" "testing"
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/system" "code.gitea.io/gitea/models/system"
"code.gitea.io/gitea/models/unittest" "code.gitea.io/gitea/models/unittest"
@ -21,24 +20,24 @@ func TestSettings(t *testing.T) {
newSetting := &system.Setting{SettingKey: keyName, SettingValue: "50"} newSetting := &system.Setting{SettingKey: keyName, SettingValue: "50"}
// create setting // create setting
err := system.SetSetting(db.DefaultContext, newSetting) err := system.SetSetting(newSetting)
assert.NoError(t, err) assert.NoError(t, err)
// test about saving unchanged values // test about saving unchanged values
err = system.SetSetting(db.DefaultContext, newSetting) err = system.SetSetting(newSetting)
assert.NoError(t, err) assert.NoError(t, err)
// get specific setting // get specific setting
settings, err := system.GetSettings(db.DefaultContext, []string{keyName}) settings, err := system.GetSettings([]string{keyName})
assert.NoError(t, err) assert.NoError(t, err)
assert.Len(t, settings, 1) assert.Len(t, settings, 1)
assert.EqualValues(t, newSetting.SettingValue, settings[strings.ToLower(keyName)].SettingValue) assert.EqualValues(t, newSetting.SettingValue, settings[strings.ToLower(keyName)].SettingValue)
// updated setting // updated setting
updatedSetting := &system.Setting{SettingKey: keyName, SettingValue: "100", Version: settings[strings.ToLower(keyName)].Version} updatedSetting := &system.Setting{SettingKey: keyName, SettingValue: "100", Version: settings[strings.ToLower(keyName)].Version}
err = system.SetSetting(db.DefaultContext, updatedSetting) err = system.SetSetting(updatedSetting)
assert.NoError(t, err) assert.NoError(t, err)
value, err := system.GetSetting(db.DefaultContext, keyName) value, err := system.GetSetting(keyName)
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, updatedSetting.SettingValue, value) assert.EqualValues(t, updatedSetting.SettingValue, value)
@ -49,7 +48,7 @@ func TestSettings(t *testing.T) {
assert.EqualValues(t, updatedSetting.SettingValue, settings[strings.ToLower(updatedSetting.SettingKey)].SettingValue) assert.EqualValues(t, updatedSetting.SettingValue, settings[strings.ToLower(updatedSetting.SettingKey)].SettingValue)
// delete setting // delete setting
err = system.DeleteSetting(db.DefaultContext, &system.Setting{SettingKey: strings.ToLower(keyName)}) err = system.DeleteSetting(&system.Setting{SettingKey: strings.ToLower(keyName)})
assert.NoError(t, err) assert.NoError(t, err)
settings, err = system.GetAllSettings() settings, err = system.GetAllSettings()
assert.NoError(t, err) assert.NoError(t, err)

View File

@ -58,7 +58,7 @@ func GenerateRandomAvatar(ctx context.Context, u *User) error {
} }
// AvatarLinkWithSize returns a link to the user's avatar with size. size <= 0 means default size // AvatarLinkWithSize returns a link to the user's avatar with size. size <= 0 means default size
func (u *User) AvatarLinkWithSize(ctx context.Context, size int) string { func (u *User) AvatarLinkWithSize(size int) string {
if u.ID == -1 { if u.ID == -1 {
// ghost user // ghost user
return avatars.DefaultAvatarLink() return avatars.DefaultAvatarLink()
@ -67,7 +67,7 @@ func (u *User) AvatarLinkWithSize(ctx context.Context, size int) string {
useLocalAvatar := false useLocalAvatar := false
autoGenerateAvatar := false autoGenerateAvatar := false
disableGravatar := system_model.GetSettingBool(ctx, system_model.KeyPictureDisableGravatar) disableGravatar := system_model.GetSettingBool(system_model.KeyPictureDisableGravatar)
switch { switch {
case u.UseCustomAvatar: case u.UseCustomAvatar:
@ -79,7 +79,7 @@ func (u *User) AvatarLinkWithSize(ctx context.Context, size int) string {
if useLocalAvatar { if useLocalAvatar {
if u.Avatar == "" && autoGenerateAvatar { if u.Avatar == "" && autoGenerateAvatar {
if err := GenerateRandomAvatar(ctx, u); err != nil { if err := GenerateRandomAvatar(db.DefaultContext, u); err != nil {
log.Error("GenerateRandomAvatar: %v", err) log.Error("GenerateRandomAvatar: %v", err)
} }
} }
@ -88,12 +88,12 @@ func (u *User) AvatarLinkWithSize(ctx context.Context, size int) string {
} }
return avatars.GenerateUserAvatarImageLink(u.Avatar, size) return avatars.GenerateUserAvatarImageLink(u.Avatar, size)
} }
return avatars.GenerateEmailAvatarFastLink(ctx, u.AvatarEmail, size) return avatars.GenerateEmailAvatarFastLink(u.AvatarEmail, size)
} }
// AvatarLink returns the full avatar link with http host // AvatarLink returns the full avatar link with http host
func (u *User) AvatarLink(ctx context.Context) string { func (u *User) AvatarLink() string {
link := u.AvatarLinkWithSize(ctx, 0) link := u.AvatarLinkWithSize(0)
if !strings.HasPrefix(link, "//") && !strings.Contains(link, "://") { if !strings.HasPrefix(link, "//") && !strings.Contains(link, "://") {
return setting.AppURL + strings.TrimPrefix(link, setting.AppSubURL+"/") return setting.AppURL + strings.TrimPrefix(link, setting.AppSubURL+"/")
} }

View File

@ -1114,11 +1114,11 @@ type UserCommit struct { //revive:disable-line:exported
} }
// ValidateCommitWithEmail check if author's e-mail of commit is corresponding to a user. // ValidateCommitWithEmail check if author's e-mail of commit is corresponding to a user.
func ValidateCommitWithEmail(ctx context.Context, c *git.Commit) *User { func ValidateCommitWithEmail(c *git.Commit) *User {
if c.Author == nil { if c.Author == nil {
return nil return nil
} }
u, err := GetUserByEmail(ctx, c.Author.Email) u, err := GetUserByEmail(c.Author.Email)
if err != nil { if err != nil {
return nil return nil
} }
@ -1126,7 +1126,7 @@ func ValidateCommitWithEmail(ctx context.Context, c *git.Commit) *User {
} }
// ValidateCommitsWithEmails checks if authors' e-mails of commits are corresponding to users. // ValidateCommitsWithEmails checks if authors' e-mails of commits are corresponding to users.
func ValidateCommitsWithEmails(ctx context.Context, oldCommits []*git.Commit) []*UserCommit { func ValidateCommitsWithEmails(oldCommits []*git.Commit) []*UserCommit {
var ( var (
emails = make(map[string]*User) emails = make(map[string]*User)
newCommits = make([]*UserCommit, 0, len(oldCommits)) newCommits = make([]*UserCommit, 0, len(oldCommits))
@ -1135,7 +1135,7 @@ func ValidateCommitsWithEmails(ctx context.Context, oldCommits []*git.Commit) []
var u *User var u *User
if c.Author != nil { if c.Author != nil {
if v, ok := emails[c.Author.Email]; !ok { if v, ok := emails[c.Author.Email]; !ok {
u, _ = GetUserByEmail(ctx, c.Author.Email) u, _ = GetUserByEmail(c.Author.Email)
emails[c.Author.Email] = u emails[c.Author.Email] = u
} else { } else {
u = v u = v
@ -1151,7 +1151,12 @@ func ValidateCommitsWithEmails(ctx context.Context, oldCommits []*git.Commit) []
} }
// GetUserByEmail returns the user object by given e-mail if exists. // GetUserByEmail returns the user object by given e-mail if exists.
func GetUserByEmail(ctx context.Context, email string) (*User, error) { func GetUserByEmail(email string) (*User, error) {
return GetUserByEmailContext(db.DefaultContext, email)
}
// GetUserByEmailContext returns the user object by given e-mail if exists with db context
func GetUserByEmailContext(ctx context.Context, email string) (*User, error) {
if len(email) == 0 { if len(email) == 0 {
return nil, ErrUserNotExist{0, email, 0} return nil, ErrUserNotExist{0, email, 0}
} }

View File

@ -8,7 +8,6 @@ import (
"encoding/gob" "encoding/gob"
"code.gitea.io/gitea/models/auth" "code.gitea.io/gitea/models/auth"
"code.gitea.io/gitea/models/db"
user_model "code.gitea.io/gitea/models/user" user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
@ -63,7 +62,7 @@ func (u *User) WebAuthnDisplayName() string {
// WebAuthnIcon implements the webauthn.User interface // WebAuthnIcon implements the webauthn.User interface
func (u *User) WebAuthnIcon() string { func (u *User) WebAuthnIcon() string {
return (*user_model.User)(u).AvatarLink(db.DefaultContext) return (*user_model.User)(u).AvatarLink()
} }
// WebAuthnCredentials implementns the webauthn.User interface // WebAuthnCredentials implementns the webauthn.User interface

View File

@ -1,92 +0,0 @@
// Copyright 2022 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package cache
import (
"context"
"sync"
"code.gitea.io/gitea/modules/log"
)
// cacheContext is a context that can be used to cache data in a request level context
// This is useful for caching data that is expensive to calculate and is likely to be
// used multiple times in a request.
type cacheContext struct {
ctx context.Context
data map[any]map[any]any
lock sync.RWMutex
}
func (cc *cacheContext) Get(tp, key any) any {
cc.lock.RLock()
defer cc.lock.RUnlock()
if cc.data[tp] == nil {
return nil
}
return cc.data[tp][key]
}
func (cc *cacheContext) Put(tp, key, value any) {
cc.lock.Lock()
defer cc.lock.Unlock()
if cc.data[tp] == nil {
cc.data[tp] = make(map[any]any)
}
cc.data[tp][key] = value
}
func (cc *cacheContext) Delete(tp, key any) {
cc.lock.Lock()
defer cc.lock.Unlock()
if cc.data[tp] == nil {
return
}
delete(cc.data[tp], key)
}
var cacheContextKey = struct{}{}
func WithCacheContext(ctx context.Context) context.Context {
return context.WithValue(ctx, cacheContextKey, &cacheContext{
ctx: ctx,
data: make(map[any]map[any]any),
})
}
func GetContextData(ctx context.Context, tp, key any) any {
if c, ok := ctx.Value(cacheContextKey).(*cacheContext); ok {
return c.Get(tp, key)
}
log.Warn("cannot get cache context when getting data: %v", ctx)
return nil
}
func SetContextData(ctx context.Context, tp, key, value any) {
if c, ok := ctx.Value(cacheContextKey).(*cacheContext); ok {
c.Put(tp, key, value)
return
}
log.Warn("cannot get cache context when setting data: %v", ctx)
}
func RemoveContextData(ctx context.Context, tp, key any) {
if c, ok := ctx.Value(cacheContextKey).(*cacheContext); ok {
c.Delete(tp, key)
}
}
// GetWithContextCache returns the cache value of the given key in the given context.
func GetWithContextCache[T any](ctx context.Context, cacheGroupKey string, cacheTargetID any, f func() (T, error)) (T, error) {
v := GetContextData(ctx, cacheGroupKey, cacheTargetID)
if vv, ok := v.(T); ok {
return vv, nil
}
t, err := f()
if err != nil {
return t, err
}
SetContextData(ctx, cacheGroupKey, cacheTargetID, t)
return t, nil
}

View File

@ -1,41 +0,0 @@
// Copyright 2022 The Gitea Authors. All rights reserved.
// SPDX-License-Identifier: MIT
package cache
import (
"context"
"testing"
"github.com/stretchr/testify/assert"
)
func TestWithCacheContext(t *testing.T) {
ctx := WithCacheContext(context.Background())
v := GetContextData(ctx, "empty_field", "my_config1")
assert.Nil(t, v)
const field = "system_setting"
v = GetContextData(ctx, field, "my_config1")
assert.Nil(t, v)
SetContextData(ctx, field, "my_config1", 1)
v = GetContextData(ctx, field, "my_config1")
assert.NotNil(t, v)
assert.EqualValues(t, 1, v.(int))
RemoveContextData(ctx, field, "my_config1")
RemoveContextData(ctx, field, "my_config2") // remove an non-exist key
v = GetContextData(ctx, field, "my_config1")
assert.Nil(t, v)
vInt, err := GetWithContextCache(ctx, field, "my_config1", func() (int, error) {
return 1, nil
})
assert.NoError(t, err)
assert.EqualValues(t, 1, vInt)
v = GetContextData(ctx, field, "my_config1")
assert.EqualValues(t, 1, v)
}

View File

@ -5,7 +5,6 @@ package gitgraph
import ( import (
"bytes" "bytes"
"context"
"fmt" "fmt"
"strings" "strings"
@ -89,8 +88,9 @@ func (graph *Graph) AddCommit(row, column int, flowID int64, data []byte) error
// LoadAndProcessCommits will load the git.Commits for each commit in the graph, // LoadAndProcessCommits will load the git.Commits for each commit in the graph,
// the associate the commit with the user author, and check the commit verification // the associate the commit with the user author, and check the commit verification
// before finally retrieving the latest status // before finally retrieving the latest status
func (graph *Graph) LoadAndProcessCommits(ctx context.Context, repository *repo_model.Repository, gitRepo *git.Repository) error { func (graph *Graph) LoadAndProcessCommits(repository *repo_model.Repository, gitRepo *git.Repository) error {
var err error var err error
var ok bool var ok bool
emails := map[string]*user_model.User{} emails := map[string]*user_model.User{}
@ -108,12 +108,12 @@ func (graph *Graph) LoadAndProcessCommits(ctx context.Context, repository *repo_
if c.Commit.Author != nil { if c.Commit.Author != nil {
email := c.Commit.Author.Email email := c.Commit.Author.Email
if c.User, ok = emails[email]; !ok { if c.User, ok = emails[email]; !ok {
c.User, _ = user_model.GetUserByEmail(ctx, email) c.User, _ = user_model.GetUserByEmail(email)
emails[email] = c.User emails[email] = c.User
} }
} }
c.Verification = asymkey_model.ParseCommitWithSignature(ctx, c.Commit) c.Verification = asymkey_model.ParseCommitWithSignature(c.Commit)
_ = asymkey_model.CalculateTrustStatus(c.Verification, repository.GetTrustModel(), func(user *user_model.User) (bool, error) { _ = asymkey_model.CalculateTrustStatus(c.Verification, repository.GetTrustModel(), func(user *user_model.User) (bool, error) {
return repo_model.IsOwnerMemberCollaborator(repository, user.ID) return repo_model.IsOwnerMemberCollaborator(repository, user.ID)

View File

@ -53,7 +53,7 @@ func (pc *PushCommits) toAPIPayloadCommit(ctx context.Context, repoPath, repoLin
authorUsername := "" authorUsername := ""
author, ok := pc.emailUsers[commit.AuthorEmail] author, ok := pc.emailUsers[commit.AuthorEmail]
if !ok { if !ok {
author, err = user_model.GetUserByEmail(ctx, commit.AuthorEmail) author, err = user_model.GetUserByEmail(commit.AuthorEmail)
if err == nil { if err == nil {
authorUsername = author.Name authorUsername = author.Name
pc.emailUsers[commit.AuthorEmail] = author pc.emailUsers[commit.AuthorEmail] = author
@ -65,7 +65,7 @@ func (pc *PushCommits) toAPIPayloadCommit(ctx context.Context, repoPath, repoLin
committerUsername := "" committerUsername := ""
committer, ok := pc.emailUsers[commit.CommitterEmail] committer, ok := pc.emailUsers[commit.CommitterEmail]
if !ok { if !ok {
committer, err = user_model.GetUserByEmail(ctx, commit.CommitterEmail) committer, err = user_model.GetUserByEmail(commit.CommitterEmail)
if err == nil { if err == nil {
// TODO: check errors other than email not found. // TODO: check errors other than email not found.
committerUsername = committer.Name committerUsername = committer.Name
@ -133,7 +133,7 @@ func (pc *PushCommits) ToAPIPayloadCommits(ctx context.Context, repoPath, repoLi
// AvatarLink tries to match user in database with e-mail // AvatarLink tries to match user in database with e-mail
// in order to show custom avatar, and falls back to general avatar link. // in order to show custom avatar, and falls back to general avatar link.
func (pc *PushCommits) AvatarLink(ctx context.Context, email string) string { func (pc *PushCommits) AvatarLink(email string) string {
if pc.avatars == nil { if pc.avatars == nil {
pc.avatars = make(map[string]string) pc.avatars = make(map[string]string)
} }
@ -147,9 +147,9 @@ func (pc *PushCommits) AvatarLink(ctx context.Context, email string) string {
u, ok := pc.emailUsers[email] u, ok := pc.emailUsers[email]
if !ok { if !ok {
var err error var err error
u, err = user_model.GetUserByEmail(ctx, email) u, err = user_model.GetUserByEmail(email)
if err != nil { if err != nil {
pc.avatars[email] = avatars.GenerateEmailAvatarFastLink(ctx, email, size) pc.avatars[email] = avatars.GenerateEmailAvatarFastLink(email, size)
if !user_model.IsErrUserNotExist(err) { if !user_model.IsErrUserNotExist(err) {
log.Error("GetUserByEmail: %v", err) log.Error("GetUserByEmail: %v", err)
return "" return ""
@ -159,7 +159,7 @@ func (pc *PushCommits) AvatarLink(ctx context.Context, email string) string {
} }
} }
if u != nil { if u != nil {
pc.avatars[email] = u.AvatarLinkWithSize(ctx, size) pc.avatars[email] = u.AvatarLinkWithSize(size)
} }
return pc.avatars[email] return pc.avatars[email]

View File

@ -9,7 +9,6 @@ import (
"testing" "testing"
"time" "time"
"code.gitea.io/gitea/models/db"
repo_model "code.gitea.io/gitea/models/repo" repo_model "code.gitea.io/gitea/models/repo"
system_model "code.gitea.io/gitea/models/system" system_model "code.gitea.io/gitea/models/system"
"code.gitea.io/gitea/models/unittest" "code.gitea.io/gitea/models/unittest"
@ -103,7 +102,7 @@ func TestPushCommits_ToAPIPayloadCommits(t *testing.T) {
} }
func enableGravatar(t *testing.T) { func enableGravatar(t *testing.T) {
err := system_model.SetSettingNoVersion(db.DefaultContext, system_model.KeyPictureDisableGravatar, "false") err := system_model.SetSettingNoVersion(system_model.KeyPictureDisableGravatar, "false")
assert.NoError(t, err) assert.NoError(t, err)
setting.GravatarSource = "https://secure.gravatar.com/avatar" setting.GravatarSource = "https://secure.gravatar.com/avatar"
err = system_model.Init() err = system_model.Init()
@ -137,13 +136,13 @@ func TestPushCommits_AvatarLink(t *testing.T) {
assert.Equal(t, assert.Equal(t,
"https://secure.gravatar.com/avatar/ab53a2911ddf9b4817ac01ddcd3d975f?d=identicon&s=84", "https://secure.gravatar.com/avatar/ab53a2911ddf9b4817ac01ddcd3d975f?d=identicon&s=84",
pushCommits.AvatarLink(db.DefaultContext, "user2@example.com")) pushCommits.AvatarLink("user2@example.com"))
assert.Equal(t, assert.Equal(t,
"https://secure.gravatar.com/avatar/"+ "https://secure.gravatar.com/avatar/"+
fmt.Sprintf("%x", md5.Sum([]byte("nonexistent@example.com")))+ fmt.Sprintf("%x", md5.Sum([]byte("nonexistent@example.com")))+
"?d=identicon&s=84", "?d=identicon&s=84",
pushCommits.AvatarLink(db.DefaultContext, "nonexistent@example.com")) pushCommits.AvatarLink("nonexistent@example.com"))
} }
func TestCommitToPushCommit(t *testing.T) { func TestCommitToPushCommit(t *testing.T) {

View File

@ -318,7 +318,7 @@ func SyncReleasesWithTags(repo *repo_model.Repository, gitRepo *git.Repository)
return nil return nil
} }
if err := PushUpdateAddTag(db.DefaultContext, repo, gitRepo, tagName, sha1, refname); err != nil { if err := PushUpdateAddTag(repo, gitRepo, tagName, sha1, refname); err != nil {
return fmt.Errorf("unable to PushUpdateAddTag: %q to Repo[%d:%s/%s]: %w", tagName, repo.ID, repo.OwnerName, repo.Name, err) return fmt.Errorf("unable to PushUpdateAddTag: %q to Repo[%d:%s/%s]: %w", tagName, repo.ID, repo.OwnerName, repo.Name, err)
} }
@ -328,7 +328,7 @@ func SyncReleasesWithTags(repo *repo_model.Repository, gitRepo *git.Repository)
} }
// PushUpdateAddTag must be called for any push actions to add tag // PushUpdateAddTag must be called for any push actions to add tag
func PushUpdateAddTag(ctx context.Context, repo *repo_model.Repository, gitRepo *git.Repository, tagName, sha1, refname string) error { func PushUpdateAddTag(repo *repo_model.Repository, gitRepo *git.Repository, tagName, sha1, refname string) error {
tag, err := gitRepo.GetTagWithID(sha1, tagName) tag, err := gitRepo.GetTagWithID(sha1, tagName)
if err != nil { if err != nil {
return fmt.Errorf("unable to GetTag: %w", err) return fmt.Errorf("unable to GetTag: %w", err)
@ -350,7 +350,7 @@ func PushUpdateAddTag(ctx context.Context, repo *repo_model.Repository, gitRepo
createdAt := time.Unix(1, 0) createdAt := time.Unix(1, 0)
if sig != nil { if sig != nil {
author, err = user_model.GetUserByEmail(ctx, sig.Email) author, err = user_model.GetUserByEmail(sig.Email)
if err != nil && !user_model.IsErrUserNotExist(err) { if err != nil && !user_model.IsErrUserNotExist(err) {
return fmt.Errorf("unable to GetUserByEmail for %q: %w", sig.Email, err) return fmt.Errorf("unable to GetUserByEmail for %q: %w", sig.Email, err)
} }

View File

@ -25,6 +25,7 @@ import (
activities_model "code.gitea.io/gitea/models/activities" activities_model "code.gitea.io/gitea/models/activities"
"code.gitea.io/gitea/models/avatars" "code.gitea.io/gitea/models/avatars"
"code.gitea.io/gitea/models/db"
issues_model "code.gitea.io/gitea/models/issues" issues_model "code.gitea.io/gitea/models/issues"
"code.gitea.io/gitea/models/organization" "code.gitea.io/gitea/models/organization"
repo_model "code.gitea.io/gitea/models/repo" repo_model "code.gitea.io/gitea/models/repo"
@ -89,8 +90,8 @@ func NewFuncMap() []template.FuncMap {
"AssetVersion": func() string { "AssetVersion": func() string {
return setting.AssetVersion return setting.AssetVersion
}, },
"DisableGravatar": func(ctx context.Context) bool { "DisableGravatar": func() bool {
return system_model.GetSettingBool(ctx, system_model.KeyPictureDisableGravatar) return system_model.GetSettingBool(system_model.KeyPictureDisableGravatar)
}, },
"DefaultShowFullName": func() bool { "DefaultShowFullName": func() bool {
return setting.UI.DefaultShowFullName return setting.UI.DefaultShowFullName
@ -612,22 +613,22 @@ func AvatarHTML(src string, size int, class, name string) template.HTML {
} }
// Avatar renders user avatars. args: user, size (int), class (string) // Avatar renders user avatars. args: user, size (int), class (string)
func Avatar(ctx context.Context, item interface{}, others ...interface{}) template.HTML { func Avatar(item interface{}, others ...interface{}) template.HTML {
size, class := gitea_html.ParseSizeAndClass(avatars.DefaultAvatarPixelSize, avatars.DefaultAvatarClass, others...) size, class := gitea_html.ParseSizeAndClass(avatars.DefaultAvatarPixelSize, avatars.DefaultAvatarClass, others...)
switch t := item.(type) { switch t := item.(type) {
case *user_model.User: case *user_model.User:
src := t.AvatarLinkWithSize(ctx, size*setting.Avatar.RenderedSizeFactor) src := t.AvatarLinkWithSize(size * setting.Avatar.RenderedSizeFactor)
if src != "" { if src != "" {
return AvatarHTML(src, size, class, t.DisplayName()) return AvatarHTML(src, size, class, t.DisplayName())
} }
case *repo_model.Collaborator: case *repo_model.Collaborator:
src := t.AvatarLinkWithSize(ctx, size*setting.Avatar.RenderedSizeFactor) src := t.AvatarLinkWithSize(size * setting.Avatar.RenderedSizeFactor)
if src != "" { if src != "" {
return AvatarHTML(src, size, class, t.DisplayName()) return AvatarHTML(src, size, class, t.DisplayName())
} }
case *organization.Organization: case *organization.Organization:
src := t.AsUser().AvatarLinkWithSize(ctx, size*setting.Avatar.RenderedSizeFactor) src := t.AsUser().AvatarLinkWithSize(size * setting.Avatar.RenderedSizeFactor)
if src != "" { if src != "" {
return AvatarHTML(src, size, class, t.AsUser().DisplayName()) return AvatarHTML(src, size, class, t.AsUser().DisplayName())
} }
@ -637,9 +638,9 @@ func Avatar(ctx context.Context, item interface{}, others ...interface{}) templa
} }
// AvatarByAction renders user avatars from action. args: action, size (int), class (string) // AvatarByAction renders user avatars from action. args: action, size (int), class (string)
func AvatarByAction(ctx context.Context, action *activities_model.Action, others ...interface{}) template.HTML { func AvatarByAction(action *activities_model.Action, others ...interface{}) template.HTML {
action.LoadActUser(ctx) action.LoadActUser(db.DefaultContext)
return Avatar(ctx, action.ActUser, others...) return Avatar(action.ActUser, others...)
} }
// RepoAvatar renders repo avatars. args: repo, size(int), class (string) // RepoAvatar renders repo avatars. args: repo, size(int), class (string)
@ -654,9 +655,9 @@ func RepoAvatar(repo *repo_model.Repository, others ...interface{}) template.HTM
} }
// AvatarByEmail renders avatars by email address. args: email, name, size (int), class (string) // AvatarByEmail renders avatars by email address. args: email, name, size (int), class (string)
func AvatarByEmail(ctx context.Context, email, name string, others ...interface{}) template.HTML { func AvatarByEmail(email, name string, others ...interface{}) template.HTML {
size, class := gitea_html.ParseSizeAndClass(avatars.DefaultAvatarPixelSize, avatars.DefaultAvatarClass, others...) size, class := gitea_html.ParseSizeAndClass(avatars.DefaultAvatarPixelSize, avatars.DefaultAvatarClass, others...)
src := avatars.GenerateEmailAvatarFastLink(ctx, email, size*setting.Avatar.RenderedSizeFactor) src := avatars.GenerateEmailAvatarFastLink(email, size*setting.Avatar.RenderedSizeFactor)
if src != "" { if src != "" {
return AvatarHTML(src, size, class, name) return AvatarHTML(src, size, class, name)

View File

@ -55,7 +55,7 @@ func Person(ctx *context.APIContext) {
person.Icon = ap.Image{ person.Icon = ap.Image{
Type: ap.ImageType, Type: ap.ImageType,
MediaType: "image/png", MediaType: "image/png",
URL: ap.IRI(ctx.ContextUser.AvatarLink(ctx)), URL: ap.IRI(ctx.ContextUser.AvatarLink()),
} }
person.Inbox = ap.IRI(link + "/inbox") person.Inbox = ap.IRI(link + "/inbox")

View File

@ -74,7 +74,7 @@ func CreateOrg(ctx *context.APIContext) {
return return
} }
ctx.JSON(http.StatusCreated, convert.ToOrganization(ctx, org)) ctx.JSON(http.StatusCreated, convert.ToOrganization(org))
} }
// GetAllOrgs API for getting information of all the organizations // GetAllOrgs API for getting information of all the organizations
@ -114,7 +114,7 @@ func GetAllOrgs(ctx *context.APIContext) {
} }
orgs := make([]*api.Organization, len(users)) orgs := make([]*api.Organization, len(users))
for i := range users { for i := range users {
orgs[i] = convert.ToOrganization(ctx, organization.OrgFromUser(users[i])) orgs[i] = convert.ToOrganization(organization.OrgFromUser(users[i]))
} }
ctx.SetLinkHeader(int(maxResults), listOptions.PageSize) ctx.SetLinkHeader(int(maxResults), listOptions.PageSize)

View File

@ -140,7 +140,7 @@ func CreateUser(ctx *context.APIContext) {
if form.SendNotify { if form.SendNotify {
mailer.SendRegisterNotifyMail(u) mailer.SendRegisterNotifyMail(u)
} }
ctx.JSON(http.StatusCreated, convert.ToUser(ctx, u, ctx.Doer)) ctx.JSON(http.StatusCreated, convert.ToUser(u, ctx.Doer))
} }
// EditUser api for modifying a user's information // EditUser api for modifying a user's information
@ -280,7 +280,7 @@ func EditUser(ctx *context.APIContext) {
} }
log.Trace("Account profile updated by admin (%s): %s", ctx.Doer.Name, ctx.ContextUser.Name) log.Trace("Account profile updated by admin (%s): %s", ctx.Doer.Name, ctx.ContextUser.Name)
ctx.JSON(http.StatusOK, convert.ToUser(ctx, ctx.ContextUser, ctx.Doer)) ctx.JSON(http.StatusOK, convert.ToUser(ctx.ContextUser, ctx.Doer))
} }
// DeleteUser api for deleting a user // DeleteUser api for deleting a user
@ -441,7 +441,7 @@ func GetAllUsers(ctx *context.APIContext) {
results := make([]*api.User, len(users)) results := make([]*api.User, len(users))
for i := range users { for i := range users {
results[i] = convert.ToUser(ctx, users[i], ctx.Doer) results[i] = convert.ToUser(users[i], ctx.Doer)
} }
ctx.SetLinkHeader(int(maxResults), listOptions.PageSize) ctx.SetLinkHeader(int(maxResults), listOptions.PageSize)

View File

@ -39,7 +39,7 @@ func listMembers(ctx *context.APIContext, publicOnly bool) {
apiMembers := make([]*api.User, len(members)) apiMembers := make([]*api.User, len(members))
for i, member := range members { for i, member := range members {
apiMembers[i] = convert.ToUser(ctx, member, ctx.Doer) apiMembers[i] = convert.ToUser(member, ctx.Doer)
} }
ctx.SetTotalCountHeader(count) ctx.SetTotalCountHeader(count)

View File

@ -42,7 +42,7 @@ func listUserOrgs(ctx *context.APIContext, u *user_model.User) {
apiOrgs := make([]*api.Organization, len(orgs)) apiOrgs := make([]*api.Organization, len(orgs))
for i := range orgs { for i := range orgs {
apiOrgs[i] = convert.ToOrganization(ctx, orgs[i]) apiOrgs[i] = convert.ToOrganization(orgs[i])
} }
ctx.SetLinkHeader(int(maxResults), listOptions.PageSize) ctx.SetLinkHeader(int(maxResults), listOptions.PageSize)
@ -211,7 +211,7 @@ func GetAll(ctx *context.APIContext) {
} }
orgs := make([]*api.Organization, len(publicOrgs)) orgs := make([]*api.Organization, len(publicOrgs))
for i := range publicOrgs { for i := range publicOrgs {
orgs[i] = convert.ToOrganization(ctx, organization.OrgFromUser(publicOrgs[i])) orgs[i] = convert.ToOrganization(organization.OrgFromUser(publicOrgs[i]))
} }
ctx.SetLinkHeader(int(maxResults), listOptions.PageSize) ctx.SetLinkHeader(int(maxResults), listOptions.PageSize)
@ -274,7 +274,7 @@ func Create(ctx *context.APIContext) {
return return
} }
ctx.JSON(http.StatusCreated, convert.ToOrganization(ctx, org)) ctx.JSON(http.StatusCreated, convert.ToOrganization(org))
} }
// Get get an organization // Get get an organization
@ -298,7 +298,7 @@ func Get(ctx *context.APIContext) {
ctx.NotFound("HasOrgOrUserVisible", nil) ctx.NotFound("HasOrgOrUserVisible", nil)
return return
} }
ctx.JSON(http.StatusOK, convert.ToOrganization(ctx, ctx.Org.Organization)) ctx.JSON(http.StatusOK, convert.ToOrganization(ctx.Org.Organization))
} }
// Edit change an organization's information // Edit change an organization's information
@ -344,7 +344,7 @@ func Edit(ctx *context.APIContext) {
return return
} }
ctx.JSON(http.StatusOK, convert.ToOrganization(ctx, org)) ctx.JSON(http.StatusOK, convert.ToOrganization(org))
} }
// Delete an organization // Delete an organization

View File

@ -58,7 +58,7 @@ func ListTeams(ctx *context.APIContext) {
return return
} }
apiTeams, err := convert.ToTeams(ctx, teams, false) apiTeams, err := convert.ToTeams(teams, false)
if err != nil { if err != nil {
ctx.Error(http.StatusInternalServerError, "ConvertToTeams", err) ctx.Error(http.StatusInternalServerError, "ConvertToTeams", err)
return return
@ -97,7 +97,7 @@ func ListUserTeams(ctx *context.APIContext) {
return return
} }
apiTeams, err := convert.ToTeams(ctx, teams, true) apiTeams, err := convert.ToTeams(teams, true)
if err != nil { if err != nil {
ctx.Error(http.StatusInternalServerError, "ConvertToTeams", err) ctx.Error(http.StatusInternalServerError, "ConvertToTeams", err)
return return
@ -125,7 +125,7 @@ func GetTeam(ctx *context.APIContext) {
// "200": // "200":
// "$ref": "#/responses/Team" // "$ref": "#/responses/Team"
apiTeam, err := convert.ToTeam(ctx, ctx.Org.Team) apiTeam, err := convert.ToTeam(ctx.Org.Team)
if err != nil { if err != nil {
ctx.InternalServerError(err) ctx.InternalServerError(err)
return return
@ -223,7 +223,7 @@ func CreateTeam(ctx *context.APIContext) {
return return
} }
apiTeam, err := convert.ToTeam(ctx, team) apiTeam, err := convert.ToTeam(team)
if err != nil { if err != nil {
ctx.InternalServerError(err) ctx.InternalServerError(err)
return return
@ -306,7 +306,7 @@ func EditTeam(ctx *context.APIContext) {
return return
} }
apiTeam, err := convert.ToTeam(ctx, team) apiTeam, err := convert.ToTeam(team)
if err != nil { if err != nil {
ctx.InternalServerError(err) ctx.InternalServerError(err)
return return
@ -383,7 +383,7 @@ func GetTeamMembers(ctx *context.APIContext) {
members := make([]*api.User, len(teamMembers)) members := make([]*api.User, len(teamMembers))
for i, member := range teamMembers { for i, member := range teamMembers {
members[i] = convert.ToUser(ctx, member, ctx.Doer) members[i] = convert.ToUser(member, ctx.Doer)
} }
ctx.SetTotalCountHeader(int64(ctx.Org.Team.NumMembers)) ctx.SetTotalCountHeader(int64(ctx.Org.Team.NumMembers))
@ -428,7 +428,7 @@ func GetTeamMember(ctx *context.APIContext) {
ctx.NotFound() ctx.NotFound()
return return
} }
ctx.JSON(http.StatusOK, convert.ToUser(ctx, u, ctx.Doer)) ctx.JSON(http.StatusOK, convert.ToUser(u, ctx.Doer))
} }
// AddTeamMember api for add a member to a team // AddTeamMember api for add a member to a team
@ -779,7 +779,7 @@ func SearchTeam(ctx *context.APIContext) {
return return
} }
apiTeams, err := convert.ToTeams(ctx, teams, false) apiTeams, err := convert.ToTeams(teams, false)
if err != nil { if err != nil {
ctx.InternalServerError(err) ctx.InternalServerError(err)
return return

View File

@ -76,7 +76,7 @@ func GetBranch(ctx *context.APIContext) {
return return
} }
br, err := convert.ToBranch(ctx, ctx.Repo.Repository, branch, c, branchProtection, ctx.Doer, ctx.Repo.IsAdmin()) br, err := convert.ToBranch(ctx.Repo.Repository, branch, c, branchProtection, ctx.Doer, ctx.Repo.IsAdmin())
if err != nil { if err != nil {
ctx.Error(http.StatusInternalServerError, "convert.ToBranch", err) ctx.Error(http.StatusInternalServerError, "convert.ToBranch", err)
return return
@ -212,7 +212,7 @@ func CreateBranch(ctx *context.APIContext) {
return return
} }
br, err := convert.ToBranch(ctx, ctx.Repo.Repository, branch, commit, branchProtection, ctx.Doer, ctx.Repo.IsAdmin()) br, err := convert.ToBranch(ctx.Repo.Repository, branch, commit, branchProtection, ctx.Doer, ctx.Repo.IsAdmin())
if err != nil { if err != nil {
ctx.Error(http.StatusInternalServerError, "convert.ToBranch", err) ctx.Error(http.StatusInternalServerError, "convert.ToBranch", err)
return return
@ -284,7 +284,7 @@ func ListBranches(ctx *context.APIContext) {
} }
branchProtection := rules.GetFirstMatched(branches[i].Name) branchProtection := rules.GetFirstMatched(branches[i].Name)
apiBranch, err := convert.ToBranch(ctx, ctx.Repo.Repository, branches[i], c, branchProtection, ctx.Doer, ctx.Repo.IsAdmin()) apiBranch, err := convert.ToBranch(ctx.Repo.Repository, branches[i], c, branchProtection, ctx.Doer, ctx.Repo.IsAdmin())
if err != nil { if err != nil {
ctx.Error(http.StatusInternalServerError, "convert.ToBranch", err) ctx.Error(http.StatusInternalServerError, "convert.ToBranch", err)
return return

View File

@ -65,7 +65,7 @@ func ListCollaborators(ctx *context.APIContext) {
users := make([]*api.User, len(collaborators)) users := make([]*api.User, len(collaborators))
for i, collaborator := range collaborators { for i, collaborator := range collaborators {
users[i] = convert.ToUser(ctx, collaborator.User, ctx.Doer) users[i] = convert.ToUser(collaborator.User, ctx.Doer)
} }
ctx.SetTotalCountHeader(count) ctx.SetTotalCountHeader(count)
@ -287,7 +287,7 @@ func GetRepoPermissions(ctx *context.APIContext) {
return return
} }
ctx.JSON(http.StatusOK, convert.ToUserAndPermission(ctx, collaborator, ctx.ContextUser, permission.AccessMode)) ctx.JSON(http.StatusOK, convert.ToUserAndPermission(collaborator, ctx.ContextUser, permission.AccessMode))
} }
// GetReviewers return all users that can be requested to review in this repo // GetReviewers return all users that can be requested to review in this repo
@ -317,7 +317,7 @@ func GetReviewers(ctx *context.APIContext) {
ctx.Error(http.StatusInternalServerError, "ListCollaborators", err) ctx.Error(http.StatusInternalServerError, "ListCollaborators", err)
return return
} }
ctx.JSON(http.StatusOK, convert.ToUsers(ctx, ctx.Doer, reviewers)) ctx.JSON(http.StatusOK, convert.ToUsers(ctx.Doer, reviewers))
} }
// GetAssignees return all users that have write access and can be assigned to issues // GetAssignees return all users that have write access and can be assigned to issues
@ -347,5 +347,5 @@ func GetAssignees(ctx *context.APIContext) {
ctx.Error(http.StatusInternalServerError, "ListCollaborators", err) ctx.Error(http.StatusInternalServerError, "ListCollaborators", err)
return return
} }
ctx.JSON(http.StatusOK, convert.ToUsers(ctx, ctx.Doer, assignees)) ctx.JSON(http.StatusOK, convert.ToUsers(ctx.Doer, assignees))
} }

View File

@ -69,7 +69,7 @@ func getCommit(ctx *context.APIContext, identifier string) {
return return
} }
json, err := convert.ToCommit(ctx, ctx.Repo.Repository, ctx.Repo.GitRepo, commit, nil, true) json, err := convert.ToCommit(ctx.Repo.Repository, ctx.Repo.GitRepo, commit, nil, true)
if err != nil { if err != nil {
ctx.Error(http.StatusInternalServerError, "toCommit", err) ctx.Error(http.StatusInternalServerError, "toCommit", err)
return return
@ -217,7 +217,7 @@ func GetAllCommits(ctx *context.APIContext) {
for i, commit := range commits { for i, commit := range commits {
// Create json struct // Create json struct
apiCommits[i], err = convert.ToCommit(ctx, ctx.Repo.Repository, ctx.Repo.GitRepo, commit, userCache, stat) apiCommits[i], err = convert.ToCommit(ctx.Repo.Repository, ctx.Repo.GitRepo, commit, userCache, stat)
if err != nil { if err != nil {
ctx.Error(http.StatusInternalServerError, "toCommit", err) ctx.Error(http.StatusInternalServerError, "toCommit", err)
return return

View File

@ -174,7 +174,7 @@ func TestHook(ctx *context.APIContext) {
return return
} }
commit := convert.ToPayloadCommit(ctx, ctx.Repo.Repository, ctx.Repo.Commit) commit := convert.ToPayloadCommit(ctx.Repo.Repository, ctx.Repo.Commit)
commitID := ctx.Repo.Commit.ID.String() commitID := ctx.Repo.Commit.ID.String()
if err := webhook_service.PrepareWebhook(ctx, hook, webhook_module.HookEventPush, &api.PushPayload{ if err := webhook_service.PrepareWebhook(ctx, hook, webhook_module.HookEventPush, &api.PushPayload{
@ -186,8 +186,8 @@ func TestHook(ctx *context.APIContext) {
TotalCommits: 1, TotalCommits: 1,
HeadCommit: commit, HeadCommit: commit,
Repo: convert.ToRepo(ctx, ctx.Repo.Repository, perm.AccessModeNone), Repo: convert.ToRepo(ctx, ctx.Repo.Repository, perm.AccessModeNone),
Pusher: convert.ToUserWithAccessMode(ctx, ctx.Doer, perm.AccessModeNone), Pusher: convert.ToUserWithAccessMode(ctx.Doer, perm.AccessModeNone),
Sender: convert.ToUserWithAccessMode(ctx, ctx.Doer, perm.AccessModeNone), Sender: convert.ToUserWithAccessMode(ctx.Doer, perm.AccessModeNone),
}); err != nil { }); err != nil {
ctx.Error(http.StatusInternalServerError, "PrepareWebhook: ", err) ctx.Error(http.StatusInternalServerError, "PrepareWebhook: ", err)
return return

View File

@ -103,7 +103,7 @@ func ListIssueComments(ctx *context.APIContext) {
apiComments := make([]*api.Comment, len(comments)) apiComments := make([]*api.Comment, len(comments))
for i, comment := range comments { for i, comment := range comments {
comment.Issue = issue comment.Issue = issue
apiComments[i] = convert.ToComment(ctx, comments[i]) apiComments[i] = convert.ToComment(comments[i])
} }
ctx.SetTotalCountHeader(totalCount) ctx.SetTotalCountHeader(totalCount)
@ -308,7 +308,7 @@ func ListRepoIssueComments(ctx *context.APIContext) {
return return
} }
for i := range comments { for i := range comments {
apiComments[i] = convert.ToComment(ctx, comments[i]) apiComments[i] = convert.ToComment(comments[i])
} }
ctx.SetTotalCountHeader(totalCount) ctx.SetTotalCountHeader(totalCount)
@ -368,7 +368,7 @@ func CreateIssueComment(ctx *context.APIContext) {
return return
} }
ctx.JSON(http.StatusCreated, convert.ToComment(ctx, comment)) ctx.JSON(http.StatusCreated, convert.ToComment(comment))
} }
// GetIssueComment Get a comment by ID // GetIssueComment Get a comment by ID
@ -436,7 +436,7 @@ func GetIssueComment(ctx *context.APIContext) {
return return
} }
ctx.JSON(http.StatusOK, convert.ToComment(ctx, comment)) ctx.JSON(http.StatusOK, convert.ToComment(comment))
} }
// EditIssueComment modify a comment of an issue // EditIssueComment modify a comment of an issue
@ -561,7 +561,7 @@ func editIssueComment(ctx *context.APIContext, form api.EditIssueCommentOption)
return return
} }
ctx.JSON(http.StatusOK, convert.ToComment(ctx, comment)) ctx.JSON(http.StatusOK, convert.ToComment(comment))
} }
// DeleteIssueComment delete a comment from an issue // DeleteIssueComment delete a comment from an issue

View File

@ -80,7 +80,7 @@ func GetIssueCommentReactions(ctx *context.APIContext) {
var result []api.Reaction var result []api.Reaction
for _, r := range reactions { for _, r := range reactions {
result = append(result, api.Reaction{ result = append(result, api.Reaction{
User: convert.ToUser(ctx, r.User, ctx.Doer), User: convert.ToUser(r.User, ctx.Doer),
Reaction: r.Type, Reaction: r.Type,
Created: r.CreatedUnix.AsTime(), Created: r.CreatedUnix.AsTime(),
}) })
@ -202,7 +202,7 @@ func changeIssueCommentReaction(ctx *context.APIContext, form api.EditReactionOp
ctx.Error(http.StatusForbidden, err.Error(), err) ctx.Error(http.StatusForbidden, err.Error(), err)
} else if issues_model.IsErrReactionAlreadyExist(err) { } else if issues_model.IsErrReactionAlreadyExist(err) {
ctx.JSON(http.StatusOK, api.Reaction{ ctx.JSON(http.StatusOK, api.Reaction{
User: convert.ToUser(ctx, ctx.Doer, ctx.Doer), User: convert.ToUser(ctx.Doer, ctx.Doer),
Reaction: reaction.Type, Reaction: reaction.Type,
Created: reaction.CreatedUnix.AsTime(), Created: reaction.CreatedUnix.AsTime(),
}) })
@ -213,7 +213,7 @@ func changeIssueCommentReaction(ctx *context.APIContext, form api.EditReactionOp
} }
ctx.JSON(http.StatusCreated, api.Reaction{ ctx.JSON(http.StatusCreated, api.Reaction{
User: convert.ToUser(ctx, ctx.Doer, ctx.Doer), User: convert.ToUser(ctx.Doer, ctx.Doer),
Reaction: reaction.Type, Reaction: reaction.Type,
Created: reaction.CreatedUnix.AsTime(), Created: reaction.CreatedUnix.AsTime(),
}) })
@ -298,7 +298,7 @@ func GetIssueReactions(ctx *context.APIContext) {
var result []api.Reaction var result []api.Reaction
for _, r := range reactions { for _, r := range reactions {
result = append(result, api.Reaction{ result = append(result, api.Reaction{
User: convert.ToUser(ctx, r.User, ctx.Doer), User: convert.ToUser(r.User, ctx.Doer),
Reaction: r.Type, Reaction: r.Type,
Created: r.CreatedUnix.AsTime(), Created: r.CreatedUnix.AsTime(),
}) })
@ -412,7 +412,7 @@ func changeIssueReaction(ctx *context.APIContext, form api.EditReactionOption, i
ctx.Error(http.StatusForbidden, err.Error(), err) ctx.Error(http.StatusForbidden, err.Error(), err)
} else if issues_model.IsErrReactionAlreadyExist(err) { } else if issues_model.IsErrReactionAlreadyExist(err) {
ctx.JSON(http.StatusOK, api.Reaction{ ctx.JSON(http.StatusOK, api.Reaction{
User: convert.ToUser(ctx, ctx.Doer, ctx.Doer), User: convert.ToUser(ctx.Doer, ctx.Doer),
Reaction: reaction.Type, Reaction: reaction.Type,
Created: reaction.CreatedUnix.AsTime(), Created: reaction.CreatedUnix.AsTime(),
}) })
@ -423,7 +423,7 @@ func changeIssueReaction(ctx *context.APIContext, form api.EditReactionOption, i
} }
ctx.JSON(http.StatusCreated, api.Reaction{ ctx.JSON(http.StatusCreated, api.Reaction{
User: convert.ToUser(ctx, ctx.Doer, ctx.Doer), User: convert.ToUser(ctx.Doer, ctx.Doer),
Reaction: reaction.Type, Reaction: reaction.Type,
Created: reaction.CreatedUnix.AsTime(), Created: reaction.CreatedUnix.AsTime(),
}) })

View File

@ -280,7 +280,7 @@ func GetIssueSubscribers(ctx *context.APIContext) {
} }
apiUsers := make([]*api.User, 0, len(users)) apiUsers := make([]*api.User, 0, len(users))
for _, v := range users { for _, v := range users {
apiUsers = append(apiUsers, convert.ToUser(ctx, v, ctx.Doer)) apiUsers = append(apiUsers, convert.ToUser(v, ctx.Doer))
} }
count, err := issues_model.CountIssueWatchers(ctx, issue.ID) count, err := issues_model.CountIssueWatchers(ctx, issue.ID)

View File

@ -68,7 +68,7 @@ func getNote(ctx *context.APIContext, identifier string) {
return return
} }
cmt, err := convert.ToCommit(ctx, ctx.Repo.Repository, ctx.Repo.GitRepo, note.Commit, nil, true) cmt, err := convert.ToCommit(ctx.Repo.Repository, ctx.Repo.GitRepo, note.Commit, nil, true)
if err != nil { if err != nil {
ctx.Error(http.StatusInternalServerError, "ToCommit", err) ctx.Error(http.StatusInternalServerError, "ToCommit", err)
return return

View File

@ -1311,7 +1311,7 @@ func GetPullRequestCommits(ctx *context.APIContext) {
apiCommits := make([]*api.Commit, 0, end-start) apiCommits := make([]*api.Commit, 0, end-start)
for i := start; i < end; i++ { for i := start; i < end; i++ {
apiCommit, err := convert.ToCommit(ctx, ctx.Repo.Repository, baseGitRepo, commits[i], userCache, true) apiCommit, err := convert.ToCommit(ctx.Repo.Repository, baseGitRepo, commits[i], userCache, true)
if err != nil { if err != nil {
ctx.ServerError("toCommit", err) ctx.ServerError("toCommit", err)
return return

View File

@ -673,7 +673,7 @@ func apiReviewRequest(ctx *context.APIContext, opts api.PullReviewRequestOptions
for _, r := range opts.Reviewers { for _, r := range opts.Reviewers {
var reviewer *user_model.User var reviewer *user_model.User
if strings.Contains(r, "@") { if strings.Contains(r, "@") {
reviewer, err = user_model.GetUserByEmail(ctx, r) reviewer, err = user_model.GetUserByEmail(r)
} else { } else {
reviewer, err = user_model.GetUserByName(ctx, r) reviewer, err = user_model.GetUserByName(ctx, r)
} }

View File

@ -64,7 +64,7 @@ func GetRelease(ctx *context.APIContext) {
ctx.Error(http.StatusInternalServerError, "LoadAttributes", err) ctx.Error(http.StatusInternalServerError, "LoadAttributes", err)
return return
} }
ctx.JSON(http.StatusOK, convert.ToRelease(ctx, release)) ctx.JSON(http.StatusOK, convert.ToRelease(release))
} }
// GetLatestRelease gets the most recent non-prerelease, non-draft release of a repository, sorted by created_at // GetLatestRelease gets the most recent non-prerelease, non-draft release of a repository, sorted by created_at
@ -105,7 +105,7 @@ func GetLatestRelease(ctx *context.APIContext) {
ctx.Error(http.StatusInternalServerError, "LoadAttributes", err) ctx.Error(http.StatusInternalServerError, "LoadAttributes", err)
return return
} }
ctx.JSON(http.StatusOK, convert.ToRelease(ctx, release)) ctx.JSON(http.StatusOK, convert.ToRelease(release))
} }
// ListReleases list a repository's releases // ListReleases list a repository's releases
@ -174,7 +174,7 @@ func ListReleases(ctx *context.APIContext) {
ctx.Error(http.StatusInternalServerError, "LoadAttributes", err) ctx.Error(http.StatusInternalServerError, "LoadAttributes", err)
return return
} }
rels[i] = convert.ToRelease(ctx, release) rels[i] = convert.ToRelease(release)
} }
filteredCount, err := repo_model.CountReleasesByRepoID(ctx.Repo.Repository.ID, opts) filteredCount, err := repo_model.CountReleasesByRepoID(ctx.Repo.Repository.ID, opts)
@ -272,7 +272,7 @@ func CreateRelease(ctx *context.APIContext) {
return return
} }
} }
ctx.JSON(http.StatusCreated, convert.ToRelease(ctx, rel)) ctx.JSON(http.StatusCreated, convert.ToRelease(rel))
} }
// EditRelease edit a release // EditRelease edit a release
@ -357,7 +357,7 @@ func EditRelease(ctx *context.APIContext) {
ctx.Error(http.StatusInternalServerError, "LoadAttributes", err) ctx.Error(http.StatusInternalServerError, "LoadAttributes", err)
return return
} }
ctx.JSON(http.StatusOK, convert.ToRelease(ctx, rel)) ctx.JSON(http.StatusOK, convert.ToRelease(rel))
} }
// DeleteRelease delete a release from a repository // DeleteRelease delete a release from a repository

View File

@ -117,7 +117,7 @@ func ListReleaseAttachments(ctx *context.APIContext) {
ctx.Error(http.StatusInternalServerError, "LoadAttributes", err) ctx.Error(http.StatusInternalServerError, "LoadAttributes", err)
return return
} }
ctx.JSON(http.StatusOK, convert.ToRelease(ctx, release).Attachments) ctx.JSON(http.StatusOK, convert.ToRelease(release).Attachments)
} }
// CreateReleaseAttachment creates an attachment and saves the given file // CreateReleaseAttachment creates an attachment and saves the given file

View File

@ -63,7 +63,7 @@ func GetReleaseByTag(ctx *context.APIContext) {
ctx.Error(http.StatusInternalServerError, "LoadAttributes", err) ctx.Error(http.StatusInternalServerError, "LoadAttributes", err)
return return
} }
ctx.JSON(http.StatusOK, convert.ToRelease(ctx, release)) ctx.JSON(http.StatusOK, convert.ToRelease(release))
} }
// DeleteReleaseByTag delete a release from a repository by tag name // DeleteReleaseByTag delete a release from a repository by tag name

View File

@ -50,7 +50,7 @@ func ListStargazers(ctx *context.APIContext) {
} }
users := make([]*api.User, len(stargazers)) users := make([]*api.User, len(stargazers))
for i, stargazer := range stargazers { for i, stargazer := range stargazers {
users[i] = convert.ToUser(ctx, stargazer, ctx.Doer) users[i] = convert.ToUser(stargazer, ctx.Doer)
} }
ctx.SetTotalCountHeader(int64(ctx.Repo.Repository.NumStars)) ctx.SetTotalCountHeader(int64(ctx.Repo.Repository.NumStars))

View File

@ -50,7 +50,7 @@ func ListSubscribers(ctx *context.APIContext) {
} }
users := make([]*api.User, len(subscribers)) users := make([]*api.User, len(subscribers))
for i, subscriber := range subscribers { for i, subscriber := range subscribers {
users[i] = convert.ToUser(ctx, subscriber, ctx.Doer) users[i] = convert.ToUser(subscriber, ctx.Doer)
} }
ctx.SetTotalCountHeader(int64(ctx.Repo.Repository.NumWatches)) ctx.SetTotalCountHeader(int64(ctx.Repo.Repository.NumWatches))

View File

@ -107,7 +107,7 @@ func GetAnnotatedTag(ctx *context.APIContext) {
if err != nil { if err != nil {
ctx.Error(http.StatusBadRequest, "GetAnnotatedTag", err) ctx.Error(http.StatusBadRequest, "GetAnnotatedTag", err)
} }
ctx.JSON(http.StatusOK, convert.ToAnnotatedTag(ctx, ctx.Repo.Repository, tag, commit)) ctx.JSON(http.StatusOK, convert.ToAnnotatedTag(ctx.Repo.Repository, tag, commit))
} }
} }

View File

@ -47,7 +47,7 @@ func ListTeams(ctx *context.APIContext) {
return return
} }
apiTeams, err := convert.ToTeams(ctx, teams, false) apiTeams, err := convert.ToTeams(teams, false)
if err != nil { if err != nil {
ctx.InternalServerError(err) ctx.InternalServerError(err)
return return
@ -98,7 +98,7 @@ func IsTeam(ctx *context.APIContext) {
} }
if models.HasRepository(team, ctx.Repo.Repository.ID) { if models.HasRepository(team, ctx.Repo.Repository.ID) {
apiTeam, err := convert.ToTeam(ctx, team) apiTeam, err := convert.ToTeam(team)
if err != nil { if err != nil {
ctx.InternalServerError(err) ctx.InternalServerError(err)
return return

View File

@ -81,7 +81,7 @@ func Transfer(ctx *context.APIContext) {
return return
} }
org := convert.ToOrganization(ctx, organization.OrgFromUser(newOwner)) org := convert.ToOrganization(organization.OrgFromUser(newOwner))
for _, tID := range *opts.TeamIDs { for _, tID := range *opts.TeamIDs {
team, err := organization.GetTeamByID(ctx, tID) team, err := organization.GetTeamByID(ctx, tID)
if err != nil { if err != nil {

View File

@ -17,7 +17,7 @@ import (
func responseAPIUsers(ctx *context.APIContext, users []*user_model.User) { func responseAPIUsers(ctx *context.APIContext, users []*user_model.User) {
apiUsers := make([]*api.User, len(users)) apiUsers := make([]*api.User, len(users))
for i := range users { for i := range users {
apiUsers[i] = convert.ToUser(ctx, users[i], ctx.Doer) apiUsers[i] = convert.ToUser(users[i], ctx.Doer)
} }
ctx.JSON(http.StatusOK, &apiUsers) ctx.JSON(http.StatusOK, &apiUsers)
} }

View File

@ -4,7 +4,6 @@
package user package user
import ( import (
std_ctx "context"
"net/http" "net/http"
asymkey_model "code.gitea.io/gitea/models/asymkey" asymkey_model "code.gitea.io/gitea/models/asymkey"
@ -22,20 +21,20 @@ import (
) )
// appendPrivateInformation appends the owner and key type information to api.PublicKey // appendPrivateInformation appends the owner and key type information to api.PublicKey
func appendPrivateInformation(ctx std_ctx.Context, apiKey *api.PublicKey, key *asymkey_model.PublicKey, defaultUser *user_model.User) (*api.PublicKey, error) { func appendPrivateInformation(apiKey *api.PublicKey, key *asymkey_model.PublicKey, defaultUser *user_model.User) (*api.PublicKey, error) {
if key.Type == asymkey_model.KeyTypeDeploy { if key.Type == asymkey_model.KeyTypeDeploy {
apiKey.KeyType = "deploy" apiKey.KeyType = "deploy"
} else if key.Type == asymkey_model.KeyTypeUser { } else if key.Type == asymkey_model.KeyTypeUser {
apiKey.KeyType = "user" apiKey.KeyType = "user"
if defaultUser.ID == key.OwnerID { if defaultUser.ID == key.OwnerID {
apiKey.Owner = convert.ToUser(ctx, defaultUser, defaultUser) apiKey.Owner = convert.ToUser(defaultUser, defaultUser)
} else { } else {
user, err := user_model.GetUserByID(db.DefaultContext, key.OwnerID) user, err := user_model.GetUserByID(db.DefaultContext, key.OwnerID)
if err != nil { if err != nil {
return apiKey, err return apiKey, err
} }
apiKey.Owner = convert.ToUser(ctx, user, user) apiKey.Owner = convert.ToUser(user, user)
} }
} else { } else {
apiKey.KeyType = "unknown" apiKey.KeyType = "unknown"
@ -88,7 +87,7 @@ func listPublicKeys(ctx *context.APIContext, user *user_model.User) {
for i := range keys { for i := range keys {
apiKeys[i] = convert.ToPublicKey(apiLink, keys[i]) apiKeys[i] = convert.ToPublicKey(apiLink, keys[i])
if ctx.Doer.IsAdmin || ctx.Doer.ID == keys[i].OwnerID { if ctx.Doer.IsAdmin || ctx.Doer.ID == keys[i].OwnerID {
apiKeys[i], _ = appendPrivateInformation(ctx, apiKeys[i], keys[i], user) apiKeys[i], _ = appendPrivateInformation(apiKeys[i], keys[i], user)
} }
} }
@ -188,7 +187,7 @@ func GetPublicKey(ctx *context.APIContext) {
apiLink := composePublicKeysAPILink() apiLink := composePublicKeysAPILink()
apiKey := convert.ToPublicKey(apiLink, key) apiKey := convert.ToPublicKey(apiLink, key)
if ctx.Doer.IsAdmin || ctx.Doer.ID == key.OwnerID { if ctx.Doer.IsAdmin || ctx.Doer.ID == key.OwnerID {
apiKey, _ = appendPrivateInformation(ctx, apiKey, key, ctx.Doer) apiKey, _ = appendPrivateInformation(apiKey, key, ctx.Doer)
} }
ctx.JSON(http.StatusOK, apiKey) ctx.JSON(http.StatusOK, apiKey)
} }
@ -209,7 +208,7 @@ func CreateUserPublicKey(ctx *context.APIContext, form api.CreateKeyOption, uid
apiLink := composePublicKeysAPILink() apiLink := composePublicKeysAPILink()
apiKey := convert.ToPublicKey(apiLink, key) apiKey := convert.ToPublicKey(apiLink, key)
if ctx.Doer.IsAdmin || ctx.Doer.ID == key.OwnerID { if ctx.Doer.IsAdmin || ctx.Doer.ID == key.OwnerID {
apiKey, _ = appendPrivateInformation(ctx, apiKey, key, ctx.Doer) apiKey, _ = appendPrivateInformation(apiKey, key, ctx.Doer)
} }
ctx.JSON(http.StatusCreated, apiKey) ctx.JSON(http.StatusCreated, apiKey)
} }

View File

@ -74,7 +74,7 @@ func Search(ctx *context.APIContext) {
ctx.JSON(http.StatusOK, map[string]interface{}{ ctx.JSON(http.StatusOK, map[string]interface{}{
"ok": true, "ok": true,
"data": convert.ToUsers(ctx, ctx.Doer, users), "data": convert.ToUsers(ctx.Doer, users),
}) })
} }
@ -102,7 +102,7 @@ func GetInfo(ctx *context.APIContext) {
ctx.NotFound("GetUserByName", user_model.ErrUserNotExist{Name: ctx.Params(":username")}) ctx.NotFound("GetUserByName", user_model.ErrUserNotExist{Name: ctx.Params(":username")})
return return
} }
ctx.JSON(http.StatusOK, convert.ToUser(ctx, ctx.ContextUser, ctx.Doer)) ctx.JSON(http.StatusOK, convert.ToUser(ctx.ContextUser, ctx.Doer))
} }
// GetAuthenticatedUser get current user's information // GetAuthenticatedUser get current user's information
@ -116,7 +116,7 @@ func GetAuthenticatedUser(ctx *context.APIContext) {
// "200": // "200":
// "$ref": "#/responses/User" // "$ref": "#/responses/User"
ctx.JSON(http.StatusOK, convert.ToUser(ctx, ctx.Doer, ctx.Doer)) ctx.JSON(http.StatusOK, convert.ToUser(ctx.Doer, ctx.Doer))
} }
// GetUserHeatmapData is the handler to get a users heatmap // GetUserHeatmapData is the handler to get a users heatmap

View File

@ -8,7 +8,6 @@ import (
"net/http" "net/http"
"strings" "strings"
"code.gitea.io/gitea/modules/cache"
"code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/process" "code.gitea.io/gitea/modules/process"
@ -29,7 +28,7 @@ func Middlewares() []func(http.Handler) http.Handler {
ctx, _, finished := process.GetManager().AddTypedContext(req.Context(), fmt.Sprintf("%s: %s", req.Method, req.RequestURI), process.RequestProcessType, true) ctx, _, finished := process.GetManager().AddTypedContext(req.Context(), fmt.Sprintf("%s: %s", req.Method, req.RequestURI), process.RequestProcessType, true)
defer finished() defer finished()
next.ServeHTTP(context.NewResponse(resp), req.WithContext(cache.WithCacheContext(ctx))) next.ServeHTTP(context.NewResponse(resp), req.WithContext(ctx))
}) })
}, },
} }

View File

@ -441,11 +441,11 @@ func SubmitInstall(ctx *context.Context) {
cfg.Section("server").Key("OFFLINE_MODE").SetValue(fmt.Sprint(form.OfflineMode)) cfg.Section("server").Key("OFFLINE_MODE").SetValue(fmt.Sprint(form.OfflineMode))
// if you are reinstalling, this maybe not right because of missing version // if you are reinstalling, this maybe not right because of missing version
if err := system_model.SetSettingNoVersion(ctx, system_model.KeyPictureDisableGravatar, strconv.FormatBool(form.DisableGravatar)); err != nil { if err := system_model.SetSettingNoVersion(system_model.KeyPictureDisableGravatar, strconv.FormatBool(form.DisableGravatar)); err != nil {
ctx.RenderWithErr(ctx.Tr("install.save_config_failed", err), tplInstall, &form) ctx.RenderWithErr(ctx.Tr("install.save_config_failed", err), tplInstall, &form)
return return
} }
if err := system_model.SetSettingNoVersion(ctx, system_model.KeyPictureEnableFederatedAvatar, strconv.FormatBool(form.EnableFederatedAvatar)); err != nil { if err := system_model.SetSettingNoVersion(system_model.KeyPictureEnableFederatedAvatar, strconv.FormatBool(form.EnableFederatedAvatar)); err != nil {
ctx.RenderWithErr(ctx.Tr("install.save_config_failed", err), tplInstall, &form) ctx.RenderWithErr(ctx.Tr("install.save_config_failed", err), tplInstall, &form)
return return
} }

View File

@ -101,7 +101,7 @@ func readAndVerifyCommit(sha string, repo *git.Repository, env []string) error {
if err != nil { if err != nil {
return err return err
} }
verification := asymkey_model.ParseCommitWithSignature(ctx, commit) verification := asymkey_model.ParseCommitWithSignature(commit)
if !verification.Verified { if !verification.Verified {
cancel() cancel()
return &errUnverifiedCommit{ return &errUnverifiedCommit{

View File

@ -213,7 +213,7 @@ func ChangeConfig(ctx *context.Context) {
} }
} }
if err := system_model.SetSetting(ctx, &system_model.Setting{ if err := system_model.SetSetting(&system_model.Setting{
SettingKey: key, SettingKey: key,
SettingValue: value, SettingValue: value,
Version: version, Version: version,

View File

@ -59,7 +59,7 @@ func LinkAccount(ctx *context.Context) {
ctx.Data["email"] = email ctx.Data["email"] = email
if len(email) != 0 { if len(email) != 0 {
u, err := user_model.GetUserByEmail(ctx, email) u, err := user_model.GetUserByEmail(email)
if err != nil && !user_model.IsErrUserNotExist(err) { if err != nil && !user_model.IsErrUserNotExist(err) {
ctx.ServerError("UserSignIn", err) ctx.ServerError("UserSignIn", err)
return return

View File

@ -225,7 +225,7 @@ func newAccessTokenResponse(ctx stdContext.Context, grant *auth.OAuth2Grant, ser
idToken.Name = user.GetDisplayName() idToken.Name = user.GetDisplayName()
idToken.PreferredUsername = user.Name idToken.PreferredUsername = user.Name
idToken.Profile = user.HTMLURL() idToken.Profile = user.HTMLURL()
idToken.Picture = user.AvatarLink(ctx) idToken.Picture = user.AvatarLink()
idToken.Website = user.Website idToken.Website = user.Website
idToken.Locale = user.Language idToken.Locale = user.Language
idToken.UpdatedAt = user.UpdatedUnix idToken.UpdatedAt = user.UpdatedUnix
@ -286,7 +286,7 @@ func InfoOAuth(ctx *context.Context) {
Name: ctx.Doer.FullName, Name: ctx.Doer.FullName,
Username: ctx.Doer.Name, Username: ctx.Doer.Name,
Email: ctx.Doer.Email, Email: ctx.Doer.Email,
Picture: ctx.Doer.AvatarLink(ctx), Picture: ctx.Doer.AvatarLink(),
} }
groups, err := getOAuthGroupsForUser(ctx.Doer) groups, err := getOAuthGroupsForUser(ctx.Doer)

View File

@ -69,7 +69,7 @@ func TestNewAccessTokenResponse_OIDCToken(t *testing.T) {
assert.Equal(t, user.Name, oidcToken.Name) assert.Equal(t, user.Name, oidcToken.Name)
assert.Equal(t, user.Name, oidcToken.PreferredUsername) assert.Equal(t, user.Name, oidcToken.PreferredUsername)
assert.Equal(t, user.HTMLURL(), oidcToken.Profile) assert.Equal(t, user.HTMLURL(), oidcToken.Profile)
assert.Equal(t, user.AvatarLink(db.DefaultContext), oidcToken.Picture) assert.Equal(t, user.AvatarLink(), oidcToken.Picture)
assert.Equal(t, user.Website, oidcToken.Website) assert.Equal(t, user.Website, oidcToken.Website)
assert.Equal(t, user.UpdatedUnix, oidcToken.UpdatedAt) assert.Equal(t, user.UpdatedUnix, oidcToken.UpdatedAt)
assert.Equal(t, user.Email, oidcToken.Email) assert.Equal(t, user.Email, oidcToken.Email)
@ -87,7 +87,7 @@ func TestNewAccessTokenResponse_OIDCToken(t *testing.T) {
assert.Equal(t, user.FullName, oidcToken.Name) assert.Equal(t, user.FullName, oidcToken.Name)
assert.Equal(t, user.Name, oidcToken.PreferredUsername) assert.Equal(t, user.Name, oidcToken.PreferredUsername)
assert.Equal(t, user.HTMLURL(), oidcToken.Profile) assert.Equal(t, user.HTMLURL(), oidcToken.Profile)
assert.Equal(t, user.AvatarLink(db.DefaultContext), oidcToken.Picture) assert.Equal(t, user.AvatarLink(), oidcToken.Picture)
assert.Equal(t, user.Website, oidcToken.Website) assert.Equal(t, user.Website, oidcToken.Website)
assert.Equal(t, user.UpdatedUnix, oidcToken.UpdatedAt) assert.Equal(t, user.UpdatedUnix, oidcToken.UpdatedAt)
assert.Equal(t, user.Email, oidcToken.Email) assert.Equal(t, user.Email, oidcToken.Email)

View File

@ -197,7 +197,7 @@ func signInOpenIDVerify(ctx *context.Context) {
log.Trace("User has email=%s and nickname=%s", email, nickname) log.Trace("User has email=%s and nickname=%s", email, nickname)
if email != "" { if email != "" {
u, err = user_model.GetUserByEmail(ctx, email) u, err = user_model.GetUserByEmail(email)
if err != nil { if err != nil {
if !user_model.IsErrUserNotExist(err) { if !user_model.IsErrUserNotExist(err) {
ctx.RenderWithErr(err.Error(), tplSignInOpenID, &forms.SignInOpenIDForm{ ctx.RenderWithErr(err.Error(), tplSignInOpenID, &forms.SignInOpenIDForm{

View File

@ -59,7 +59,7 @@ func ForgotPasswdPost(ctx *context.Context) {
email := ctx.FormString("email") email := ctx.FormString("email")
ctx.Data["Email"] = email ctx.Data["Email"] = email
u, err := user_model.GetUserByEmail(ctx, email) u, err := user_model.GetUserByEmail(email)
if err != nil { if err != nil {
if user_model.IsErrUserNotExist(err) { if user_model.IsErrUserNotExist(err) {
ctx.Data["ResetPwdCodeLives"] = timeutil.MinutesToFriendly(setting.Service.ResetPwdCodeLives, ctx.Locale) ctx.Data["ResetPwdCodeLives"] = timeutil.MinutesToFriendly(setting.Service.ResetPwdCodeLives, ctx.Locale)

View File

@ -401,7 +401,7 @@ func SearchTeam(ctx *context.Context) {
return return
} }
apiTeams, err := convert.ToTeams(ctx, teams, false) apiTeams, err := convert.ToTeams(teams, false)
if err != nil { if err != nil {
log.Error("convert ToTeams failed: %v", err) log.Error("convert ToTeams failed: %v", err)
ctx.JSON(http.StatusInternalServerError, map[string]interface{}{ ctx.JSON(http.StatusInternalServerError, map[string]interface{}{

View File

@ -199,7 +199,7 @@ func processBlameParts(ctx *context.Context, blameParts []git.BlamePart) (map[st
} }
// populate commit email addresses to later look up avatars. // populate commit email addresses to later look up avatars.
for _, c := range user_model.ValidateCommitsWithEmails(ctx, commits) { for _, c := range user_model.ValidateCommitsWithEmails(commits) {
commitNames[c.ID.String()] = c commitNames[c.ID.String()] = c
} }
@ -262,9 +262,9 @@ func renderBlame(ctx *context.Context, blameParts []git.BlamePart, commitNames m
var avatar string var avatar string
if commit.User != nil { if commit.User != nil {
avatar = string(templates.Avatar(ctx, commit.User, 18, "gt-mr-3")) avatar = string(templates.Avatar(commit.User, 18, "gt-mr-3"))
} else { } else {
avatar = string(templates.AvatarByEmail(ctx, commit.Author.Email, commit.Author.Name, 18, "gt-mr-3")) avatar = string(templates.AvatarByEmail(commit.Author.Email, commit.Author.Name, 18, "gt-mr-3"))
} }
br.Avatar = gotemplate.HTML(avatar) br.Avatar = gotemplate.HTML(avatar)

View File

@ -138,7 +138,7 @@ func Graph(ctx *context.Context) {
return return
} }
if err := graph.LoadAndProcessCommits(ctx, ctx.Repo.Repository, ctx.Repo.GitRepo); err != nil { if err := graph.LoadAndProcessCommits(ctx.Repo.Repository, ctx.Repo.GitRepo); err != nil {
ctx.ServerError("LoadAndProcessCommits", err) ctx.ServerError("LoadAndProcessCommits", err)
return return
} }
@ -343,9 +343,9 @@ func Diff(ctx *context.Context) {
ctx.Data["CommitStatus"] = git_model.CalcCommitStatus(statuses) ctx.Data["CommitStatus"] = git_model.CalcCommitStatus(statuses)
ctx.Data["CommitStatuses"] = statuses ctx.Data["CommitStatuses"] = statuses
verification := asymkey_model.ParseCommitWithSignature(ctx, commit) verification := asymkey_model.ParseCommitWithSignature(commit)
ctx.Data["Verification"] = verification ctx.Data["Verification"] = verification
ctx.Data["Author"] = user_model.ValidateCommitWithEmail(ctx, commit) ctx.Data["Author"] = user_model.ValidateCommitWithEmail(commit)
ctx.Data["Parents"] = parents ctx.Data["Parents"] = parents
ctx.Data["DiffNotAvailable"] = diff.NumFiles == 0 ctx.Data["DiffNotAvailable"] = diff.NumFiles == 0
@ -361,7 +361,7 @@ func Diff(ctx *context.Context) {
if err == nil { if err == nil {
ctx.Data["Note"] = string(charset.ToUTF8WithFallback(note.Message)) ctx.Data["Note"] = string(charset.ToUTF8WithFallback(note.Message))
ctx.Data["NoteCommit"] = note.Commit ctx.Data["NoteCommit"] = note.Commit
ctx.Data["NoteAuthor"] = user_model.ValidateCommitWithEmail(ctx, note.Commit) ctx.Data["NoteAuthor"] = user_model.ValidateCommitWithEmail(note.Commit)
} }
ctx.Data["BranchName"], err = commit.GetBranchName() ctx.Data["BranchName"], err = commit.GetBranchName()

View File

@ -1142,11 +1142,7 @@ func NewIssuePost(ctx *context.Context) {
} }
// roleDescriptor returns the Role Descriptor for a comment in/with the given repo, poster and issue // roleDescriptor returns the Role Descriptor for a comment in/with the given repo, poster and issue
func roleDescriptor(ctx stdCtx.Context, repo *repo_model.Repository, poster *user_model.User, issue *issues_model.Issue, hasOriginalAuthor bool) (issues_model.RoleDescriptor, error) { func roleDescriptor(ctx stdCtx.Context, repo *repo_model.Repository, poster *user_model.User, issue *issues_model.Issue) (issues_model.RoleDescriptor, error) {
if hasOriginalAuthor {
return issues_model.RoleDescriptorNone, nil
}
perm, err := access_model.GetUserRepoPermission(ctx, repo, poster) perm, err := access_model.GetUserRepoPermission(ctx, repo, poster)
if err != nil { if err != nil {
return issues_model.RoleDescriptorNone, err return issues_model.RoleDescriptorNone, err
@ -1448,7 +1444,7 @@ func ViewIssue(ctx *context.Context) {
// check if dependencies can be created across repositories // check if dependencies can be created across repositories
ctx.Data["AllowCrossRepositoryDependencies"] = setting.Service.AllowCrossRepositoryDependencies ctx.Data["AllowCrossRepositoryDependencies"] = setting.Service.AllowCrossRepositoryDependencies
if issue.ShowRole, err = roleDescriptor(ctx, repo, issue.Poster, issue, issue.HasOriginalAuthor()); err != nil { if issue.ShowRole, err = roleDescriptor(ctx, repo, issue.Poster, issue); err != nil {
ctx.ServerError("roleDescriptor", err) ctx.ServerError("roleDescriptor", err)
return return
} }
@ -1487,7 +1483,7 @@ func ViewIssue(ctx *context.Context) {
continue continue
} }
comment.ShowRole, err = roleDescriptor(ctx, repo, comment.Poster, issue, comment.HasOriginalAuthor()) comment.ShowRole, err = roleDescriptor(ctx, repo, comment.Poster, issue)
if err != nil { if err != nil {
ctx.ServerError("roleDescriptor", err) ctx.ServerError("roleDescriptor", err)
return return
@ -1586,7 +1582,7 @@ func ViewIssue(ctx *context.Context) {
continue continue
} }
c.ShowRole, err = roleDescriptor(ctx, repo, c.Poster, issue, c.HasOriginalAuthor()) c.ShowRole, err = roleDescriptor(ctx, repo, c.Poster, issue)
if err != nil { if err != nil {
ctx.ServerError("roleDescriptor", err) ctx.ServerError("roleDescriptor", err)
return return
@ -3276,5 +3272,5 @@ func handleTeamMentions(ctx *context.Context) {
ctx.Data["MentionableTeams"] = teams ctx.Data["MentionableTeams"] = teams
ctx.Data["MentionableTeamsOrg"] = ctx.Repo.Owner.Name ctx.Data["MentionableTeamsOrg"] = ctx.Repo.Owner.Name
ctx.Data["MentionableTeamsOrgAvatar"] = ctx.Repo.Owner.AvatarLink(ctx) ctx.Data["MentionableTeamsOrgAvatar"] = ctx.Repo.Owner.AvatarLink()
} }

View File

@ -811,7 +811,7 @@ func renderDirectoryFiles(ctx *context.Context, timeout time.Duration) git.Entri
ctx.Data["LatestCommit"] = latestCommit ctx.Data["LatestCommit"] = latestCommit
if latestCommit != nil { if latestCommit != nil {
verification := asymkey_model.ParseCommitWithSignature(ctx, latestCommit) verification := asymkey_model.ParseCommitWithSignature(latestCommit)
if err := asymkey_model.CalculateTrustStatus(verification, ctx.Repo.Repository.GetTrustModel(), func(user *user_model.User) (bool, error) { if err := asymkey_model.CalculateTrustStatus(verification, ctx.Repo.Repository.GetTrustModel(), func(user *user_model.User) (bool, error) {
return repo_model.IsOwnerMemberCollaborator(ctx.Repo.Repository, user.ID) return repo_model.IsOwnerMemberCollaborator(ctx.Repo.Repository, user.ID)
@ -820,7 +820,7 @@ func renderDirectoryFiles(ctx *context.Context, timeout time.Duration) git.Entri
return nil return nil
} }
ctx.Data["LatestCommitVerification"] = verification ctx.Data["LatestCommitVerification"] = verification
ctx.Data["LatestCommitUser"] = user_model.ValidateCommitWithEmail(ctx, latestCommit) ctx.Data["LatestCommitUser"] = user_model.ValidateCommitWithEmail(latestCommit)
statuses, _, err := git_model.GetLatestCommitStatus(ctx, ctx.Repo.Repository.ID, latestCommit.ID.String(), db.ListOptions{}) statuses, _, err := git_model.GetLatestCommitStatus(ctx, ctx.Repo.Repository.ID, latestCommit.ID.String(), db.ListOptions{})
if err != nil { if err != nil {

View File

@ -660,7 +660,7 @@ func TestWebhook(ctx *context.Context) {
} }
} }
apiUser := convert.ToUserWithAccessMode(ctx, ctx.Doer, perm.AccessModeNone) apiUser := convert.ToUserWithAccessMode(ctx.Doer, perm.AccessModeNone)
apiCommit := &api.PayloadCommit{ apiCommit := &api.PayloadCommit{
ID: commit.ID.String(), ID: commit.ID.String(),

View File

@ -41,7 +41,7 @@ func AvatarByUserName(ctx *context.Context) {
user = user_model.NewGhostUser() user = user_model.NewGhostUser()
} }
cacheableRedirect(ctx, user.AvatarLinkWithSize(ctx, size)) cacheableRedirect(ctx, user.AvatarLinkWithSize(size))
} }
// AvatarByEmailHash redirects the browser to the email avatar link // AvatarByEmailHash redirects the browser to the email avatar link
@ -53,5 +53,5 @@ func AvatarByEmailHash(ctx *context.Context) {
return return
} }
size := ctx.FormInt("size") size := ctx.FormInt("size")
cacheableRedirect(ctx, avatars.GenerateEmailAvatarFinalLink(ctx, email, size)) cacheableRedirect(ctx, avatars.GenerateEmailAvatarFinalLink(email, size))
} }

View File

@ -38,6 +38,6 @@ func Search(ctx *context.Context) {
ctx.JSON(http.StatusOK, map[string]interface{}{ ctx.JSON(http.StatusOK, map[string]interface{}{
"ok": true, "ok": true,
"data": convert.ToUsers(ctx, ctx.Doer, users), "data": convert.ToUsers(ctx.Doer, users),
}) })
} }

View File

@ -60,7 +60,7 @@ func WebfingerQuery(ctx *context.Context) {
u, err = user_model.GetUserByName(ctx, parts[0]) u, err = user_model.GetUserByName(ctx, parts[0])
case "mailto": case "mailto":
u, err = user_model.GetUserByEmail(ctx, resource.Opaque) u, err = user_model.GetUserByEmailContext(ctx, resource.Opaque)
if u != nil && u.KeepEmailPrivate { if u != nil && u.KeepEmailPrivate {
err = user_model.ErrUserNotExist{} err = user_model.ErrUserNotExist{}
} }
@ -99,7 +99,7 @@ func WebfingerQuery(ctx *context.Context) {
}, },
{ {
Rel: "http://webfinger.net/rel/avatar", Rel: "http://webfinger.net/rel/avatar",
Href: u.AvatarLink(ctx), Href: u.AvatarLink(),
}, },
{ {
Rel: "self", Rel: "self",

View File

@ -52,7 +52,7 @@ func (n *actionsNotifier) NotifyNewIssue(ctx context.Context, issue *issues_mode
Index: issue.Index, Index: issue.Index,
Issue: convert.ToAPIIssue(ctx, issue), Issue: convert.ToAPIIssue(ctx, issue),
Repository: convert.ToRepo(ctx, issue.Repo, mode), Repository: convert.ToRepo(ctx, issue.Repo, mode),
Sender: convert.ToUser(ctx, issue.Poster, nil), Sender: convert.ToUser(issue.Poster, nil),
}).Notify(withMethod(ctx, "NotifyNewIssue")) }).Notify(withMethod(ctx, "NotifyNewIssue"))
} }
@ -70,7 +70,7 @@ func (n *actionsNotifier) NotifyIssueChangeStatus(ctx context.Context, doer *use
Index: issue.Index, Index: issue.Index,
PullRequest: convert.ToAPIPullRequest(db.DefaultContext, issue.PullRequest, nil), PullRequest: convert.ToAPIPullRequest(db.DefaultContext, issue.PullRequest, nil),
Repository: convert.ToRepo(ctx, issue.Repo, mode), Repository: convert.ToRepo(ctx, issue.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
CommitID: commitID, CommitID: commitID,
} }
if isClosed { if isClosed {
@ -88,7 +88,7 @@ func (n *actionsNotifier) NotifyIssueChangeStatus(ctx context.Context, doer *use
Index: issue.Index, Index: issue.Index,
Issue: convert.ToAPIIssue(ctx, issue), Issue: convert.ToAPIIssue(ctx, issue),
Repository: convert.ToRepo(ctx, issue.Repo, mode), Repository: convert.ToRepo(ctx, issue.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
} }
if isClosed { if isClosed {
apiIssue.Action = api.HookIssueClosed apiIssue.Action = api.HookIssueClosed
@ -134,7 +134,7 @@ func (n *actionsNotifier) NotifyIssueChangeLabels(ctx context.Context, doer *use
Index: issue.Index, Index: issue.Index,
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil), PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
Repository: convert.ToRepo(ctx, issue.Repo, perm_model.AccessModeNone), Repository: convert.ToRepo(ctx, issue.Repo, perm_model.AccessModeNone),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}). }).
Notify(ctx) Notify(ctx)
return return
@ -146,7 +146,7 @@ func (n *actionsNotifier) NotifyIssueChangeLabels(ctx context.Context, doer *use
Index: issue.Index, Index: issue.Index,
Issue: convert.ToAPIIssue(ctx, issue), Issue: convert.ToAPIIssue(ctx, issue),
Repository: convert.ToRepo(ctx, issue.Repo, mode), Repository: convert.ToRepo(ctx, issue.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}). }).
Notify(ctx) Notify(ctx)
} }
@ -165,9 +165,9 @@ func (n *actionsNotifier) NotifyCreateIssueComment(ctx context.Context, doer *us
WithPayload(&api.IssueCommentPayload{ WithPayload(&api.IssueCommentPayload{
Action: api.HookIssueCommentCreated, Action: api.HookIssueCommentCreated,
Issue: convert.ToAPIIssue(ctx, issue), Issue: convert.ToAPIIssue(ctx, issue),
Comment: convert.ToComment(ctx, comment), Comment: convert.ToComment(comment),
Repository: convert.ToRepo(ctx, repo, mode), Repository: convert.ToRepo(ctx, repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
IsPull: true, IsPull: true,
}). }).
Notify(ctx) Notify(ctx)
@ -178,9 +178,9 @@ func (n *actionsNotifier) NotifyCreateIssueComment(ctx context.Context, doer *us
WithPayload(&api.IssueCommentPayload{ WithPayload(&api.IssueCommentPayload{
Action: api.HookIssueCommentCreated, Action: api.HookIssueCommentCreated,
Issue: convert.ToAPIIssue(ctx, issue), Issue: convert.ToAPIIssue(ctx, issue),
Comment: convert.ToComment(ctx, comment), Comment: convert.ToComment(comment),
Repository: convert.ToRepo(ctx, repo, mode), Repository: convert.ToRepo(ctx, repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
IsPull: false, IsPull: false,
}). }).
Notify(ctx) Notify(ctx)
@ -210,7 +210,7 @@ func (n *actionsNotifier) NotifyNewPullRequest(ctx context.Context, pull *issues
Index: pull.Issue.Index, Index: pull.Issue.Index,
PullRequest: convert.ToAPIPullRequest(ctx, pull, nil), PullRequest: convert.ToAPIPullRequest(ctx, pull, nil),
Repository: convert.ToRepo(ctx, pull.Issue.Repo, mode), Repository: convert.ToRepo(ctx, pull.Issue.Repo, mode),
Sender: convert.ToUser(ctx, pull.Issue.Poster, nil), Sender: convert.ToUser(pull.Issue.Poster, nil),
}). }).
WithPullRequest(pull). WithPullRequest(pull).
Notify(ctx) Notify(ctx)
@ -222,8 +222,8 @@ func (n *actionsNotifier) NotifyCreateRepository(ctx context.Context, doer, u *u
newNotifyInput(repo, doer, webhook_module.HookEventRepository).WithPayload(&api.RepositoryPayload{ newNotifyInput(repo, doer, webhook_module.HookEventRepository).WithPayload(&api.RepositoryPayload{
Action: api.HookRepoCreated, Action: api.HookRepoCreated,
Repository: convert.ToRepo(ctx, repo, perm_model.AccessModeOwner), Repository: convert.ToRepo(ctx, repo, perm_model.AccessModeOwner),
Organization: convert.ToUser(ctx, u, nil), Organization: convert.ToUser(u, nil),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}).Notify(ctx) }).Notify(ctx)
} }
@ -237,7 +237,7 @@ func (n *actionsNotifier) NotifyForkRepository(ctx context.Context, doer *user_m
newNotifyInput(oldRepo, doer, webhook_module.HookEventFork).WithPayload(&api.ForkPayload{ newNotifyInput(oldRepo, doer, webhook_module.HookEventFork).WithPayload(&api.ForkPayload{
Forkee: convert.ToRepo(ctx, oldRepo, oldMode), Forkee: convert.ToRepo(ctx, oldRepo, oldMode),
Repo: convert.ToRepo(ctx, repo, mode), Repo: convert.ToRepo(ctx, repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}).Notify(ctx) }).Notify(ctx)
u := repo.MustOwner(ctx) u := repo.MustOwner(ctx)
@ -249,8 +249,8 @@ func (n *actionsNotifier) NotifyForkRepository(ctx context.Context, doer *user_m
WithPayload(&api.RepositoryPayload{ WithPayload(&api.RepositoryPayload{
Action: api.HookRepoCreated, Action: api.HookRepoCreated,
Repository: convert.ToRepo(ctx, repo, perm_model.AccessModeOwner), Repository: convert.ToRepo(ctx, repo, perm_model.AccessModeOwner),
Organization: convert.ToUser(ctx, u, nil), Organization: convert.ToUser(u, nil),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}).Notify(ctx) }).Notify(ctx)
} }
} }
@ -291,7 +291,7 @@ func (n *actionsNotifier) NotifyPullRequestReview(ctx context.Context, pr *issue
Index: review.Issue.Index, Index: review.Issue.Index,
PullRequest: convert.ToAPIPullRequest(db.DefaultContext, pr, nil), PullRequest: convert.ToAPIPullRequest(db.DefaultContext, pr, nil),
Repository: convert.ToRepo(ctx, review.Issue.Repo, mode), Repository: convert.ToRepo(ctx, review.Issue.Repo, mode),
Sender: convert.ToUser(ctx, review.Reviewer, nil), Sender: convert.ToUser(review.Reviewer, nil),
Review: &api.ReviewPayload{ Review: &api.ReviewPayload{
Type: string(reviewHookType), Type: string(reviewHookType),
Content: review.Content, Content: review.Content,
@ -329,7 +329,7 @@ func (*actionsNotifier) NotifyMergePullRequest(ctx context.Context, doer *user_m
Index: pr.Issue.Index, Index: pr.Issue.Index,
PullRequest: convert.ToAPIPullRequest(db.DefaultContext, pr, nil), PullRequest: convert.ToAPIPullRequest(db.DefaultContext, pr, nil),
Repository: convert.ToRepo(ctx, pr.Issue.Repo, mode), Repository: convert.ToRepo(ctx, pr.Issue.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
Action: api.HookIssueClosed, Action: api.HookIssueClosed,
} }
@ -343,7 +343,7 @@ func (*actionsNotifier) NotifyMergePullRequest(ctx context.Context, doer *user_m
func (n *actionsNotifier) NotifyPushCommits(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) { func (n *actionsNotifier) NotifyPushCommits(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) {
ctx = withMethod(ctx, "NotifyPushCommits") ctx = withMethod(ctx, "NotifyPushCommits")
apiPusher := convert.ToUser(ctx, pusher, nil) apiPusher := convert.ToUser(pusher, nil)
apiCommits, apiHeadCommit, err := commits.ToAPIPayloadCommits(ctx, repo.RepoPath(), repo.HTMLURL()) apiCommits, apiHeadCommit, err := commits.ToAPIPayloadCommits(ctx, repo.RepoPath(), repo.HTMLURL())
if err != nil { if err != nil {
log.Error("commits.ToAPIPayloadCommits failed: %v", err) log.Error("commits.ToAPIPayloadCommits failed: %v", err)
@ -369,7 +369,7 @@ func (n *actionsNotifier) NotifyPushCommits(ctx context.Context, pusher *user_mo
func (n *actionsNotifier) NotifyCreateRef(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, refType, refFullName, refID string) { func (n *actionsNotifier) NotifyCreateRef(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, refType, refFullName, refID string) {
ctx = withMethod(ctx, "NotifyCreateRef") ctx = withMethod(ctx, "NotifyCreateRef")
apiPusher := convert.ToUser(ctx, pusher, nil) apiPusher := convert.ToUser(pusher, nil)
apiRepo := convert.ToRepo(ctx, repo, perm_model.AccessModeNone) apiRepo := convert.ToRepo(ctx, repo, perm_model.AccessModeNone)
refName := git.RefEndName(refFullName) refName := git.RefEndName(refFullName)
@ -388,7 +388,7 @@ func (n *actionsNotifier) NotifyCreateRef(ctx context.Context, pusher *user_mode
func (n *actionsNotifier) NotifyDeleteRef(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, refType, refFullName string) { func (n *actionsNotifier) NotifyDeleteRef(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, refType, refFullName string) {
ctx = withMethod(ctx, "NotifyDeleteRef") ctx = withMethod(ctx, "NotifyDeleteRef")
apiPusher := convert.ToUser(ctx, pusher, nil) apiPusher := convert.ToUser(pusher, nil)
apiRepo := convert.ToRepo(ctx, repo, perm_model.AccessModeNone) apiRepo := convert.ToRepo(ctx, repo, perm_model.AccessModeNone)
refName := git.RefEndName(refFullName) refName := git.RefEndName(refFullName)
@ -407,7 +407,7 @@ func (n *actionsNotifier) NotifyDeleteRef(ctx context.Context, pusher *user_mode
func (n *actionsNotifier) NotifySyncPushCommits(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) { func (n *actionsNotifier) NotifySyncPushCommits(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) {
ctx = withMethod(ctx, "NotifySyncPushCommits") ctx = withMethod(ctx, "NotifySyncPushCommits")
apiPusher := convert.ToUser(ctx, pusher, nil) apiPusher := convert.ToUser(pusher, nil)
apiCommits, apiHeadCommit, err := commits.ToAPIPayloadCommits(db.DefaultContext, repo.RepoPath(), repo.HTMLURL()) apiCommits, apiHeadCommit, err := commits.ToAPIPayloadCommits(db.DefaultContext, repo.RepoPath(), repo.HTMLURL())
if err != nil { if err != nil {
log.Error("commits.ToAPIPayloadCommits failed: %v", err) log.Error("commits.ToAPIPayloadCommits failed: %v", err)
@ -490,7 +490,7 @@ func (n *actionsNotifier) NotifyPullRequestSynchronized(ctx context.Context, doe
Index: pr.Issue.Index, Index: pr.Issue.Index,
PullRequest: convert.ToAPIPullRequest(ctx, pr, nil), PullRequest: convert.ToAPIPullRequest(ctx, pr, nil),
Repository: convert.ToRepo(ctx, pr.Issue.Repo, perm_model.AccessModeNone), Repository: convert.ToRepo(ctx, pr.Issue.Repo, perm_model.AccessModeNone),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}). }).
WithPullRequest(pr). WithPullRequest(pr).
Notify(ctx) Notify(ctx)
@ -521,7 +521,7 @@ func (n *actionsNotifier) NotifyPullRequestChangeTargetBranch(ctx context.Contex
}, },
PullRequest: convert.ToAPIPullRequest(ctx, pr, nil), PullRequest: convert.ToAPIPullRequest(ctx, pr, nil),
Repository: convert.ToRepo(ctx, pr.Issue.Repo, mode), Repository: convert.ToRepo(ctx, pr.Issue.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}). }).
WithPullRequest(pr). WithPullRequest(pr).
Notify(ctx) Notify(ctx)

View File

@ -205,9 +205,9 @@ func notifyRelease(ctx context.Context, doer *user_model.User, rel *repo_model.R
WithRef(ref). WithRef(ref).
WithPayload(&api.ReleasePayload{ WithPayload(&api.ReleasePayload{
Action: action, Action: action,
Release: convert.ToRelease(ctx, rel), Release: convert.ToRelease(rel),
Repository: convert.ToRepo(ctx, rel.Repo, mode), Repository: convert.ToRepo(ctx, rel.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}). }).
Notify(ctx) Notify(ctx)
} }
@ -230,7 +230,7 @@ func notifyPackage(ctx context.Context, sender *user_model.User, pd *packages_mo
WithPayload(&api.PackagePayload{ WithPayload(&api.PackagePayload{
Action: action, Action: action,
Package: apiPackage, Package: apiPackage,
Sender: convert.ToUser(ctx, sender, nil), Sender: convert.ToUser(sender, nil),
}). }).
Notify(ctx) Notify(ctx)
} }

View File

@ -207,7 +207,7 @@ Loop:
if commit.Signature == nil { if commit.Signature == nil {
return false, "", nil, &ErrWontSign{parentSigned} return false, "", nil, &ErrWontSign{parentSigned}
} }
verification := asymkey_model.ParseCommitWithSignature(ctx, commit) verification := asymkey_model.ParseCommitWithSignature(commit)
if !verification.Verified { if !verification.Verified {
return false, "", nil, &ErrWontSign{parentSigned} return false, "", nil, &ErrWontSign{parentSigned}
} }
@ -260,7 +260,7 @@ Loop:
if commit.Signature == nil { if commit.Signature == nil {
return false, "", nil, &ErrWontSign{parentSigned} return false, "", nil, &ErrWontSign{parentSigned}
} }
verification := asymkey_model.ParseCommitWithSignature(ctx, commit) verification := asymkey_model.ParseCommitWithSignature(commit)
if !verification.Verified { if !verification.Verified {
return false, "", nil, &ErrWontSign{parentSigned} return false, "", nil, &ErrWontSign{parentSigned}
} }
@ -332,7 +332,7 @@ Loop:
if err != nil { if err != nil {
return false, "", nil, err return false, "", nil, err
} }
verification := asymkey_model.ParseCommitWithSignature(ctx, commit) verification := asymkey_model.ParseCommitWithSignature(commit)
if !verification.Verified { if !verification.Verified {
return false, "", nil, &ErrWontSign{baseSigned} return false, "", nil, &ErrWontSign{baseSigned}
} }
@ -348,7 +348,7 @@ Loop:
if err != nil { if err != nil {
return false, "", nil, err return false, "", nil, err
} }
verification := asymkey_model.ParseCommitWithSignature(ctx, commit) verification := asymkey_model.ParseCommitWithSignature(commit)
if !verification.Verified { if !verification.Verified {
return false, "", nil, &ErrWontSign{headSigned} return false, "", nil, &ErrWontSign{headSigned}
} }
@ -364,7 +364,7 @@ Loop:
if err != nil { if err != nil {
return false, "", nil, err return false, "", nil, err
} }
verification := asymkey_model.ParseCommitWithSignature(ctx, commit) verification := asymkey_model.ParseCommitWithSignature(commit)
if !verification.Verified { if !verification.Verified {
return false, "", nil, &ErrWontSign{commitsSigned} return false, "", nil, &ErrWontSign{commitsSigned}
} }
@ -378,7 +378,7 @@ Loop:
return false, "", nil, err return false, "", nil, err
} }
for _, commit := range commitList { for _, commit := range commitList {
verification := asymkey_model.ParseCommitWithSignature(ctx, commit) verification := asymkey_model.ParseCommitWithSignature(commit)
if !verification.Verified { if !verification.Verified {
return false, "", nil, &ErrWontSign{commitsSigned} return false, "", nil, &ErrWontSign{commitsSigned}
} }

View File

@ -91,7 +91,7 @@ func (r *ReverseProxy) getUserFromAuthEmail(req *http.Request) *user_model.User
} }
log.Trace("ReverseProxy Authorization: Found email: %s", email) log.Trace("ReverseProxy Authorization: Found email: %s", email)
user, err := user_model.GetUserByEmail(req.Context(), email) user, err := user_model.GetUserByEmail(email)
if err != nil { if err != nil {
// Do not allow auto-registration, we don't have a username here // Do not allow auto-registration, we don't have a username here
if !user_model.IsErrUserNotExist(err) { if !user_model.IsErrUserNotExist(err) {

View File

@ -39,7 +39,7 @@ func ToEmail(email *user_model.EmailAddress) *api.Email {
} }
// ToBranch convert a git.Commit and git.Branch to an api.Branch // ToBranch convert a git.Commit and git.Branch to an api.Branch
func ToBranch(ctx context.Context, repo *repo_model.Repository, b *git.Branch, c *git.Commit, bp *git_model.ProtectedBranch, user *user_model.User, isRepoAdmin bool) (*api.Branch, error) { func ToBranch(repo *repo_model.Repository, b *git.Branch, c *git.Commit, bp *git_model.ProtectedBranch, user *user_model.User, isRepoAdmin bool) (*api.Branch, error) {
if bp == nil { if bp == nil {
var hasPerm bool var hasPerm bool
var canPush bool var canPush bool
@ -59,7 +59,7 @@ func ToBranch(ctx context.Context, repo *repo_model.Repository, b *git.Branch, c
return &api.Branch{ return &api.Branch{
Name: b.Name, Name: b.Name,
Commit: ToPayloadCommit(ctx, repo, c), Commit: ToPayloadCommit(repo, c),
Protected: false, Protected: false,
RequiredApprovals: 0, RequiredApprovals: 0,
EnableStatusCheck: false, EnableStatusCheck: false,
@ -71,7 +71,7 @@ func ToBranch(ctx context.Context, repo *repo_model.Repository, b *git.Branch, c
branch := &api.Branch{ branch := &api.Branch{
Name: b.Name, Name: b.Name,
Commit: ToPayloadCommit(ctx, repo, c), Commit: ToPayloadCommit(repo, c),
Protected: true, Protected: true,
RequiredApprovals: bp.RequiredApprovals, RequiredApprovals: bp.RequiredApprovals,
EnableStatusCheck: bp.EnableStatusCheck, EnableStatusCheck: bp.EnableStatusCheck,
@ -169,8 +169,8 @@ func ToTag(repo *repo_model.Repository, t *git.Tag) *api.Tag {
} }
// ToVerification convert a git.Commit.Signature to an api.PayloadCommitVerification // ToVerification convert a git.Commit.Signature to an api.PayloadCommitVerification
func ToVerification(ctx context.Context, c *git.Commit) *api.PayloadCommitVerification { func ToVerification(c *git.Commit) *api.PayloadCommitVerification {
verif := asymkey_model.ParseCommitWithSignature(ctx, c) verif := asymkey_model.ParseCommitWithSignature(c)
commitVerification := &api.PayloadCommitVerification{ commitVerification := &api.PayloadCommitVerification{
Verified: verif.Verified, Verified: verif.Verified,
Reason: verif.Reason, Reason: verif.Reason,
@ -271,10 +271,10 @@ func ToDeployKey(apiLink string, key *asymkey_model.DeployKey) *api.DeployKey {
} }
// ToOrganization convert user_model.User to api.Organization // ToOrganization convert user_model.User to api.Organization
func ToOrganization(ctx context.Context, org *organization.Organization) *api.Organization { func ToOrganization(org *organization.Organization) *api.Organization {
return &api.Organization{ return &api.Organization{
ID: org.ID, ID: org.ID,
AvatarURL: org.AsUser().AvatarLink(ctx), AvatarURL: org.AsUser().AvatarLink(),
Name: org.Name, Name: org.Name,
UserName: org.Name, UserName: org.Name,
FullName: org.FullName, FullName: org.FullName,
@ -287,8 +287,8 @@ func ToOrganization(ctx context.Context, org *organization.Organization) *api.Or
} }
// ToTeam convert models.Team to api.Team // ToTeam convert models.Team to api.Team
func ToTeam(ctx context.Context, team *organization.Team, loadOrg ...bool) (*api.Team, error) { func ToTeam(team *organization.Team, loadOrg ...bool) (*api.Team, error) {
teams, err := ToTeams(ctx, []*organization.Team{team}, len(loadOrg) != 0 && loadOrg[0]) teams, err := ToTeams([]*organization.Team{team}, len(loadOrg) != 0 && loadOrg[0])
if err != nil || len(teams) == 0 { if err != nil || len(teams) == 0 {
return nil, err return nil, err
} }
@ -296,7 +296,7 @@ func ToTeam(ctx context.Context, team *organization.Team, loadOrg ...bool) (*api
} }
// ToTeams convert models.Team list to api.Team list // ToTeams convert models.Team list to api.Team list
func ToTeams(ctx context.Context, teams []*organization.Team, loadOrgs bool) ([]*api.Team, error) { func ToTeams(teams []*organization.Team, loadOrgs bool) ([]*api.Team, error) {
if len(teams) == 0 || teams[0] == nil { if len(teams) == 0 || teams[0] == nil {
return nil, nil return nil, nil
} }
@ -326,7 +326,7 @@ func ToTeams(ctx context.Context, teams []*organization.Team, loadOrgs bool) ([]
if err != nil { if err != nil {
return nil, err return nil, err
} }
apiOrg = ToOrganization(ctx, org) apiOrg = ToOrganization(org)
cache[teams[i].OrgID] = apiOrg cache[teams[i].OrgID] = apiOrg
} }
apiTeams[i].Organization = apiOrg apiTeams[i].Organization = apiOrg
@ -336,7 +336,7 @@ func ToTeams(ctx context.Context, teams []*organization.Team, loadOrgs bool) ([]
} }
// ToAnnotatedTag convert git.Tag to api.AnnotatedTag // ToAnnotatedTag convert git.Tag to api.AnnotatedTag
func ToAnnotatedTag(ctx context.Context, repo *repo_model.Repository, t *git.Tag, c *git.Commit) *api.AnnotatedTag { func ToAnnotatedTag(repo *repo_model.Repository, t *git.Tag, c *git.Commit) *api.AnnotatedTag {
return &api.AnnotatedTag{ return &api.AnnotatedTag{
Tag: t.Name, Tag: t.Name,
SHA: t.ID.String(), SHA: t.ID.String(),
@ -344,7 +344,7 @@ func ToAnnotatedTag(ctx context.Context, repo *repo_model.Repository, t *git.Tag
Message: t.Message, Message: t.Message,
URL: util.URLJoin(repo.APIURL(), "git/tags", t.ID.String()), URL: util.URLJoin(repo.APIURL(), "git/tags", t.ID.String()),
Tagger: ToCommitUser(t.Tagger), Tagger: ToCommitUser(t.Tagger),
Verification: ToVerification(ctx, c), Verification: ToVerification(c),
} }
} }

View File

@ -4,7 +4,6 @@
package convert package convert
import ( import (
"context"
"net/url" "net/url"
"time" "time"
@ -38,16 +37,16 @@ func ToCommitMeta(repo *repo_model.Repository, tag *git.Tag) *api.CommitMeta {
} }
// ToPayloadCommit convert a git.Commit to api.PayloadCommit // ToPayloadCommit convert a git.Commit to api.PayloadCommit
func ToPayloadCommit(ctx context.Context, repo *repo_model.Repository, c *git.Commit) *api.PayloadCommit { func ToPayloadCommit(repo *repo_model.Repository, c *git.Commit) *api.PayloadCommit {
authorUsername := "" authorUsername := ""
if author, err := user_model.GetUserByEmail(ctx, c.Author.Email); err == nil { if author, err := user_model.GetUserByEmail(c.Author.Email); err == nil {
authorUsername = author.Name authorUsername = author.Name
} else if !user_model.IsErrUserNotExist(err) { } else if !user_model.IsErrUserNotExist(err) {
log.Error("GetUserByEmail: %v", err) log.Error("GetUserByEmail: %v", err)
} }
committerUsername := "" committerUsername := ""
if committer, err := user_model.GetUserByEmail(ctx, c.Committer.Email); err == nil { if committer, err := user_model.GetUserByEmail(c.Committer.Email); err == nil {
committerUsername = committer.Name committerUsername = committer.Name
} else if !user_model.IsErrUserNotExist(err) { } else if !user_model.IsErrUserNotExist(err) {
log.Error("GetUserByEmail: %v", err) log.Error("GetUserByEmail: %v", err)
@ -68,12 +67,12 @@ func ToPayloadCommit(ctx context.Context, repo *repo_model.Repository, c *git.Co
UserName: committerUsername, UserName: committerUsername,
}, },
Timestamp: c.Author.When, Timestamp: c.Author.When,
Verification: ToVerification(ctx, c), Verification: ToVerification(c),
} }
} }
// ToCommit convert a git.Commit to api.Commit // ToCommit convert a git.Commit to api.Commit
func ToCommit(ctx context.Context, repo *repo_model.Repository, gitRepo *git.Repository, commit *git.Commit, userCache map[string]*user_model.User, stat bool) (*api.Commit, error) { func ToCommit(repo *repo_model.Repository, gitRepo *git.Repository, commit *git.Commit, userCache map[string]*user_model.User, stat bool) (*api.Commit, error) {
var apiAuthor, apiCommitter *api.User var apiAuthor, apiCommitter *api.User
// Retrieve author and committer information // Retrieve author and committer information
@ -88,13 +87,13 @@ func ToCommit(ctx context.Context, repo *repo_model.Repository, gitRepo *git.Rep
} }
if ok { if ok {
apiAuthor = ToUser(ctx, cacheAuthor, nil) apiAuthor = ToUser(cacheAuthor, nil)
} else { } else {
author, err := user_model.GetUserByEmail(ctx, commit.Author.Email) author, err := user_model.GetUserByEmail(commit.Author.Email)
if err != nil && !user_model.IsErrUserNotExist(err) { if err != nil && !user_model.IsErrUserNotExist(err) {
return nil, err return nil, err
} else if err == nil { } else if err == nil {
apiAuthor = ToUser(ctx, author, nil) apiAuthor = ToUser(author, nil)
if userCache != nil { if userCache != nil {
userCache[commit.Author.Email] = author userCache[commit.Author.Email] = author
} }
@ -110,13 +109,13 @@ func ToCommit(ctx context.Context, repo *repo_model.Repository, gitRepo *git.Rep
} }
if ok { if ok {
apiCommitter = ToUser(ctx, cacheCommitter, nil) apiCommitter = ToUser(cacheCommitter, nil)
} else { } else {
committer, err := user_model.GetUserByEmail(ctx, commit.Committer.Email) committer, err := user_model.GetUserByEmail(commit.Committer.Email)
if err != nil && !user_model.IsErrUserNotExist(err) { if err != nil && !user_model.IsErrUserNotExist(err) {
return nil, err return nil, err
} else if err == nil { } else if err == nil {
apiCommitter = ToUser(ctx, committer, nil) apiCommitter = ToUser(committer, nil)
if userCache != nil { if userCache != nil {
userCache[commit.Committer.Email] = committer userCache[commit.Committer.Email] = committer
} }
@ -162,7 +161,7 @@ func ToCommit(ctx context.Context, repo *repo_model.Repository, gitRepo *git.Rep
SHA: commit.ID.String(), SHA: commit.ID.String(),
Created: commit.Committer.When, Created: commit.Committer.When,
}, },
Verification: ToVerification(ctx, commit), Verification: ToVerification(commit),
}, },
Author: apiAuthor, Author: apiAuthor,
Committer: apiCommitter, Committer: apiCommitter,

View File

@ -41,7 +41,7 @@ func ToAPIIssue(ctx context.Context, issue *issues_model.Issue) *api.Issue {
URL: issue.APIURL(), URL: issue.APIURL(),
HTMLURL: issue.HTMLURL(), HTMLURL: issue.HTMLURL(),
Index: issue.Index, Index: issue.Index,
Poster: ToUser(ctx, issue.Poster, nil), Poster: ToUser(issue.Poster, nil),
Title: issue.Title, Title: issue.Title,
Body: issue.Content, Body: issue.Content,
Attachments: ToAttachments(issue.Attachments), Attachments: ToAttachments(issue.Attachments),
@ -77,9 +77,9 @@ func ToAPIIssue(ctx context.Context, issue *issues_model.Issue) *api.Issue {
} }
if len(issue.Assignees) > 0 { if len(issue.Assignees) > 0 {
for _, assignee := range issue.Assignees { for _, assignee := range issue.Assignees {
apiIssue.Assignees = append(apiIssue.Assignees, ToUser(ctx, assignee, nil)) apiIssue.Assignees = append(apiIssue.Assignees, ToUser(assignee, nil))
} }
apiIssue.Assignee = ToUser(ctx, issue.Assignees[0], nil) // For compatibility, we're keeping the first assignee as `apiIssue.Assignee` apiIssue.Assignee = ToUser(issue.Assignees[0], nil) // For compatibility, we're keeping the first assignee as `apiIssue.Assignee`
} }
if issue.IsPull { if issue.IsPull {
if err := issue.LoadPullRequest(ctx); err != nil { if err := issue.LoadPullRequest(ctx); err != nil {

View File

@ -14,10 +14,10 @@ import (
) )
// ToComment converts a issues_model.Comment to the api.Comment format // ToComment converts a issues_model.Comment to the api.Comment format
func ToComment(ctx context.Context, c *issues_model.Comment) *api.Comment { func ToComment(c *issues_model.Comment) *api.Comment {
return &api.Comment{ return &api.Comment{
ID: c.ID, ID: c.ID,
Poster: ToUser(ctx, c.Poster, nil), Poster: ToUser(c.Poster, nil),
HTMLURL: c.HTMLURL(), HTMLURL: c.HTMLURL(),
IssueURL: c.IssueURL(), IssueURL: c.IssueURL(),
PRURL: c.PRURL(), PRURL: c.PRURL(),
@ -69,7 +69,7 @@ func ToTimelineComment(ctx context.Context, c *issues_model.Comment, doer *user_
comment := &api.TimelineComment{ comment := &api.TimelineComment{
ID: c.ID, ID: c.ID,
Type: c.Type.String(), Type: c.Type.String(),
Poster: ToUser(ctx, c.Poster, nil), Poster: ToUser(c.Poster, nil),
HTMLURL: c.HTMLURL(), HTMLURL: c.HTMLURL(),
IssueURL: c.IssueURL(), IssueURL: c.IssueURL(),
PRURL: c.PRURL(), PRURL: c.PRURL(),
@ -131,7 +131,7 @@ func ToTimelineComment(ctx context.Context, c *issues_model.Comment, doer *user_
log.Error("LoadPoster: %v", err) log.Error("LoadPoster: %v", err)
return nil return nil
} }
comment.RefComment = ToComment(ctx, com) comment.RefComment = ToComment(com)
} }
if c.Label != nil { if c.Label != nil {
@ -157,14 +157,14 @@ func ToTimelineComment(ctx context.Context, c *issues_model.Comment, doer *user_
} }
if c.Assignee != nil { if c.Assignee != nil {
comment.Assignee = ToUser(ctx, c.Assignee, nil) comment.Assignee = ToUser(c.Assignee, nil)
} }
if c.AssigneeTeam != nil { if c.AssigneeTeam != nil {
comment.AssigneeTeam, _ = ToTeam(ctx, c.AssigneeTeam) comment.AssigneeTeam, _ = ToTeam(c.AssigneeTeam)
} }
if c.ResolveDoer != nil { if c.ResolveDoer != nil {
comment.ResolveDoer = ToUser(ctx, c.ResolveDoer, nil) comment.ResolveDoer = ToUser(c.ResolveDoer, nil)
} }
if c.DependentIssue != nil { if c.DependentIssue != nil {

View File

@ -28,9 +28,9 @@ func ToPackage(ctx context.Context, pd *packages.PackageDescriptor, doer *user_m
return &api.Package{ return &api.Package{
ID: pd.Version.ID, ID: pd.Version.ID,
Owner: ToUser(ctx, pd.Owner, doer), Owner: ToUser(pd.Owner, doer),
Repository: repo, Repository: repo,
Creator: ToUser(ctx, pd.Creator, doer), Creator: ToUser(pd.Creator, doer),
Type: string(pd.Package.Type), Type: string(pd.Package.Type),
Name: pd.Package.Name, Name: pd.Package.Name,
Version: pd.Version.Version, Version: pd.Version.Version,

View File

@ -201,7 +201,7 @@ func ToAPIPullRequest(ctx context.Context, pr *issues_model.PullRequest, doer *u
if pr.HasMerged { if pr.HasMerged {
apiPullRequest.Merged = pr.MergedUnix.AsTimePtr() apiPullRequest.Merged = pr.MergedUnix.AsTimePtr()
apiPullRequest.MergedCommitID = &pr.MergedCommitID apiPullRequest.MergedCommitID = &pr.MergedCommitID
apiPullRequest.MergedBy = ToUser(ctx, pr.Merger, nil) apiPullRequest.MergedBy = ToUser(pr.Merger, nil)
} }
return apiPullRequest return apiPullRequest

View File

@ -21,14 +21,14 @@ func ToPullReview(ctx context.Context, r *issues_model.Review, doer *user_model.
r.Reviewer = user_model.NewGhostUser() r.Reviewer = user_model.NewGhostUser()
} }
apiTeam, err := ToTeam(ctx, r.ReviewerTeam) apiTeam, err := ToTeam(r.ReviewerTeam)
if err != nil { if err != nil {
return nil, err return nil, err
} }
result := &api.PullReview{ result := &api.PullReview{
ID: r.ID, ID: r.ID,
Reviewer: ToUser(ctx, r.Reviewer, doer), Reviewer: ToUser(r.Reviewer, doer),
ReviewerTeam: apiTeam, ReviewerTeam: apiTeam,
State: api.ReviewStateUnknown, State: api.ReviewStateUnknown,
Body: r.Content, Body: r.Content,
@ -93,8 +93,8 @@ func ToPullReviewCommentList(ctx context.Context, review *issues_model.Review, d
apiComment := &api.PullReviewComment{ apiComment := &api.PullReviewComment{
ID: comment.ID, ID: comment.ID,
Body: comment.Content, Body: comment.Content,
Poster: ToUser(ctx, comment.Poster, doer), Poster: ToUser(comment.Poster, doer),
Resolver: ToUser(ctx, comment.ResolveDoer, doer), Resolver: ToUser(comment.ResolveDoer, doer),
ReviewID: review.ID, ReviewID: review.ID,
Created: comment.CreatedUnix.AsTime(), Created: comment.CreatedUnix.AsTime(),
Updated: comment.UpdatedUnix.AsTime(), Updated: comment.UpdatedUnix.AsTime(),

View File

@ -4,14 +4,12 @@
package convert package convert
import ( import (
"context"
repo_model "code.gitea.io/gitea/models/repo" repo_model "code.gitea.io/gitea/models/repo"
api "code.gitea.io/gitea/modules/structs" api "code.gitea.io/gitea/modules/structs"
) )
// ToRelease convert a repo_model.Release to api.Release // ToRelease convert a repo_model.Release to api.Release
func ToRelease(ctx context.Context, r *repo_model.Release) *api.Release { func ToRelease(r *repo_model.Release) *api.Release {
return &api.Release{ return &api.Release{
ID: r.ID, ID: r.ID,
TagName: r.TagName, TagName: r.TagName,
@ -26,7 +24,7 @@ func ToRelease(ctx context.Context, r *repo_model.Release) *api.Release {
IsPrerelease: r.IsPrerelease, IsPrerelease: r.IsPrerelease,
CreatedAt: r.CreatedUnix.AsTime(), CreatedAt: r.CreatedUnix.AsTime(),
PublishedAt: r.CreatedUnix.AsTime(), PublishedAt: r.CreatedUnix.AsTime(),
Publisher: ToUser(ctx, r.Publisher, nil), Publisher: ToUser(r.Publisher, nil),
Attachments: ToAttachments(r.Attachments), Attachments: ToAttachments(r.Attachments),
} }
} }

View File

@ -126,7 +126,7 @@ func innerToRepo(ctx context.Context, repo *repo_model.Repository, mode perm.Acc
if err := t.LoadAttributes(ctx); err != nil { if err := t.LoadAttributes(ctx); err != nil {
log.Warn("LoadAttributes of RepoTransfer: %v", err) log.Warn("LoadAttributes of RepoTransfer: %v", err)
} else { } else {
transfer = ToRepoTransfer(ctx, t) transfer = ToRepoTransfer(t)
} }
} }
} }
@ -140,7 +140,7 @@ func innerToRepo(ctx context.Context, repo *repo_model.Repository, mode perm.Acc
return &api.Repository{ return &api.Repository{
ID: repo.ID, ID: repo.ID,
Owner: ToUserWithAccessMode(ctx, repo.Owner, mode), Owner: ToUserWithAccessMode(repo.Owner, mode),
Name: repo.Name, Name: repo.Name,
FullName: repo.FullName(), FullName: repo.FullName(),
Description: repo.Description, Description: repo.Description,
@ -185,7 +185,7 @@ func innerToRepo(ctx context.Context, repo *repo_model.Repository, mode perm.Acc
DefaultDeleteBranchAfterMerge: defaultDeleteBranchAfterMerge, DefaultDeleteBranchAfterMerge: defaultDeleteBranchAfterMerge,
DefaultMergeStyle: string(defaultMergeStyle), DefaultMergeStyle: string(defaultMergeStyle),
DefaultAllowMaintainerEdit: defaultAllowMaintainerEdit, DefaultAllowMaintainerEdit: defaultAllowMaintainerEdit,
AvatarURL: repo.AvatarLink(ctx), AvatarURL: repo.AvatarLink(),
Internal: !repo.IsPrivate && repo.Owner.Visibility == api.VisibleTypePrivate, Internal: !repo.IsPrivate && repo.Owner.Visibility == api.VisibleTypePrivate,
MirrorInterval: mirrorInterval, MirrorInterval: mirrorInterval,
MirrorUpdated: mirrorUpdated, MirrorUpdated: mirrorUpdated,
@ -194,12 +194,12 @@ func innerToRepo(ctx context.Context, repo *repo_model.Repository, mode perm.Acc
} }
// ToRepoTransfer convert a models.RepoTransfer to a structs.RepeTransfer // ToRepoTransfer convert a models.RepoTransfer to a structs.RepeTransfer
func ToRepoTransfer(ctx context.Context, t *models.RepoTransfer) *api.RepoTransfer { func ToRepoTransfer(t *models.RepoTransfer) *api.RepoTransfer {
teams, _ := ToTeams(ctx, t.Teams, false) teams, _ := ToTeams(t.Teams, false)
return &api.RepoTransfer{ return &api.RepoTransfer{
Doer: ToUser(ctx, t.Doer, nil), Doer: ToUser(t.Doer, nil),
Recipient: ToUser(ctx, t.Recipient, nil), Recipient: ToUser(t.Recipient, nil),
Teams: teams, Teams: teams,
} }
} }

View File

@ -26,7 +26,7 @@ func ToCommitStatus(ctx context.Context, status *git_model.CommitStatus) *api.Co
if status.CreatorID != 0 { if status.CreatorID != 0 {
creator, _ := user_model.GetUserByID(ctx, status.CreatorID) creator, _ := user_model.GetUserByID(ctx, status.CreatorID)
apiStatus.Creator = ToUser(ctx, creator, nil) apiStatus.Creator = ToUser(creator, nil)
} }
return apiStatus return apiStatus

View File

@ -4,8 +4,6 @@
package convert package convert
import ( import (
"context"
"code.gitea.io/gitea/models/perm" "code.gitea.io/gitea/models/perm"
user_model "code.gitea.io/gitea/models/user" user_model "code.gitea.io/gitea/models/user"
api "code.gitea.io/gitea/modules/structs" api "code.gitea.io/gitea/modules/structs"
@ -13,7 +11,7 @@ import (
// ToUser convert user_model.User to api.User // ToUser convert user_model.User to api.User
// if doer is set, private information is added if the doer has the permission to see it // if doer is set, private information is added if the doer has the permission to see it
func ToUser(ctx context.Context, user, doer *user_model.User) *api.User { func ToUser(user, doer *user_model.User) *api.User {
if user == nil { if user == nil {
return nil return nil
} }
@ -23,36 +21,36 @@ func ToUser(ctx context.Context, user, doer *user_model.User) *api.User {
signed = true signed = true
authed = doer.ID == user.ID || doer.IsAdmin authed = doer.ID == user.ID || doer.IsAdmin
} }
return toUser(ctx, user, signed, authed) return toUser(user, signed, authed)
} }
// ToUsers convert list of user_model.User to list of api.User // ToUsers convert list of user_model.User to list of api.User
func ToUsers(ctx context.Context, doer *user_model.User, users []*user_model.User) []*api.User { func ToUsers(doer *user_model.User, users []*user_model.User) []*api.User {
result := make([]*api.User, len(users)) result := make([]*api.User, len(users))
for i := range users { for i := range users {
result[i] = ToUser(ctx, users[i], doer) result[i] = ToUser(users[i], doer)
} }
return result return result
} }
// ToUserWithAccessMode convert user_model.User to api.User // ToUserWithAccessMode convert user_model.User to api.User
// AccessMode is not none show add some more information // AccessMode is not none show add some more information
func ToUserWithAccessMode(ctx context.Context, user *user_model.User, accessMode perm.AccessMode) *api.User { func ToUserWithAccessMode(user *user_model.User, accessMode perm.AccessMode) *api.User {
if user == nil { if user == nil {
return nil return nil
} }
return toUser(ctx, user, accessMode != perm.AccessModeNone, false) return toUser(user, accessMode != perm.AccessModeNone, false)
} }
// toUser convert user_model.User to api.User // toUser convert user_model.User to api.User
// signed shall only be set if requester is logged in. authed shall only be set if user is site admin or user himself // signed shall only be set if requester is logged in. authed shall only be set if user is site admin or user himself
func toUser(ctx context.Context, user *user_model.User, signed, authed bool) *api.User { func toUser(user *user_model.User, signed, authed bool) *api.User {
result := &api.User{ result := &api.User{
ID: user.ID, ID: user.ID,
UserName: user.Name, UserName: user.Name,
FullName: user.FullName, FullName: user.FullName,
Email: user.GetEmail(), Email: user.GetEmail(),
AvatarURL: user.AvatarLink(ctx), AvatarURL: user.AvatarLink(),
Created: user.CreatedUnix.AsTime(), Created: user.CreatedUnix.AsTime(),
Restricted: user.IsRestricted, Restricted: user.IsRestricted,
Location: user.Location, Location: user.Location,
@ -99,9 +97,9 @@ func User2UserSettings(user *user_model.User) api.UserSettings {
} }
// ToUserAndPermission return User and its collaboration permission for a repository // ToUserAndPermission return User and its collaboration permission for a repository
func ToUserAndPermission(ctx context.Context, user, doer *user_model.User, accessMode perm.AccessMode) api.RepoCollaboratorPermission { func ToUserAndPermission(user, doer *user_model.User, accessMode perm.AccessMode) api.RepoCollaboratorPermission {
return api.RepoCollaboratorPermission{ return api.RepoCollaboratorPermission{
User: ToUser(ctx, user, doer), User: ToUser(user, doer),
Permission: accessMode.String(), Permission: accessMode.String(),
RoleName: accessMode.String(), RoleName: accessMode.String(),
} }

View File

@ -6,7 +6,6 @@ package convert
import ( import (
"testing" "testing"
"code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/models/unittest" "code.gitea.io/gitea/models/unittest"
user_model "code.gitea.io/gitea/models/user" user_model "code.gitea.io/gitea/models/user"
api "code.gitea.io/gitea/modules/structs" api "code.gitea.io/gitea/modules/structs"
@ -19,22 +18,22 @@ func TestUser_ToUser(t *testing.T) {
user1 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1, IsAdmin: true}) user1 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1, IsAdmin: true})
apiUser := toUser(db.DefaultContext, user1, true, true) apiUser := toUser(user1, true, true)
assert.True(t, apiUser.IsAdmin) assert.True(t, apiUser.IsAdmin)
assert.Contains(t, apiUser.AvatarURL, "://") assert.Contains(t, apiUser.AvatarURL, "://")
user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2, IsAdmin: false}) user2 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 2, IsAdmin: false})
apiUser = toUser(db.DefaultContext, user2, true, true) apiUser = toUser(user2, true, true)
assert.False(t, apiUser.IsAdmin) assert.False(t, apiUser.IsAdmin)
apiUser = toUser(db.DefaultContext, user1, false, false) apiUser = toUser(user1, false, false)
assert.False(t, apiUser.IsAdmin) assert.False(t, apiUser.IsAdmin)
assert.EqualValues(t, api.VisibleTypePublic.String(), apiUser.Visibility) assert.EqualValues(t, api.VisibleTypePublic.String(), apiUser.Visibility)
user31 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 31, IsAdmin: false, Visibility: api.VisibleTypePrivate}) user31 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 31, IsAdmin: false, Visibility: api.VisibleTypePrivate})
apiUser = toUser(db.DefaultContext, user31, true, true) apiUser = toUser(user31, true, true)
assert.False(t, apiUser.IsAdmin) assert.False(t, apiUser.IsAdmin)
assert.EqualValues(t, api.VisibleTypePrivate.String(), apiUser.Visibility) assert.EqualValues(t, api.VisibleTypePrivate.String(), apiUser.Visibility)
} }

View File

@ -256,7 +256,7 @@ func manuallyMerged(ctx context.Context, pr *issues_model.PullRequest) bool {
pr.MergedCommitID = commit.ID.String() pr.MergedCommitID = commit.ID.String()
pr.MergedUnix = timeutil.TimeStamp(commit.Author.When.Unix()) pr.MergedUnix = timeutil.TimeStamp(commit.Author.When.Unix())
pr.Status = issues_model.PullRequestStatusManuallyMerged pr.Status = issues_model.PullRequestStatusManuallyMerged
merger, _ := user_model.GetUserByEmail(ctx, commit.Author.Email) merger, _ := user_model.GetUserByEmail(commit.Author.Email)
// When the commit author is unknown set the BaseRepo owner as merger // When the commit author is unknown set the BaseRepo owner as merger
if merger == nil { if merger == nil {

View File

@ -102,7 +102,7 @@ func createTag(ctx context.Context, gitRepo *git.Repository, rel *repo_model.Rel
} }
if rel.PublisherID <= 0 { if rel.PublisherID <= 0 {
u, err := user_model.GetUserByEmail(ctx, commit.Author.Email) u, err := user_model.GetUserByEmailContext(ctx, commit.Author.Email)
if err == nil { if err == nil {
rel.PublisherID = u.ID rel.PublisherID = u.ID
} }

View File

@ -115,7 +115,7 @@ func CherryPick(ctx context.Context, repo *repo_model.Repository, doer *user_mod
} }
fileCommitResponse, _ := GetFileCommitResponse(repo, commit) // ok if fails, then will be nil fileCommitResponse, _ := GetFileCommitResponse(repo, commit) // ok if fails, then will be nil
verification := GetPayloadCommitVerification(ctx, commit) verification := GetPayloadCommitVerification(commit)
fileResponse := &structs.FileResponse{ fileResponse := &structs.FileResponse{
Commit: fileCommitResponse, Commit: fileCommitResponse,
Verification: verification, Verification: verification,

View File

@ -66,9 +66,9 @@ func CountDivergingCommits(ctx context.Context, repo *repo_model.Repository, bra
} }
// GetPayloadCommitVerification returns the verification information of a commit // GetPayloadCommitVerification returns the verification information of a commit
func GetPayloadCommitVerification(ctx context.Context, commit *git.Commit) *structs.PayloadCommitVerification { func GetPayloadCommitVerification(commit *git.Commit) *structs.PayloadCommitVerification {
verification := &structs.PayloadCommitVerification{} verification := &structs.PayloadCommitVerification{}
commitVerification := asymkey_model.ParseCommitWithSignature(ctx, commit) commitVerification := asymkey_model.ParseCommitWithSignature(commit)
if commit.Signature != nil { if commit.Signature != nil {
verification.Signature = commit.Signature.Signature verification.Signature = commit.Signature.Signature
verification.Payload = commit.Signature.Payload verification.Payload = commit.Signature.Payload

View File

@ -21,7 +21,7 @@ import (
func GetFileResponseFromCommit(ctx context.Context, repo *repo_model.Repository, commit *git.Commit, branch, treeName string) (*api.FileResponse, error) { func GetFileResponseFromCommit(ctx context.Context, repo *repo_model.Repository, commit *git.Commit, branch, treeName string) (*api.FileResponse, error) {
fileContents, _ := GetContents(ctx, repo, treeName, branch, false) // ok if fails, then will be nil fileContents, _ := GetContents(ctx, repo, treeName, branch, false) // ok if fails, then will be nil
fileCommitResponse, _ := GetFileCommitResponse(repo, commit) // ok if fails, then will be nil fileCommitResponse, _ := GetFileCommitResponse(repo, commit) // ok if fails, then will be nil
verification := GetPayloadCommitVerification(ctx, commit) verification := GetPayloadCommitVerification(commit)
fileResponse := &api.FileResponse{ fileResponse := &api.FileResponse{
Content: fileContents, Content: fileContents,
Commit: fileCommitResponse, Commit: fileCommitResponse,

View File

@ -183,7 +183,7 @@ func ApplyDiffPatch(ctx context.Context, repo *repo_model.Repository, doer *user
} }
fileCommitResponse, _ := GetFileCommitResponse(repo, commit) // ok if fails, then will be nil fileCommitResponse, _ := GetFileCommitResponse(repo, commit) // ok if fails, then will be nil
verification := GetPayloadCommitVerification(ctx, commit) verification := GetPayloadCommitVerification(commit)
fileResponse := &structs.FileResponse{ fileResponse := &structs.FileResponse{
Commit: fileCommitResponse, Commit: fileCommitResponse,
Verification: verification, Verification: verification,

View File

@ -355,7 +355,7 @@ func pushUpdateAddTags(ctx context.Context, repo *repo_model.Repository, gitRepo
var ok bool var ok bool
author, ok = emailToUser[sig.Email] author, ok = emailToUser[sig.Email]
if !ok { if !ok {
author, err = user_model.GetUserByEmail(ctx, sig.Email) author, err = user_model.GetUserByEmailContext(ctx, sig.Email)
if err != nil && !user_model.IsErrUserNotExist(err) { if err != nil && !user_model.IsErrUserNotExist(err) {
return fmt.Errorf("GetUserByEmail: %w", err) return fmt.Errorf("GetUserByEmail: %w", err)
} }

View File

@ -115,7 +115,7 @@ func TestCreateUser_Issue5882(t *testing.T) {
assert.NoError(t, user_model.CreateUser(v.user)) assert.NoError(t, user_model.CreateUser(v.user))
u, err := user_model.GetUserByEmail(db.DefaultContext, v.user.Email) u, err := user_model.GetUserByEmail(v.user.Email)
assert.NoError(t, err) assert.NoError(t, err)
assert.Equal(t, !u.AllowCreateOrganization, v.disableOrgCreation) assert.Equal(t, !u.AllowCreateOrganization, v.disableOrgCreation)

View File

@ -63,7 +63,7 @@ func (m *webhookNotifier) NotifyIssueClearLabels(ctx context.Context, doer *user
Index: issue.Index, Index: issue.Index,
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil), PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
Repository: convert.ToRepo(ctx, issue.Repo, mode), Repository: convert.ToRepo(ctx, issue.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}) })
} else { } else {
err = PrepareWebhooks(ctx, EventSource{Repository: issue.Repo}, webhook_module.HookEventIssueLabel, &api.IssuePayload{ err = PrepareWebhooks(ctx, EventSource{Repository: issue.Repo}, webhook_module.HookEventIssueLabel, &api.IssuePayload{
@ -71,7 +71,7 @@ func (m *webhookNotifier) NotifyIssueClearLabels(ctx context.Context, doer *user
Index: issue.Index, Index: issue.Index,
Issue: convert.ToAPIIssue(ctx, issue), Issue: convert.ToAPIIssue(ctx, issue),
Repository: convert.ToRepo(ctx, issue.Repo, mode), Repository: convert.ToRepo(ctx, issue.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}) })
} }
if err != nil { if err != nil {
@ -87,7 +87,7 @@ func (m *webhookNotifier) NotifyForkRepository(ctx context.Context, doer *user_m
if err := PrepareWebhooks(ctx, EventSource{Repository: oldRepo}, webhook_module.HookEventFork, &api.ForkPayload{ if err := PrepareWebhooks(ctx, EventSource{Repository: oldRepo}, webhook_module.HookEventFork, &api.ForkPayload{
Forkee: convert.ToRepo(ctx, oldRepo, oldMode), Forkee: convert.ToRepo(ctx, oldRepo, oldMode),
Repo: convert.ToRepo(ctx, repo, mode), Repo: convert.ToRepo(ctx, repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}); err != nil { }); err != nil {
log.Error("PrepareWebhooks [repo_id: %d]: %v", oldRepo.ID, err) log.Error("PrepareWebhooks [repo_id: %d]: %v", oldRepo.ID, err)
} }
@ -99,8 +99,8 @@ func (m *webhookNotifier) NotifyForkRepository(ctx context.Context, doer *user_m
if err := PrepareWebhooks(ctx, EventSource{Repository: repo}, webhook_module.HookEventRepository, &api.RepositoryPayload{ if err := PrepareWebhooks(ctx, EventSource{Repository: repo}, webhook_module.HookEventRepository, &api.RepositoryPayload{
Action: api.HookRepoCreated, Action: api.HookRepoCreated,
Repository: convert.ToRepo(ctx, repo, perm.AccessModeOwner), Repository: convert.ToRepo(ctx, repo, perm.AccessModeOwner),
Organization: convert.ToUser(ctx, u, nil), Organization: convert.ToUser(u, nil),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}); err != nil { }); err != nil {
log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err) log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err)
} }
@ -112,8 +112,8 @@ func (m *webhookNotifier) NotifyCreateRepository(ctx context.Context, doer, u *u
if err := PrepareWebhooks(ctx, EventSource{Repository: repo}, webhook_module.HookEventRepository, &api.RepositoryPayload{ if err := PrepareWebhooks(ctx, EventSource{Repository: repo}, webhook_module.HookEventRepository, &api.RepositoryPayload{
Action: api.HookRepoCreated, Action: api.HookRepoCreated,
Repository: convert.ToRepo(ctx, repo, perm.AccessModeOwner), Repository: convert.ToRepo(ctx, repo, perm.AccessModeOwner),
Organization: convert.ToUser(ctx, u, nil), Organization: convert.ToUser(u, nil),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}); err != nil { }); err != nil {
log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err) log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err)
} }
@ -123,8 +123,8 @@ func (m *webhookNotifier) NotifyDeleteRepository(ctx context.Context, doer *user
if err := PrepareWebhooks(ctx, EventSource{Repository: repo}, webhook_module.HookEventRepository, &api.RepositoryPayload{ if err := PrepareWebhooks(ctx, EventSource{Repository: repo}, webhook_module.HookEventRepository, &api.RepositoryPayload{
Action: api.HookRepoDeleted, Action: api.HookRepoDeleted,
Repository: convert.ToRepo(ctx, repo, perm.AccessModeOwner), Repository: convert.ToRepo(ctx, repo, perm.AccessModeOwner),
Organization: convert.ToUser(ctx, repo.MustOwner(ctx), nil), Organization: convert.ToUser(repo.MustOwner(ctx), nil),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}); err != nil { }); err != nil {
log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err) log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err)
} }
@ -135,8 +135,8 @@ func (m *webhookNotifier) NotifyMigrateRepository(ctx context.Context, doer, u *
if err := PrepareWebhooks(ctx, EventSource{Repository: repo}, webhook_module.HookEventRepository, &api.RepositoryPayload{ if err := PrepareWebhooks(ctx, EventSource{Repository: repo}, webhook_module.HookEventRepository, &api.RepositoryPayload{
Action: api.HookRepoCreated, Action: api.HookRepoCreated,
Repository: convert.ToRepo(ctx, repo, perm.AccessModeOwner), Repository: convert.ToRepo(ctx, repo, perm.AccessModeOwner),
Organization: convert.ToUser(ctx, u, nil), Organization: convert.ToUser(u, nil),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}); err != nil { }); err != nil {
log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err) log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err)
} }
@ -155,7 +155,7 @@ func (m *webhookNotifier) NotifyIssueChangeAssignee(ctx context.Context, doer *u
Index: issue.Index, Index: issue.Index,
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil), PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
Repository: convert.ToRepo(ctx, issue.Repo, mode), Repository: convert.ToRepo(ctx, issue.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
} }
if removed { if removed {
apiPullRequest.Action = api.HookIssueUnassigned apiPullRequest.Action = api.HookIssueUnassigned
@ -173,7 +173,7 @@ func (m *webhookNotifier) NotifyIssueChangeAssignee(ctx context.Context, doer *u
Index: issue.Index, Index: issue.Index,
Issue: convert.ToAPIIssue(ctx, issue), Issue: convert.ToAPIIssue(ctx, issue),
Repository: convert.ToRepo(ctx, issue.Repo, mode), Repository: convert.ToRepo(ctx, issue.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
} }
if removed { if removed {
apiIssue.Action = api.HookIssueUnassigned apiIssue.Action = api.HookIssueUnassigned
@ -207,7 +207,7 @@ func (m *webhookNotifier) NotifyIssueChangeTitle(ctx context.Context, doer *user
}, },
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil), PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
Repository: convert.ToRepo(ctx, issue.Repo, mode), Repository: convert.ToRepo(ctx, issue.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}) })
} else { } else {
err = PrepareWebhooks(ctx, EventSource{Repository: issue.Repo}, webhook_module.HookEventIssues, &api.IssuePayload{ err = PrepareWebhooks(ctx, EventSource{Repository: issue.Repo}, webhook_module.HookEventIssues, &api.IssuePayload{
@ -220,7 +220,7 @@ func (m *webhookNotifier) NotifyIssueChangeTitle(ctx context.Context, doer *user
}, },
Issue: convert.ToAPIIssue(ctx, issue), Issue: convert.ToAPIIssue(ctx, issue),
Repository: convert.ToRepo(ctx, issue.Repo, mode), Repository: convert.ToRepo(ctx, issue.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}) })
} }
@ -242,7 +242,7 @@ func (m *webhookNotifier) NotifyIssueChangeStatus(ctx context.Context, doer *use
Index: issue.Index, Index: issue.Index,
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil), PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
Repository: convert.ToRepo(ctx, issue.Repo, mode), Repository: convert.ToRepo(ctx, issue.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
CommitID: commitID, CommitID: commitID,
} }
if isClosed { if isClosed {
@ -256,7 +256,7 @@ func (m *webhookNotifier) NotifyIssueChangeStatus(ctx context.Context, doer *use
Index: issue.Index, Index: issue.Index,
Issue: convert.ToAPIIssue(ctx, issue), Issue: convert.ToAPIIssue(ctx, issue),
Repository: convert.ToRepo(ctx, issue.Repo, mode), Repository: convert.ToRepo(ctx, issue.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
CommitID: commitID, CommitID: commitID,
} }
if isClosed { if isClosed {
@ -287,7 +287,7 @@ func (m *webhookNotifier) NotifyNewIssue(ctx context.Context, issue *issues_mode
Index: issue.Index, Index: issue.Index,
Issue: convert.ToAPIIssue(ctx, issue), Issue: convert.ToAPIIssue(ctx, issue),
Repository: convert.ToRepo(ctx, issue.Repo, mode), Repository: convert.ToRepo(ctx, issue.Repo, mode),
Sender: convert.ToUser(ctx, issue.Poster, nil), Sender: convert.ToUser(issue.Poster, nil),
}); err != nil { }); err != nil {
log.Error("PrepareWebhooks: %v", err) log.Error("PrepareWebhooks: %v", err)
} }
@ -313,7 +313,7 @@ func (m *webhookNotifier) NotifyNewPullRequest(ctx context.Context, pull *issues
Index: pull.Issue.Index, Index: pull.Issue.Index,
PullRequest: convert.ToAPIPullRequest(ctx, pull, nil), PullRequest: convert.ToAPIPullRequest(ctx, pull, nil),
Repository: convert.ToRepo(ctx, pull.Issue.Repo, mode), Repository: convert.ToRepo(ctx, pull.Issue.Repo, mode),
Sender: convert.ToUser(ctx, pull.Issue.Poster, nil), Sender: convert.ToUser(pull.Issue.Poster, nil),
}); err != nil { }); err != nil {
log.Error("PrepareWebhooks: %v", err) log.Error("PrepareWebhooks: %v", err)
} }
@ -339,7 +339,7 @@ func (m *webhookNotifier) NotifyIssueChangeContent(ctx context.Context, doer *us
}, },
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil), PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
Repository: convert.ToRepo(ctx, issue.Repo, mode), Repository: convert.ToRepo(ctx, issue.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}) })
} else { } else {
err = PrepareWebhooks(ctx, EventSource{Repository: issue.Repo}, webhook_module.HookEventIssues, &api.IssuePayload{ err = PrepareWebhooks(ctx, EventSource{Repository: issue.Repo}, webhook_module.HookEventIssues, &api.IssuePayload{
@ -352,7 +352,7 @@ func (m *webhookNotifier) NotifyIssueChangeContent(ctx context.Context, doer *us
}, },
Issue: convert.ToAPIIssue(ctx, issue), Issue: convert.ToAPIIssue(ctx, issue),
Repository: convert.ToRepo(ctx, issue.Repo, mode), Repository: convert.ToRepo(ctx, issue.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}) })
} }
if err != nil { if err != nil {
@ -386,14 +386,14 @@ func (m *webhookNotifier) NotifyUpdateComment(ctx context.Context, doer *user_mo
if err := PrepareWebhooks(ctx, EventSource{Repository: c.Issue.Repo}, eventType, &api.IssueCommentPayload{ if err := PrepareWebhooks(ctx, EventSource{Repository: c.Issue.Repo}, eventType, &api.IssueCommentPayload{
Action: api.HookIssueCommentEdited, Action: api.HookIssueCommentEdited,
Issue: convert.ToAPIIssue(ctx, c.Issue), Issue: convert.ToAPIIssue(ctx, c.Issue),
Comment: convert.ToComment(ctx, c), Comment: convert.ToComment(c),
Changes: &api.ChangesPayload{ Changes: &api.ChangesPayload{
Body: &api.ChangesFromPayload{ Body: &api.ChangesFromPayload{
From: oldContent, From: oldContent,
}, },
}, },
Repository: convert.ToRepo(ctx, c.Issue.Repo, mode), Repository: convert.ToRepo(ctx, c.Issue.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
IsPull: c.Issue.IsPull, IsPull: c.Issue.IsPull,
}); err != nil { }); err != nil {
log.Error("PrepareWebhooks [comment_id: %d]: %v", c.ID, err) log.Error("PrepareWebhooks [comment_id: %d]: %v", c.ID, err)
@ -414,9 +414,9 @@ func (m *webhookNotifier) NotifyCreateIssueComment(ctx context.Context, doer *us
if err := PrepareWebhooks(ctx, EventSource{Repository: issue.Repo}, eventType, &api.IssueCommentPayload{ if err := PrepareWebhooks(ctx, EventSource{Repository: issue.Repo}, eventType, &api.IssueCommentPayload{
Action: api.HookIssueCommentCreated, Action: api.HookIssueCommentCreated,
Issue: convert.ToAPIIssue(ctx, issue), Issue: convert.ToAPIIssue(ctx, issue),
Comment: convert.ToComment(ctx, comment), Comment: convert.ToComment(comment),
Repository: convert.ToRepo(ctx, repo, mode), Repository: convert.ToRepo(ctx, repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
IsPull: issue.IsPull, IsPull: issue.IsPull,
}); err != nil { }); err != nil {
log.Error("PrepareWebhooks [comment_id: %d]: %v", comment.ID, err) log.Error("PrepareWebhooks [comment_id: %d]: %v", comment.ID, err)
@ -451,9 +451,9 @@ func (m *webhookNotifier) NotifyDeleteComment(ctx context.Context, doer *user_mo
if err := PrepareWebhooks(ctx, EventSource{Repository: comment.Issue.Repo}, eventType, &api.IssueCommentPayload{ if err := PrepareWebhooks(ctx, EventSource{Repository: comment.Issue.Repo}, eventType, &api.IssueCommentPayload{
Action: api.HookIssueCommentDeleted, Action: api.HookIssueCommentDeleted,
Issue: convert.ToAPIIssue(ctx, comment.Issue), Issue: convert.ToAPIIssue(ctx, comment.Issue),
Comment: convert.ToComment(ctx, comment), Comment: convert.ToComment(comment),
Repository: convert.ToRepo(ctx, comment.Issue.Repo, mode), Repository: convert.ToRepo(ctx, comment.Issue.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
IsPull: comment.Issue.IsPull, IsPull: comment.Issue.IsPull,
}); err != nil { }); err != nil {
log.Error("PrepareWebhooks [comment_id: %d]: %v", comment.ID, err) log.Error("PrepareWebhooks [comment_id: %d]: %v", comment.ID, err)
@ -465,7 +465,7 @@ func (m *webhookNotifier) NotifyNewWikiPage(ctx context.Context, doer *user_mode
if err := PrepareWebhooks(ctx, EventSource{Repository: repo}, webhook_module.HookEventWiki, &api.WikiPayload{ if err := PrepareWebhooks(ctx, EventSource{Repository: repo}, webhook_module.HookEventWiki, &api.WikiPayload{
Action: api.HookWikiCreated, Action: api.HookWikiCreated,
Repository: convert.ToRepo(ctx, repo, perm.AccessModeOwner), Repository: convert.ToRepo(ctx, repo, perm.AccessModeOwner),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
Page: page, Page: page,
Comment: comment, Comment: comment,
}); err != nil { }); err != nil {
@ -478,7 +478,7 @@ func (m *webhookNotifier) NotifyEditWikiPage(ctx context.Context, doer *user_mod
if err := PrepareWebhooks(ctx, EventSource{Repository: repo}, webhook_module.HookEventWiki, &api.WikiPayload{ if err := PrepareWebhooks(ctx, EventSource{Repository: repo}, webhook_module.HookEventWiki, &api.WikiPayload{
Action: api.HookWikiEdited, Action: api.HookWikiEdited,
Repository: convert.ToRepo(ctx, repo, perm.AccessModeOwner), Repository: convert.ToRepo(ctx, repo, perm.AccessModeOwner),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
Page: page, Page: page,
Comment: comment, Comment: comment,
}); err != nil { }); err != nil {
@ -491,7 +491,7 @@ func (m *webhookNotifier) NotifyDeleteWikiPage(ctx context.Context, doer *user_m
if err := PrepareWebhooks(ctx, EventSource{Repository: repo}, webhook_module.HookEventWiki, &api.WikiPayload{ if err := PrepareWebhooks(ctx, EventSource{Repository: repo}, webhook_module.HookEventWiki, &api.WikiPayload{
Action: api.HookWikiDeleted, Action: api.HookWikiDeleted,
Repository: convert.ToRepo(ctx, repo, perm.AccessModeOwner), Repository: convert.ToRepo(ctx, repo, perm.AccessModeOwner),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
Page: page, Page: page,
}); err != nil { }); err != nil {
log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err) log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err)
@ -528,7 +528,7 @@ func (m *webhookNotifier) NotifyIssueChangeLabels(ctx context.Context, doer *use
Index: issue.Index, Index: issue.Index,
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil), PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
Repository: convert.ToRepo(ctx, issue.Repo, perm.AccessModeNone), Repository: convert.ToRepo(ctx, issue.Repo, perm.AccessModeNone),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}) })
} else { } else {
err = PrepareWebhooks(ctx, EventSource{Repository: issue.Repo}, webhook_module.HookEventIssueLabel, &api.IssuePayload{ err = PrepareWebhooks(ctx, EventSource{Repository: issue.Repo}, webhook_module.HookEventIssueLabel, &api.IssuePayload{
@ -536,7 +536,7 @@ func (m *webhookNotifier) NotifyIssueChangeLabels(ctx context.Context, doer *use
Index: issue.Index, Index: issue.Index,
Issue: convert.ToAPIIssue(ctx, issue), Issue: convert.ToAPIIssue(ctx, issue),
Repository: convert.ToRepo(ctx, issue.Repo, mode), Repository: convert.ToRepo(ctx, issue.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}) })
} }
if err != nil { if err != nil {
@ -570,7 +570,7 @@ func (m *webhookNotifier) NotifyIssueChangeMilestone(ctx context.Context, doer *
Index: issue.Index, Index: issue.Index,
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil), PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
Repository: convert.ToRepo(ctx, issue.Repo, mode), Repository: convert.ToRepo(ctx, issue.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}) })
} else { } else {
err = PrepareWebhooks(ctx, EventSource{Repository: issue.Repo}, webhook_module.HookEventIssueMilestone, &api.IssuePayload{ err = PrepareWebhooks(ctx, EventSource{Repository: issue.Repo}, webhook_module.HookEventIssueMilestone, &api.IssuePayload{
@ -578,7 +578,7 @@ func (m *webhookNotifier) NotifyIssueChangeMilestone(ctx context.Context, doer *
Index: issue.Index, Index: issue.Index,
Issue: convert.ToAPIIssue(ctx, issue), Issue: convert.ToAPIIssue(ctx, issue),
Repository: convert.ToRepo(ctx, issue.Repo, mode), Repository: convert.ToRepo(ctx, issue.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}) })
} }
if err != nil { if err != nil {
@ -587,7 +587,7 @@ func (m *webhookNotifier) NotifyIssueChangeMilestone(ctx context.Context, doer *
} }
func (m *webhookNotifier) NotifyPushCommits(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) { func (m *webhookNotifier) NotifyPushCommits(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) {
apiPusher := convert.ToUser(ctx, pusher, nil) apiPusher := convert.ToUser(pusher, nil)
apiCommits, apiHeadCommit, err := commits.ToAPIPayloadCommits(ctx, repo.RepoPath(), repo.HTMLURL()) apiCommits, apiHeadCommit, err := commits.ToAPIPayloadCommits(ctx, repo.RepoPath(), repo.HTMLURL())
if err != nil { if err != nil {
log.Error("commits.ToAPIPayloadCommits failed: %v", err) log.Error("commits.ToAPIPayloadCommits failed: %v", err)
@ -643,7 +643,7 @@ func (*webhookNotifier) NotifyMergePullRequest(ctx context.Context, doer *user_m
Index: pr.Issue.Index, Index: pr.Issue.Index,
PullRequest: convert.ToAPIPullRequest(ctx, pr, nil), PullRequest: convert.ToAPIPullRequest(ctx, pr, nil),
Repository: convert.ToRepo(ctx, pr.Issue.Repo, mode), Repository: convert.ToRepo(ctx, pr.Issue.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
Action: api.HookIssueClosed, Action: api.HookIssueClosed,
} }
@ -671,7 +671,7 @@ func (m *webhookNotifier) NotifyPullRequestChangeTargetBranch(ctx context.Contex
}, },
PullRequest: convert.ToAPIPullRequest(ctx, pr, nil), PullRequest: convert.ToAPIPullRequest(ctx, pr, nil),
Repository: convert.ToRepo(ctx, issue.Repo, mode), Repository: convert.ToRepo(ctx, issue.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}); err != nil { }); err != nil {
log.Error("PrepareWebhooks [pr: %d]: %v", pr.ID, err) log.Error("PrepareWebhooks [pr: %d]: %v", pr.ID, err)
} }
@ -708,7 +708,7 @@ func (m *webhookNotifier) NotifyPullRequestReview(ctx context.Context, pr *issue
Index: review.Issue.Index, Index: review.Issue.Index,
PullRequest: convert.ToAPIPullRequest(ctx, pr, nil), PullRequest: convert.ToAPIPullRequest(ctx, pr, nil),
Repository: convert.ToRepo(ctx, review.Issue.Repo, mode), Repository: convert.ToRepo(ctx, review.Issue.Repo, mode),
Sender: convert.ToUser(ctx, review.Reviewer, nil), Sender: convert.ToUser(review.Reviewer, nil),
Review: &api.ReviewPayload{ Review: &api.ReviewPayload{
Type: string(reviewHookType), Type: string(reviewHookType),
Content: review.Content, Content: review.Content,
@ -719,7 +719,7 @@ func (m *webhookNotifier) NotifyPullRequestReview(ctx context.Context, pr *issue
} }
func (m *webhookNotifier) NotifyCreateRef(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, refType, refFullName, refID string) { func (m *webhookNotifier) NotifyCreateRef(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, refType, refFullName, refID string) {
apiPusher := convert.ToUser(ctx, pusher, nil) apiPusher := convert.ToUser(pusher, nil)
apiRepo := convert.ToRepo(ctx, repo, perm.AccessModeNone) apiRepo := convert.ToRepo(ctx, repo, perm.AccessModeNone)
refName := git.RefEndName(refFullName) refName := git.RefEndName(refFullName)
@ -749,14 +749,14 @@ func (m *webhookNotifier) NotifyPullRequestSynchronized(ctx context.Context, doe
Index: pr.Issue.Index, Index: pr.Issue.Index,
PullRequest: convert.ToAPIPullRequest(ctx, pr, nil), PullRequest: convert.ToAPIPullRequest(ctx, pr, nil),
Repository: convert.ToRepo(ctx, pr.Issue.Repo, perm.AccessModeNone), Repository: convert.ToRepo(ctx, pr.Issue.Repo, perm.AccessModeNone),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}); err != nil { }); err != nil {
log.Error("PrepareWebhooks [pull_id: %v]: %v", pr.ID, err) log.Error("PrepareWebhooks [pull_id: %v]: %v", pr.ID, err)
} }
} }
func (m *webhookNotifier) NotifyDeleteRef(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, refType, refFullName string) { func (m *webhookNotifier) NotifyDeleteRef(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, refType, refFullName string) {
apiPusher := convert.ToUser(ctx, pusher, nil) apiPusher := convert.ToUser(pusher, nil)
apiRepo := convert.ToRepo(ctx, repo, perm.AccessModeNone) apiRepo := convert.ToRepo(ctx, repo, perm.AccessModeNone)
refName := git.RefEndName(refFullName) refName := git.RefEndName(refFullName)
@ -780,9 +780,9 @@ func sendReleaseHook(ctx context.Context, doer *user_model.User, rel *repo_model
mode, _ := access_model.AccessLevel(ctx, doer, rel.Repo) mode, _ := access_model.AccessLevel(ctx, doer, rel.Repo)
if err := PrepareWebhooks(ctx, EventSource{Repository: rel.Repo}, webhook_module.HookEventRelease, &api.ReleasePayload{ if err := PrepareWebhooks(ctx, EventSource{Repository: rel.Repo}, webhook_module.HookEventRelease, &api.ReleasePayload{
Action: action, Action: action,
Release: convert.ToRelease(ctx, rel), Release: convert.ToRelease(rel),
Repository: convert.ToRepo(ctx, rel.Repo, mode), Repository: convert.ToRepo(ctx, rel.Repo, mode),
Sender: convert.ToUser(ctx, doer, nil), Sender: convert.ToUser(doer, nil),
}); err != nil { }); err != nil {
log.Error("PrepareWebhooks: %v", err) log.Error("PrepareWebhooks: %v", err)
} }
@ -801,7 +801,7 @@ func (m *webhookNotifier) NotifyDeleteRelease(ctx context.Context, doer *user_mo
} }
func (m *webhookNotifier) NotifySyncPushCommits(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) { func (m *webhookNotifier) NotifySyncPushCommits(ctx context.Context, pusher *user_model.User, repo *repo_model.Repository, opts *repository.PushUpdateOptions, commits *repository.PushCommits) {
apiPusher := convert.ToUser(ctx, pusher, nil) apiPusher := convert.ToUser(pusher, nil)
apiCommits, apiHeadCommit, err := commits.ToAPIPayloadCommits(ctx, repo.RepoPath(), repo.HTMLURL()) apiCommits, apiHeadCommit, err := commits.ToAPIPayloadCommits(ctx, repo.RepoPath(), repo.HTMLURL())
if err != nil { if err != nil {
log.Error("commits.ToAPIPayloadCommits failed: %v", err) log.Error("commits.ToAPIPayloadCommits failed: %v", err)
@ -855,7 +855,7 @@ func notifyPackage(ctx context.Context, sender *user_model.User, pd *packages_mo
if err := PrepareWebhooks(ctx, source, webhook_module.HookEventPackage, &api.PackagePayload{ if err := PrepareWebhooks(ctx, source, webhook_module.HookEventPackage, &api.PackagePayload{
Action: action, Action: action,
Package: apiPackage, Package: apiPackage,
Sender: convert.ToUser(ctx, sender, nil), Sender: convert.ToUser(sender, nil),
}); err != nil { }); err != nil {
log.Error("PrepareWebhooks: %v", err) log.Error("PrepareWebhooks: %v", err)
} }

View File

@ -162,7 +162,7 @@
<div class="ui attached segment"> <div class="ui attached segment">
<form class="ui form" action="{{.Link}}/avatar" method="post" enctype="multipart/form-data"> <form class="ui form" action="{{.Link}}/avatar" method="post" enctype="multipart/form-data">
{{.CsrfTokenHtml}} {{.CsrfTokenHtml}}
{{if not (DisableGravatar $.Context)}} {{if not DisableGravatar}}
<div class="inline field"> <div class="inline field">
<div class="ui radio checkbox"> <div class="ui radio checkbox">
<input name="source" value="lookup" type="radio" {{if not .User.UseCustomAvatar}}checked{{end}}> <input name="source" value="lookup" type="radio" {{if not .User.UseCustomAvatar}}checked{{end}}>

View File

@ -32,7 +32,7 @@
{{if .PageIsUserProfile}} {{if .PageIsUserProfile}}
<meta property="og:title" content="{{.Owner.DisplayName}}"> <meta property="og:title" content="{{.Owner.DisplayName}}">
<meta property="og:type" content="profile"> <meta property="og:type" content="profile">
<meta property="og:image" content="{{.Owner.AvatarLink $.Context}}"> <meta property="og:image" content="{{.Owner.AvatarLink}}">
<meta property="og:url" content="{{.Owner.HTMLURL}}"> <meta property="og:url" content="{{.Owner.HTMLURL}}">
{{if .Owner.Description}} {{if .Owner.Description}}
<meta property="og:description" content="{{.Owner.Description}}"> <meta property="og:description" content="{{.Owner.Description}}">
@ -52,10 +52,10 @@
{{end}} {{end}}
{{end}} {{end}}
<meta property="og:type" content="object"> <meta property="og:type" content="object">
{{if (.Repository.AvatarLink $.Context)}} {{if .Repository.AvatarLink}}
<meta property="og:image" content="{{.Repository.AvatarLink $.Context}}"> <meta property="og:image" content="{{.Repository.AvatarLink}}">
{{else}} {{else}}
<meta property="og:image" content="{{.Repository.Owner.AvatarLink $.Context}}"> <meta property="og:image" content="{{.Repository.Owner.AvatarLink}}">
{{end}} {{end}}
{{else}} {{else}}
<meta property="og:title" content="{{AppName}}"> <meta property="og:title" content="{{AppName}}">

View File

@ -59,7 +59,7 @@
<div class="right stackable menu"> <div class="right stackable menu">
<div class="ui dropdown jump item tooltip" tabindex="-1" data-content="{{.locale.Tr "user_profile_and_more"}}"> <div class="ui dropdown jump item tooltip" tabindex="-1" data-content="{{.locale.Tr "user_profile_and_more"}}">
<span class="text"> <span class="text">
{{avatar $.Context .SignedUser 24 "tiny"}} {{avatar .SignedUser 24 "tiny"}}
<span class="sr-only">{{.locale.Tr "user_profile_and_more"}}</span> <span class="sr-only">{{.locale.Tr "user_profile_and_more"}}</span>
<span class="mobile-only">{{.SignedUser.Name}}</span> <span class="mobile-only">{{.SignedUser.Name}}</span>
<span class="fitted not-mobile" tabindex="-1">{{svg "octicon-triangle-down"}}</span> <span class="fitted not-mobile" tabindex="-1">{{svg "octicon-triangle-down"}}</span>
@ -152,7 +152,7 @@
<div class="ui dropdown jump item tooltip gt-mx-0" tabindex="-1" data-content="{{.locale.Tr "user_profile_and_more"}}"> <div class="ui dropdown jump item tooltip gt-mx-0" tabindex="-1" data-content="{{.locale.Tr "user_profile_and_more"}}">
<span class="text"> <span class="text">
{{avatar $.Context .SignedUser 24 "tiny"}} {{avatar .SignedUser 24 "tiny"}}
<span class="sr-only">{{.locale.Tr "user_profile_and_more"}}</span> <span class="sr-only">{{.locale.Tr "user_profile_and_more"}}</span>
<span class="mobile-only">{{.SignedUser.Name}}</span> <span class="mobile-only">{{.SignedUser.Name}}</span>
<span class="fitted not-mobile" tabindex="-1">{{svg "octicon-triangle-down"}}</span> <span class="fitted not-mobile" tabindex="-1">{{svg "octicon-triangle-down"}}</span>

View File

@ -22,11 +22,11 @@ If you introduce mistakes in it, Gitea JavaScript code wouldn't run correctly.
tributeValues: Array.from(new Map([ tributeValues: Array.from(new Map([
{{range .Participants}} {{range .Participants}}
['{{.Name}}', {key: '{{.Name}} {{.FullName}}', value: '{{.Name}}', ['{{.Name}}', {key: '{{.Name}} {{.FullName}}', value: '{{.Name}}',
name: '{{.Name}}', fullname: '{{.FullName}}', avatar: '{{.AvatarLink $.Context}}'}], name: '{{.Name}}', fullname: '{{.FullName}}', avatar: '{{.AvatarLink}}'}],
{{end}} {{end}}
{{range .Assignees}} {{range .Assignees}}
['{{.Name}}', {key: '{{.Name}} {{.FullName}}', value: '{{.Name}}', ['{{.Name}}', {key: '{{.Name}} {{.FullName}}', value: '{{.Name}}',
name: '{{.Name}}', fullname: '{{.FullName}}', avatar: '{{.AvatarLink $.Context}}'}], name: '{{.Name}}', fullname: '{{.FullName}}', avatar: '{{.AvatarLink}}'}],
{{end}} {{end}}
{{range .MentionableTeams}} {{range .MentionableTeams}}
['{{$.MentionableTeamsOrg}}/{{.Name}}', {key: '{{$.MentionableTeamsOrg}}/{{.Name}}', value: '{{$.MentionableTeamsOrg}}/{{.Name}}', ['{{$.MentionableTeamsOrg}}/{{.Name}}', {key: '{{$.MentionableTeamsOrg}}/{{.Name}}', value: '{{$.MentionableTeamsOrg}}/{{.Name}}',

View File

@ -7,7 +7,7 @@
<div class="ui user list"> <div class="ui user list">
{{range .Users}} {{range .Users}}
<div class="item"> <div class="item">
{{avatar $.Context .}} {{avatar .}}
<div class="content"> <div class="content">
<span class="header"> <span class="header">
<a href="{{.HomeLink}}">{{.Name}}</a> {{.FullName}} <a href="{{.HomeLink}}">{{.Name}}</a> {{.FullName}}

View File

@ -7,7 +7,7 @@
<div class="ui user list"> <div class="ui user list">
{{range .Users}} {{range .Users}}
<div class="item"> <div class="item">
{{avatar $.Context .}} {{avatar .}}
<div class="content"> <div class="content">
<span class="header"><a href="{{.HomeLink}}">{{.Name}}</a> {{.FullName}}</span> <span class="header"><a href="{{.HomeLink}}">{{.Name}}</a> {{.FullName}}</span>
<div class="description"> <div class="description">

View File

@ -3,7 +3,7 @@
<div class="ui vertically grid head"> <div class="ui vertically grid head">
<div class="column"> <div class="column">
<div class="ui header"> <div class="ui header">
{{avatar $.Context . 100}} {{avatar . 100}}
<span class="text thin grey"><a href="{{.HomeLink}}">{{.DisplayName}}</a></span> <span class="text thin grey"><a href="{{.HomeLink}}">{{.DisplayName}}</a></span>
<span class="org-visibility"> <span class="org-visibility">
{{if .Visibility.IsLimited}}<div class="ui medium basic horizontal label">{{$.locale.Tr "org.settings.visibility.limited_shortname"}}</div>{{end}} {{if .Visibility.IsLimited}}<div class="ui medium basic horizontal label">{{$.locale.Tr "org.settings.visibility.limited_shortname"}}</div>{{end}}

Some files were not shown because too many files have changed in this diff Show More