mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	[Refactor] Move APIFormat functions into convert package (#12856)
* USER APIFormat -> ToUser * Migrate more and mark APIFormat deprecated * models.Comment APIFormat() -> convert.ToComment * models.Release APIFormat() -> convert.ToRelease * models.Attachments APIFormat() -> convert.ToReleaseAttachments * models.CommitStatus APIFormat() -> convert.ToCommitStatus * finish migration to convert.ToUser * Move Test * Imprufe Test * fix test Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
		| @@ -11,6 +11,7 @@ import ( | |||||||
| 	"testing" | 	"testing" | ||||||
|  |  | ||||||
| 	"code.gitea.io/gitea/models" | 	"code.gitea.io/gitea/models" | ||||||
|  | 	"code.gitea.io/gitea/modules/convert" | ||||||
| 	api "code.gitea.io/gitea/modules/structs" | 	api "code.gitea.io/gitea/modules/structs" | ||||||
|  |  | ||||||
| 	"github.com/stretchr/testify/assert" | 	"github.com/stretchr/testify/assert" | ||||||
| @@ -125,7 +126,7 @@ func TestAPIGetComment(t *testing.T) { | |||||||
| 	DecodeJSON(t, resp, &apiComment) | 	DecodeJSON(t, resp, &apiComment) | ||||||
|  |  | ||||||
| 	assert.NoError(t, comment.LoadPoster()) | 	assert.NoError(t, comment.LoadPoster()) | ||||||
| 	expect := comment.APIFormat() | 	expect := convert.ToComment(comment) | ||||||
|  |  | ||||||
| 	assert.Equal(t, expect.ID, apiComment.ID) | 	assert.Equal(t, expect.ID, apiComment.ID) | ||||||
| 	assert.Equal(t, expect.Poster.FullName, apiComment.Poster.FullName) | 	assert.Equal(t, expect.Poster.FullName, apiComment.Poster.FullName) | ||||||
|   | |||||||
| @@ -11,6 +11,7 @@ import ( | |||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
| 	"code.gitea.io/gitea/models" | 	"code.gitea.io/gitea/models" | ||||||
|  | 	"code.gitea.io/gitea/modules/convert" | ||||||
| 	api "code.gitea.io/gitea/modules/structs" | 	api "code.gitea.io/gitea/modules/structs" | ||||||
|  |  | ||||||
| 	"github.com/stretchr/testify/assert" | 	"github.com/stretchr/testify/assert" | ||||||
| @@ -60,7 +61,7 @@ func TestAPIIssuesReactions(t *testing.T) { | |||||||
| 	DecodeJSON(t, resp, &apiReactions) | 	DecodeJSON(t, resp, &apiReactions) | ||||||
| 	expectResponse := make(map[int]api.Reaction) | 	expectResponse := make(map[int]api.Reaction) | ||||||
| 	expectResponse[0] = api.Reaction{ | 	expectResponse[0] = api.Reaction{ | ||||||
| 		User:     user2.APIFormat(), | 		User:     convert.ToUser(user2, true, true), | ||||||
| 		Reaction: "eyes", | 		Reaction: "eyes", | ||||||
| 		Created:  time.Unix(1573248003, 0), | 		Created:  time.Unix(1573248003, 0), | ||||||
| 	} | 	} | ||||||
| @@ -120,12 +121,12 @@ func TestAPICommentReactions(t *testing.T) { | |||||||
| 	DecodeJSON(t, resp, &apiReactions) | 	DecodeJSON(t, resp, &apiReactions) | ||||||
| 	expectResponse := make(map[int]api.Reaction) | 	expectResponse := make(map[int]api.Reaction) | ||||||
| 	expectResponse[0] = api.Reaction{ | 	expectResponse[0] = api.Reaction{ | ||||||
| 		User:     user2.APIFormat(), | 		User:     convert.ToUser(user2, true, true), | ||||||
| 		Reaction: "laugh", | 		Reaction: "laugh", | ||||||
| 		Created:  time.Unix(1573248004, 0), | 		Created:  time.Unix(1573248004, 0), | ||||||
| 	} | 	} | ||||||
| 	expectResponse[1] = api.Reaction{ | 	expectResponse[1] = api.Reaction{ | ||||||
| 		User:     user1.APIFormat(), | 		User:     convert.ToUser(user1, true, true), | ||||||
| 		Reaction: "laugh", | 		Reaction: "laugh", | ||||||
| 		Created:  time.Unix(1573248005, 0), | 		Created:  time.Unix(1573248005, 0), | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -12,7 +12,6 @@ import ( | |||||||
|  |  | ||||||
| 	"code.gitea.io/gitea/modules/setting" | 	"code.gitea.io/gitea/modules/setting" | ||||||
| 	"code.gitea.io/gitea/modules/storage" | 	"code.gitea.io/gitea/modules/storage" | ||||||
| 	api "code.gitea.io/gitea/modules/structs" |  | ||||||
| 	"code.gitea.io/gitea/modules/timeutil" | 	"code.gitea.io/gitea/modules/timeutil" | ||||||
|  |  | ||||||
| 	gouuid "github.com/google/uuid" | 	gouuid "github.com/google/uuid" | ||||||
| @@ -43,19 +42,6 @@ func (a *Attachment) IncreaseDownloadCount() error { | |||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|  |  | ||||||
| // APIFormat converts models.Attachment to api.Attachment |  | ||||||
| func (a *Attachment) APIFormat() *api.Attachment { |  | ||||||
| 	return &api.Attachment{ |  | ||||||
| 		ID:            a.ID, |  | ||||||
| 		Name:          a.Name, |  | ||||||
| 		Created:       a.CreatedUnix.AsTime(), |  | ||||||
| 		DownloadCount: a.DownloadCount, |  | ||||||
| 		Size:          a.Size, |  | ||||||
| 		UUID:          a.UUID, |  | ||||||
| 		DownloadURL:   a.DownloadURL(), |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // AttachmentRelativePath returns the relative path | // AttachmentRelativePath returns the relative path | ||||||
| func AttachmentRelativePath(uuid string) string { | func AttachmentRelativePath(uuid string) string { | ||||||
| 	return path.Join(uuid[0:1], uuid[1:2], uuid) | 	return path.Join(uuid[0:1], uuid[1:2], uuid) | ||||||
|   | |||||||
| @@ -61,27 +61,6 @@ func (status *CommitStatus) APIURL() string { | |||||||
| 		setting.AppURL, status.Repo.FullName(), status.SHA) | 		setting.AppURL, status.Repo.FullName(), status.SHA) | ||||||
| } | } | ||||||
|  |  | ||||||
| // APIFormat assumes some fields assigned with values: |  | ||||||
| // Required - Repo, Creator |  | ||||||
| func (status *CommitStatus) APIFormat() *api.Status { |  | ||||||
| 	_ = status.loadRepo(x) |  | ||||||
| 	apiStatus := &api.Status{ |  | ||||||
| 		Created:     status.CreatedUnix.AsTime(), |  | ||||||
| 		Updated:     status.CreatedUnix.AsTime(), |  | ||||||
| 		State:       api.StatusState(status.State), |  | ||||||
| 		TargetURL:   status.TargetURL, |  | ||||||
| 		Description: status.Description, |  | ||||||
| 		ID:          status.Index, |  | ||||||
| 		URL:         status.APIURL(), |  | ||||||
| 		Context:     status.Context, |  | ||||||
| 	} |  | ||||||
| 	if status.Creator != nil { |  | ||||||
| 		apiStatus.Creator = status.Creator.APIFormat() |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return apiStatus |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // CalcCommitStatus returns commit status state via some status, the commit statues should order by id desc | // CalcCommitStatus returns commit status state via some status, the commit statues should order by id desc | ||||||
| func CalcCommitStatus(statuses []*CommitStatus) *CommitStatus { | func CalcCommitStatus(statuses []*CommitStatus) *CommitStatus { | ||||||
| 	var lastStatus *CommitStatus | 	var lastStatus *CommitStatus | ||||||
|   | |||||||
| @@ -20,7 +20,6 @@ import ( | |||||||
| 	"code.gitea.io/gitea/modules/markup/markdown" | 	"code.gitea.io/gitea/modules/markup/markdown" | ||||||
| 	"code.gitea.io/gitea/modules/references" | 	"code.gitea.io/gitea/modules/references" | ||||||
| 	"code.gitea.io/gitea/modules/structs" | 	"code.gitea.io/gitea/modules/structs" | ||||||
| 	api "code.gitea.io/gitea/modules/structs" |  | ||||||
| 	"code.gitea.io/gitea/modules/timeutil" | 	"code.gitea.io/gitea/modules/timeutil" | ||||||
|  |  | ||||||
| 	"github.com/unknwon/com" | 	"github.com/unknwon/com" | ||||||
| @@ -354,20 +353,6 @@ func (c *Comment) PRURL() string { | |||||||
| 	return c.Issue.HTMLURL() | 	return c.Issue.HTMLURL() | ||||||
| } | } | ||||||
|  |  | ||||||
| // APIFormat converts a Comment to the api.Comment format |  | ||||||
| func (c *Comment) APIFormat() *api.Comment { |  | ||||||
| 	return &api.Comment{ |  | ||||||
| 		ID:       c.ID, |  | ||||||
| 		Poster:   c.Poster.APIFormat(), |  | ||||||
| 		HTMLURL:  c.HTMLURL(), |  | ||||||
| 		IssueURL: c.IssueURL(), |  | ||||||
| 		PRURL:    c.PRURL(), |  | ||||||
| 		Body:     c.Content, |  | ||||||
| 		Created:  c.CreatedUnix.AsTime(), |  | ||||||
| 		Updated:  c.UpdatedUnix.AsTime(), |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // CommentHashTag returns unique hash tag for comment id. | // CommentHashTag returns unique hash tag for comment id. | ||||||
| func CommentHashTag(id int64) string { | func CommentHashTag(id int64) string { | ||||||
| 	return fmt.Sprintf("issuecomment-%d", id) | 	return fmt.Sprintf("issuecomment-%d", id) | ||||||
|   | |||||||
| @@ -12,7 +12,6 @@ import ( | |||||||
|  |  | ||||||
| 	"code.gitea.io/gitea/modules/setting" | 	"code.gitea.io/gitea/modules/setting" | ||||||
| 	"code.gitea.io/gitea/modules/structs" | 	"code.gitea.io/gitea/modules/structs" | ||||||
| 	api "code.gitea.io/gitea/modules/structs" |  | ||||||
| 	"code.gitea.io/gitea/modules/timeutil" | 	"code.gitea.io/gitea/modules/timeutil" | ||||||
|  |  | ||||||
| 	"xorm.io/builder" | 	"xorm.io/builder" | ||||||
| @@ -86,31 +85,6 @@ func (r *Release) HTMLURL() string { | |||||||
| 	return fmt.Sprintf("%s/releases/tag/%s", r.Repo.HTMLURL(), r.TagName) | 	return fmt.Sprintf("%s/releases/tag/%s", r.Repo.HTMLURL(), r.TagName) | ||||||
| } | } | ||||||
|  |  | ||||||
| // APIFormat convert a Release to api.Release |  | ||||||
| func (r *Release) APIFormat() *api.Release { |  | ||||||
| 	assets := make([]*api.Attachment, 0) |  | ||||||
| 	for _, att := range r.Attachments { |  | ||||||
| 		assets = append(assets, att.APIFormat()) |  | ||||||
| 	} |  | ||||||
| 	return &api.Release{ |  | ||||||
| 		ID:           r.ID, |  | ||||||
| 		TagName:      r.TagName, |  | ||||||
| 		Target:       r.Target, |  | ||||||
| 		Title:        r.Title, |  | ||||||
| 		Note:         r.Note, |  | ||||||
| 		URL:          r.APIURL(), |  | ||||||
| 		HTMLURL:      r.HTMLURL(), |  | ||||||
| 		TarURL:       r.TarURL(), |  | ||||||
| 		ZipURL:       r.ZipURL(), |  | ||||||
| 		IsDraft:      r.IsDraft, |  | ||||||
| 		IsPrerelease: r.IsPrerelease, |  | ||||||
| 		CreatedAt:    r.CreatedUnix.AsTime(), |  | ||||||
| 		PublishedAt:  r.CreatedUnix.AsTime(), |  | ||||||
| 		Publisher:    r.Publisher.APIFormat(), |  | ||||||
| 		Attachments:  assets, |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // IsReleaseExist returns true if release with given tag name already exists. | // IsReleaseExist returns true if release with given tag name already exists. | ||||||
| func IsReleaseExist(repoID int64, tagName string) (bool, error) { | func IsReleaseExist(repoID int64, tagName string) (bool, error) { | ||||||
| 	if len(tagName) == 0 { | 	if len(tagName) == 0 { | ||||||
|   | |||||||
| @@ -410,8 +410,17 @@ func (repo *Repository) innerAPIFormat(e Engine, mode AccessMode, isParent bool) | |||||||
| 	numReleases, _ := GetReleaseCountByRepoID(repo.ID, FindReleasesOptions{IncludeDrafts: false, IncludeTags: true}) | 	numReleases, _ := GetReleaseCountByRepoID(repo.ID, FindReleasesOptions{IncludeDrafts: false, IncludeTags: true}) | ||||||
|  |  | ||||||
| 	return &api.Repository{ | 	return &api.Repository{ | ||||||
| 		ID:                        repo.ID, | 		ID: repo.ID, | ||||||
| 		Owner:                     repo.Owner.APIFormat(), | 		// TODO use convert.ToUser(repo.Owner) | ||||||
|  | 		Owner: &api.User{ | ||||||
|  | 			ID:        repo.Owner.ID, | ||||||
|  | 			UserName:  repo.Owner.Name, | ||||||
|  | 			FullName:  repo.Owner.FullName, | ||||||
|  | 			Email:     repo.Owner.GetEmail(), | ||||||
|  | 			AvatarURL: repo.Owner.AvatarLink(), | ||||||
|  | 			LastLogin: repo.Owner.LastLoginUnix.AsTime(), | ||||||
|  | 			Created:   repo.Owner.CreatedUnix.AsTime(), | ||||||
|  | 		}, | ||||||
| 		Name:                      repo.Name, | 		Name:                      repo.Name, | ||||||
| 		FullName:                  repo.FullName(), | 		FullName:                  repo.FullName(), | ||||||
| 		Description:               repo.Description, | 		Description:               repo.Description, | ||||||
|   | |||||||
| @@ -29,7 +29,6 @@ import ( | |||||||
| 	"code.gitea.io/gitea/modules/setting" | 	"code.gitea.io/gitea/modules/setting" | ||||||
| 	"code.gitea.io/gitea/modules/storage" | 	"code.gitea.io/gitea/modules/storage" | ||||||
| 	"code.gitea.io/gitea/modules/structs" | 	"code.gitea.io/gitea/modules/structs" | ||||||
| 	api "code.gitea.io/gitea/modules/structs" |  | ||||||
| 	"code.gitea.io/gitea/modules/timeutil" | 	"code.gitea.io/gitea/modules/timeutil" | ||||||
| 	"code.gitea.io/gitea/modules/util" | 	"code.gitea.io/gitea/modules/util" | ||||||
|  |  | ||||||
| @@ -241,24 +240,6 @@ func GetAllUsers() ([]*User, error) { | |||||||
| 	return users, x.OrderBy("id").Find(&users) | 	return users, x.OrderBy("id").Find(&users) | ||||||
| } | } | ||||||
|  |  | ||||||
| // APIFormat converts a User to api.User |  | ||||||
| func (u *User) APIFormat() *api.User { |  | ||||||
| 	if u == nil { |  | ||||||
| 		return nil |  | ||||||
| 	} |  | ||||||
| 	return &api.User{ |  | ||||||
| 		ID:        u.ID, |  | ||||||
| 		UserName:  u.Name, |  | ||||||
| 		FullName:  u.FullName, |  | ||||||
| 		Email:     u.GetEmail(), |  | ||||||
| 		AvatarURL: u.AvatarLink(), |  | ||||||
| 		Language:  u.Language, |  | ||||||
| 		IsAdmin:   u.IsAdmin, |  | ||||||
| 		LastLogin: u.LastLoginUnix.AsTime(), |  | ||||||
| 		Created:   u.CreatedUnix.AsTime(), |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| // IsLocal returns true if user login type is LoginPlain. | // IsLocal returns true if user login type is LoginPlain. | ||||||
| func (u *User) IsLocal() bool { | func (u *User) IsLocal() bool { | ||||||
| 	return u.LoginType <= LoginPlain | 	return u.LoginType <= LoginPlain | ||||||
|   | |||||||
| @@ -78,23 +78,6 @@ func TestGetUserEmailsByNames(t *testing.T) { | |||||||
| 	assert.Equal(t, []string{"user8@example.com"}, GetUserEmailsByNames([]string{"user8", "user7"})) | 	assert.Equal(t, []string{"user8@example.com"}, GetUserEmailsByNames([]string{"user8", "user7"})) | ||||||
| } | } | ||||||
|  |  | ||||||
| func TestUser_APIFormat(t *testing.T) { |  | ||||||
|  |  | ||||||
| 	user, err := GetUserByID(1) |  | ||||||
| 	assert.NoError(t, err) |  | ||||||
| 	assert.True(t, user.IsAdmin) |  | ||||||
|  |  | ||||||
| 	apiUser := user.APIFormat() |  | ||||||
| 	assert.True(t, apiUser.IsAdmin) |  | ||||||
|  |  | ||||||
| 	user, err = GetUserByID(2) |  | ||||||
| 	assert.NoError(t, err) |  | ||||||
| 	assert.False(t, user.IsAdmin) |  | ||||||
|  |  | ||||||
| 	apiUser = user.APIFormat() |  | ||||||
| 	assert.False(t, apiUser.IsAdmin) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func TestCanCreateOrganization(t *testing.T) { | func TestCanCreateOrganization(t *testing.T) { | ||||||
| 	assert.NoError(t, PrepareTestDatabase()) | 	assert.NoError(t, PrepareTestDatabase()) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -8,7 +8,6 @@ import ( | |||||||
| 	"fmt" | 	"fmt" | ||||||
|  |  | ||||||
| 	"code.gitea.io/gitea/modules/log" | 	"code.gitea.io/gitea/modules/log" | ||||||
| 	api "code.gitea.io/gitea/modules/structs" |  | ||||||
| ) | ) | ||||||
|  |  | ||||||
| //UserList is a list of user. | //UserList is a list of user. | ||||||
| @@ -94,12 +93,3 @@ func (users UserList) loadTwoFactorStatus(e Engine) (map[int64]*TwoFactor, error | |||||||
| 	} | 	} | ||||||
| 	return tokenMaps, nil | 	return tokenMaps, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| //APIFormat return list of users in api format |  | ||||||
| func (users UserList) APIFormat() []*api.User { |  | ||||||
| 	result := make([]*api.User, 0, len(users)) |  | ||||||
| 	for _, u := range users { |  | ||||||
| 		result = append(result, u.APIFormat()) |  | ||||||
| 	} |  | ||||||
| 	return result |  | ||||||
| } |  | ||||||
|   | |||||||
| @@ -339,3 +339,24 @@ func ToOAuth2Application(app *models.OAuth2Application) *api.OAuth2Application { | |||||||
| 		Created:      app.CreatedUnix.AsTime(), | 		Created:      app.CreatedUnix.AsTime(), | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // ToCommitStatus converts models.CommitStatus to api.Status | ||||||
|  | func ToCommitStatus(status *models.CommitStatus) *api.Status { | ||||||
|  | 	apiStatus := &api.Status{ | ||||||
|  | 		Created:     status.CreatedUnix.AsTime(), | ||||||
|  | 		Updated:     status.CreatedUnix.AsTime(), | ||||||
|  | 		State:       api.StatusState(status.State), | ||||||
|  | 		TargetURL:   status.TargetURL, | ||||||
|  | 		Description: status.Description, | ||||||
|  | 		ID:          status.Index, | ||||||
|  | 		URL:         status.APIURL(), | ||||||
|  | 		Context:     status.Context, | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if status.CreatorID != 0 { | ||||||
|  | 		creator, _ := models.GetUserByID(status.CreatorID) | ||||||
|  | 		apiStatus.Creator = ToUser(creator, false, false) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return apiStatus | ||||||
|  | } | ||||||
|   | |||||||
| @@ -86,13 +86,13 @@ func ToCommit(repo *models.Repository, commit *git.Commit, userCache map[string] | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if ok { | 	if ok { | ||||||
| 		apiAuthor = cacheAuthor.APIFormat() | 		apiAuthor = ToUser(cacheAuthor, false, false) | ||||||
| 	} else { | 	} else { | ||||||
| 		author, err := models.GetUserByEmail(commit.Author.Email) | 		author, err := models.GetUserByEmail(commit.Author.Email) | ||||||
| 		if err != nil && !models.IsErrUserNotExist(err) { | 		if err != nil && !models.IsErrUserNotExist(err) { | ||||||
| 			return nil, err | 			return nil, err | ||||||
| 		} else if err == nil { | 		} else if err == nil { | ||||||
| 			apiAuthor = author.APIFormat() | 			apiAuthor = ToUser(author, false, false) | ||||||
| 			if userCache != nil { | 			if userCache != nil { | ||||||
| 				userCache[commit.Author.Email] = author | 				userCache[commit.Author.Email] = author | ||||||
| 			} | 			} | ||||||
| @@ -108,13 +108,13 @@ func ToCommit(repo *models.Repository, commit *git.Commit, userCache map[string] | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if ok { | 	if ok { | ||||||
| 		apiCommitter = cacheCommitter.APIFormat() | 		apiCommitter = ToUser(cacheCommitter, false, false) | ||||||
| 	} else { | 	} else { | ||||||
| 		committer, err := models.GetUserByEmail(commit.Committer.Email) | 		committer, err := models.GetUserByEmail(commit.Committer.Email) | ||||||
| 		if err != nil && !models.IsErrUserNotExist(err) { | 		if err != nil && !models.IsErrUserNotExist(err) { | ||||||
| 			return nil, err | 			return nil, err | ||||||
| 		} else if err == nil { | 		} else if err == nil { | ||||||
| 			apiCommitter = committer.APIFormat() | 			apiCommitter = ToUser(committer, false, false) | ||||||
| 			if userCache != nil { | 			if userCache != nil { | ||||||
| 				userCache[commit.Committer.Email] = committer | 				userCache[commit.Committer.Email] = committer | ||||||
| 			} | 			} | ||||||
|   | |||||||
| @@ -31,7 +31,7 @@ func ToAPIIssue(issue *models.Issue) *api.Issue { | |||||||
| 		URL:      issue.APIURL(), | 		URL:      issue.APIURL(), | ||||||
| 		HTMLURL:  issue.HTMLURL(), | 		HTMLURL:  issue.HTMLURL(), | ||||||
| 		Index:    issue.Index, | 		Index:    issue.Index, | ||||||
| 		Poster:   issue.Poster.APIFormat(), | 		Poster:   ToUser(issue.Poster, false, false), | ||||||
| 		Title:    issue.Title, | 		Title:    issue.Title, | ||||||
| 		Body:     issue.Content, | 		Body:     issue.Content, | ||||||
| 		Labels:   ToLabelList(issue.Labels), | 		Labels:   ToLabelList(issue.Labels), | ||||||
| @@ -65,9 +65,9 @@ func ToAPIIssue(issue *models.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, assignee.APIFormat()) | 			apiIssue.Assignees = append(apiIssue.Assignees, ToUser(assignee, false, false)) | ||||||
| 		} | 		} | ||||||
| 		apiIssue.Assignee = issue.Assignees[0].APIFormat() // For compatibility, we're keeping the first assignee as `apiIssue.Assignee` | 		apiIssue.Assignee = ToUser(issue.Assignees[0], false, false) // For compatibility, we're keeping the first assignee as `apiIssue.Assignee` | ||||||
| 	} | 	} | ||||||
| 	if issue.IsPull { | 	if issue.IsPull { | ||||||
| 		if err := issue.LoadPullRequest(); err != nil { | 		if err := issue.LoadPullRequest(); err != nil { | ||||||
|   | |||||||
							
								
								
									
										24
									
								
								modules/convert/issue_comment.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								modules/convert/issue_comment.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | |||||||
|  | // Copyright 2020 The Gitea Authors. All rights reserved. | ||||||
|  | // Use of this source code is governed by a MIT-style | ||||||
|  | // license that can be found in the LICENSE file. | ||||||
|  |  | ||||||
|  | package convert | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"code.gitea.io/gitea/models" | ||||||
|  | 	api "code.gitea.io/gitea/modules/structs" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // ToComment converts a models.Comment to the api.Comment format | ||||||
|  | func ToComment(c *models.Comment) *api.Comment { | ||||||
|  | 	return &api.Comment{ | ||||||
|  | 		ID:       c.ID, | ||||||
|  | 		Poster:   ToUser(c.Poster, false, false), | ||||||
|  | 		HTMLURL:  c.HTMLURL(), | ||||||
|  | 		IssueURL: c.IssueURL(), | ||||||
|  | 		PRURL:    c.PRURL(), | ||||||
|  | 		Body:     c.Content, | ||||||
|  | 		Created:  c.CreatedUnix.AsTime(), | ||||||
|  | 		Updated:  c.UpdatedUnix.AsTime(), | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @@ -141,7 +141,7 @@ func ToAPIPullRequest(pr *models.PullRequest) *api.PullRequest { | |||||||
| 	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 = pr.Merger.APIFormat() | 		apiPullRequest.MergedBy = ToUser(pr.Merger, false, false) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return apiPullRequest | 	return apiPullRequest | ||||||
|   | |||||||
							
								
								
									
										48
									
								
								modules/convert/release.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								modules/convert/release.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,48 @@ | |||||||
|  | // Copyright 2020 The Gitea Authors. All rights reserved. | ||||||
|  | // Use of this source code is governed by a MIT-style | ||||||
|  | // license that can be found in the LICENSE file. | ||||||
|  |  | ||||||
|  | package convert | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"code.gitea.io/gitea/models" | ||||||
|  | 	api "code.gitea.io/gitea/modules/structs" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | // ToRelease convert a models.Release to api.Release | ||||||
|  | func ToRelease(r *models.Release) *api.Release { | ||||||
|  | 	assets := make([]*api.Attachment, 0) | ||||||
|  | 	for _, att := range r.Attachments { | ||||||
|  | 		assets = append(assets, ToReleaseAttachment(att)) | ||||||
|  | 	} | ||||||
|  | 	return &api.Release{ | ||||||
|  | 		ID:           r.ID, | ||||||
|  | 		TagName:      r.TagName, | ||||||
|  | 		Target:       r.Target, | ||||||
|  | 		Title:        r.Title, | ||||||
|  | 		Note:         r.Note, | ||||||
|  | 		URL:          r.APIURL(), | ||||||
|  | 		HTMLURL:      r.HTMLURL(), | ||||||
|  | 		TarURL:       r.TarURL(), | ||||||
|  | 		ZipURL:       r.ZipURL(), | ||||||
|  | 		IsDraft:      r.IsDraft, | ||||||
|  | 		IsPrerelease: r.IsPrerelease, | ||||||
|  | 		CreatedAt:    r.CreatedUnix.AsTime(), | ||||||
|  | 		PublishedAt:  r.CreatedUnix.AsTime(), | ||||||
|  | 		Publisher:    ToUser(r.Publisher, false, false), | ||||||
|  | 		Attachments:  assets, | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // ToReleaseAttachment converts models.Attachment to api.Attachment | ||||||
|  | func ToReleaseAttachment(a *models.Attachment) *api.Attachment { | ||||||
|  | 	return &api.Attachment{ | ||||||
|  | 		ID:            a.ID, | ||||||
|  | 		Name:          a.Name, | ||||||
|  | 		Created:       a.CreatedUnix.AsTime(), | ||||||
|  | 		DownloadCount: a.DownloadCount, | ||||||
|  | 		Size:          a.Size, | ||||||
|  | 		UUID:          a.UUID, | ||||||
|  | 		DownloadURL:   a.DownloadURL(), | ||||||
|  | 	} | ||||||
|  | } | ||||||
| @@ -13,6 +13,9 @@ import ( | |||||||
| // ToUser convert models.User to api.User | // ToUser convert models.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(user *models.User, signed, authed bool) *api.User { | func ToUser(user *models.User, signed, authed bool) *api.User { | ||||||
|  | 	if user == nil { | ||||||
|  | 		return nil | ||||||
|  | 	} | ||||||
| 	result := &api.User{ | 	result := &api.User{ | ||||||
| 		ID:        user.ID, | 		ID:        user.ID, | ||||||
| 		UserName:  user.Name, | 		UserName:  user.Name, | ||||||
|   | |||||||
							
								
								
									
										28
									
								
								modules/convert/user_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								modules/convert/user_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | |||||||
|  | // Copyright 2020 The Gitea Authors. All rights reserved. | ||||||
|  | // Use of this source code is governed by a MIT-style | ||||||
|  | // license that can be found in the LICENSE file. | ||||||
|  |  | ||||||
|  | package convert | ||||||
|  |  | ||||||
|  | import ( | ||||||
|  | 	"testing" | ||||||
|  |  | ||||||
|  | 	"code.gitea.io/gitea/models" | ||||||
|  | 	"github.com/stretchr/testify/assert" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | func TestUser_ToUser(t *testing.T) { | ||||||
|  |  | ||||||
|  | 	user1 := models.AssertExistsAndLoadBean(t, &models.User{ID: 1, IsAdmin: true}).(*models.User) | ||||||
|  |  | ||||||
|  | 	apiUser := ToUser(user1, true, true) | ||||||
|  | 	assert.True(t, apiUser.IsAdmin) | ||||||
|  |  | ||||||
|  | 	user2 := models.AssertExistsAndLoadBean(t, &models.User{ID: 2, IsAdmin: false}).(*models.User) | ||||||
|  |  | ||||||
|  | 	apiUser = ToUser(user2, true, true) | ||||||
|  | 	assert.False(t, apiUser.IsAdmin) | ||||||
|  |  | ||||||
|  | 	apiUser = ToUser(user1, false, false) | ||||||
|  | 	assert.False(t, apiUser.IsAdmin) | ||||||
|  | } | ||||||
| @@ -53,7 +53,7 @@ func (m *webhookNotifier) NotifyIssueClearLabels(doer *models.User, issue *model | |||||||
| 			Index:       issue.Index, | 			Index:       issue.Index, | ||||||
| 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | ||||||
| 			Repository:  issue.Repo.APIFormat(mode), | 			Repository:  issue.Repo.APIFormat(mode), | ||||||
| 			Sender:      doer.APIFormat(), | 			Sender:      convert.ToUser(doer, false, false), | ||||||
| 		}) | 		}) | ||||||
| 	} else { | 	} else { | ||||||
| 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssueLabel, &api.IssuePayload{ | 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssueLabel, &api.IssuePayload{ | ||||||
| @@ -61,7 +61,7 @@ func (m *webhookNotifier) NotifyIssueClearLabels(doer *models.User, issue *model | |||||||
| 			Index:      issue.Index, | 			Index:      issue.Index, | ||||||
| 			Issue:      convert.ToAPIIssue(issue), | 			Issue:      convert.ToAPIIssue(issue), | ||||||
| 			Repository: issue.Repo.APIFormat(mode), | 			Repository: issue.Repo.APIFormat(mode), | ||||||
| 			Sender:     doer.APIFormat(), | 			Sender:     convert.ToUser(doer, false, false), | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| @@ -77,7 +77,7 @@ func (m *webhookNotifier) NotifyForkRepository(doer *models.User, oldRepo, repo | |||||||
| 	if err := webhook_module.PrepareWebhooks(oldRepo, models.HookEventFork, &api.ForkPayload{ | 	if err := webhook_module.PrepareWebhooks(oldRepo, models.HookEventFork, &api.ForkPayload{ | ||||||
| 		Forkee: oldRepo.APIFormat(oldMode), | 		Forkee: oldRepo.APIFormat(oldMode), | ||||||
| 		Repo:   repo.APIFormat(mode), | 		Repo:   repo.APIFormat(mode), | ||||||
| 		Sender: doer.APIFormat(), | 		Sender: convert.ToUser(doer, false, false), | ||||||
| 	}); err != nil { | 	}); err != nil { | ||||||
| 		log.Error("PrepareWebhooks [repo_id: %d]: %v", oldRepo.ID, err) | 		log.Error("PrepareWebhooks [repo_id: %d]: %v", oldRepo.ID, err) | ||||||
| 	} | 	} | ||||||
| @@ -89,8 +89,8 @@ func (m *webhookNotifier) NotifyForkRepository(doer *models.User, oldRepo, repo | |||||||
| 		if err := webhook_module.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{ | 		if err := webhook_module.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{ | ||||||
| 			Action:       api.HookRepoCreated, | 			Action:       api.HookRepoCreated, | ||||||
| 			Repository:   repo.APIFormat(models.AccessModeOwner), | 			Repository:   repo.APIFormat(models.AccessModeOwner), | ||||||
| 			Organization: u.APIFormat(), | 			Organization: convert.ToUser(u, false, false), | ||||||
| 			Sender:       doer.APIFormat(), | 			Sender:       convert.ToUser(doer, false, false), | ||||||
| 		}); err != nil { | 		}); err != nil { | ||||||
| 			log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err) | 			log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err) | ||||||
| 		} | 		} | ||||||
| @@ -102,8 +102,8 @@ func (m *webhookNotifier) NotifyCreateRepository(doer *models.User, u *models.Us | |||||||
| 	if err := webhook_module.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{ | 	if err := webhook_module.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{ | ||||||
| 		Action:       api.HookRepoCreated, | 		Action:       api.HookRepoCreated, | ||||||
| 		Repository:   repo.APIFormat(models.AccessModeOwner), | 		Repository:   repo.APIFormat(models.AccessModeOwner), | ||||||
| 		Organization: u.APIFormat(), | 		Organization: convert.ToUser(u, false, false), | ||||||
| 		Sender:       doer.APIFormat(), | 		Sender:       convert.ToUser(doer, false, false), | ||||||
| 	}); err != nil { | 	}); err != nil { | ||||||
| 		log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err) | 		log.Error("PrepareWebhooks [repo_id: %d]: %v", repo.ID, err) | ||||||
| 	} | 	} | ||||||
| @@ -115,8 +115,8 @@ func (m *webhookNotifier) NotifyDeleteRepository(doer *models.User, repo *models | |||||||
| 	if err := webhook_module.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{ | 	if err := webhook_module.PrepareWebhooks(repo, models.HookEventRepository, &api.RepositoryPayload{ | ||||||
| 		Action:       api.HookRepoDeleted, | 		Action:       api.HookRepoDeleted, | ||||||
| 		Repository:   repo.APIFormat(models.AccessModeOwner), | 		Repository:   repo.APIFormat(models.AccessModeOwner), | ||||||
| 		Organization: u.APIFormat(), | 		Organization: convert.ToUser(u, false, false), | ||||||
| 		Sender:       doer.APIFormat(), | 		Sender:       convert.ToUser(doer, false, false), | ||||||
| 	}); 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,7 +135,7 @@ func (m *webhookNotifier) NotifyIssueChangeAssignee(doer *models.User, issue *mo | |||||||
| 			Index:       issue.Index, | 			Index:       issue.Index, | ||||||
| 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | ||||||
| 			Repository:  issue.Repo.APIFormat(mode), | 			Repository:  issue.Repo.APIFormat(mode), | ||||||
| 			Sender:      doer.APIFormat(), | 			Sender:      convert.ToUser(doer, false, false), | ||||||
| 		} | 		} | ||||||
| 		if removed { | 		if removed { | ||||||
| 			apiPullRequest.Action = api.HookIssueUnassigned | 			apiPullRequest.Action = api.HookIssueUnassigned | ||||||
| @@ -153,7 +153,7 @@ func (m *webhookNotifier) NotifyIssueChangeAssignee(doer *models.User, issue *mo | |||||||
| 			Index:      issue.Index, | 			Index:      issue.Index, | ||||||
| 			Issue:      convert.ToAPIIssue(issue), | 			Issue:      convert.ToAPIIssue(issue), | ||||||
| 			Repository: issue.Repo.APIFormat(mode), | 			Repository: issue.Repo.APIFormat(mode), | ||||||
| 			Sender:     doer.APIFormat(), | 			Sender:     convert.ToUser(doer, false, false), | ||||||
| 		} | 		} | ||||||
| 		if removed { | 		if removed { | ||||||
| 			apiIssue.Action = api.HookIssueUnassigned | 			apiIssue.Action = api.HookIssueUnassigned | ||||||
| @@ -187,7 +187,7 @@ func (m *webhookNotifier) NotifyIssueChangeTitle(doer *models.User, issue *model | |||||||
| 			}, | 			}, | ||||||
| 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | ||||||
| 			Repository:  issue.Repo.APIFormat(mode), | 			Repository:  issue.Repo.APIFormat(mode), | ||||||
| 			Sender:      doer.APIFormat(), | 			Sender:      convert.ToUser(doer, false, false), | ||||||
| 		}) | 		}) | ||||||
| 	} else { | 	} else { | ||||||
| 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{ | 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{ | ||||||
| @@ -200,7 +200,7 @@ func (m *webhookNotifier) NotifyIssueChangeTitle(doer *models.User, issue *model | |||||||
| 			}, | 			}, | ||||||
| 			Issue:      convert.ToAPIIssue(issue), | 			Issue:      convert.ToAPIIssue(issue), | ||||||
| 			Repository: issue.Repo.APIFormat(mode), | 			Repository: issue.Repo.APIFormat(mode), | ||||||
| 			Sender:     issue.Poster.APIFormat(), | 			Sender:     convert.ToUser(issue.Poster, false, false), | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -222,7 +222,7 @@ func (m *webhookNotifier) NotifyIssueChangeStatus(doer *models.User, issue *mode | |||||||
| 			Index:       issue.Index, | 			Index:       issue.Index, | ||||||
| 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | ||||||
| 			Repository:  issue.Repo.APIFormat(mode), | 			Repository:  issue.Repo.APIFormat(mode), | ||||||
| 			Sender:      doer.APIFormat(), | 			Sender:      convert.ToUser(doer, false, false), | ||||||
| 		} | 		} | ||||||
| 		if isClosed { | 		if isClosed { | ||||||
| 			apiPullRequest.Action = api.HookIssueClosed | 			apiPullRequest.Action = api.HookIssueClosed | ||||||
| @@ -235,7 +235,7 @@ func (m *webhookNotifier) NotifyIssueChangeStatus(doer *models.User, issue *mode | |||||||
| 			Index:      issue.Index, | 			Index:      issue.Index, | ||||||
| 			Issue:      convert.ToAPIIssue(issue), | 			Issue:      convert.ToAPIIssue(issue), | ||||||
| 			Repository: issue.Repo.APIFormat(mode), | 			Repository: issue.Repo.APIFormat(mode), | ||||||
| 			Sender:     doer.APIFormat(), | 			Sender:     convert.ToUser(doer, false, false), | ||||||
| 		} | 		} | ||||||
| 		if isClosed { | 		if isClosed { | ||||||
| 			apiIssue.Action = api.HookIssueClosed | 			apiIssue.Action = api.HookIssueClosed | ||||||
| @@ -265,7 +265,7 @@ func (m *webhookNotifier) NotifyNewIssue(issue *models.Issue) { | |||||||
| 		Index:      issue.Index, | 		Index:      issue.Index, | ||||||
| 		Issue:      convert.ToAPIIssue(issue), | 		Issue:      convert.ToAPIIssue(issue), | ||||||
| 		Repository: issue.Repo.APIFormat(mode), | 		Repository: issue.Repo.APIFormat(mode), | ||||||
| 		Sender:     issue.Poster.APIFormat(), | 		Sender:     convert.ToUser(issue.Poster, false, false), | ||||||
| 	}); err != nil { | 	}); err != nil { | ||||||
| 		log.Error("PrepareWebhooks: %v", err) | 		log.Error("PrepareWebhooks: %v", err) | ||||||
| 	} | 	} | ||||||
| @@ -291,7 +291,7 @@ func (m *webhookNotifier) NotifyNewPullRequest(pull *models.PullRequest) { | |||||||
| 		Index:       pull.Issue.Index, | 		Index:       pull.Issue.Index, | ||||||
| 		PullRequest: convert.ToAPIPullRequest(pull), | 		PullRequest: convert.ToAPIPullRequest(pull), | ||||||
| 		Repository:  pull.Issue.Repo.APIFormat(mode), | 		Repository:  pull.Issue.Repo.APIFormat(mode), | ||||||
| 		Sender:      pull.Issue.Poster.APIFormat(), | 		Sender:      convert.ToUser(pull.Issue.Poster, false, false), | ||||||
| 	}); err != nil { | 	}); err != nil { | ||||||
| 		log.Error("PrepareWebhooks: %v", err) | 		log.Error("PrepareWebhooks: %v", err) | ||||||
| 	} | 	} | ||||||
| @@ -312,7 +312,7 @@ func (m *webhookNotifier) NotifyIssueChangeContent(doer *models.User, issue *mod | |||||||
| 			}, | 			}, | ||||||
| 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | ||||||
| 			Repository:  issue.Repo.APIFormat(mode), | 			Repository:  issue.Repo.APIFormat(mode), | ||||||
| 			Sender:      doer.APIFormat(), | 			Sender:      convert.ToUser(doer, false, false), | ||||||
| 		}) | 		}) | ||||||
| 	} else { | 	} else { | ||||||
| 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{ | 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssues, &api.IssuePayload{ | ||||||
| @@ -325,7 +325,7 @@ func (m *webhookNotifier) NotifyIssueChangeContent(doer *models.User, issue *mod | |||||||
| 			}, | 			}, | ||||||
| 			Issue:      convert.ToAPIIssue(issue), | 			Issue:      convert.ToAPIIssue(issue), | ||||||
| 			Repository: issue.Repo.APIFormat(mode), | 			Repository: issue.Repo.APIFormat(mode), | ||||||
| 			Sender:     doer.APIFormat(), | 			Sender:     convert.ToUser(doer, false, false), | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| @@ -355,28 +355,28 @@ func (m *webhookNotifier) NotifyUpdateComment(doer *models.User, c *models.Comme | |||||||
| 		err = webhook_module.PrepareWebhooks(c.Issue.Repo, models.HookEventPullRequestComment, &api.IssueCommentPayload{ | 		err = webhook_module.PrepareWebhooks(c.Issue.Repo, models.HookEventPullRequestComment, &api.IssueCommentPayload{ | ||||||
| 			Action:  api.HookIssueCommentEdited, | 			Action:  api.HookIssueCommentEdited, | ||||||
| 			Issue:   convert.ToAPIIssue(c.Issue), | 			Issue:   convert.ToAPIIssue(c.Issue), | ||||||
| 			Comment: c.APIFormat(), | 			Comment: convert.ToComment(c), | ||||||
| 			Changes: &api.ChangesPayload{ | 			Changes: &api.ChangesPayload{ | ||||||
| 				Body: &api.ChangesFromPayload{ | 				Body: &api.ChangesFromPayload{ | ||||||
| 					From: oldContent, | 					From: oldContent, | ||||||
| 				}, | 				}, | ||||||
| 			}, | 			}, | ||||||
| 			Repository: c.Issue.Repo.APIFormat(mode), | 			Repository: c.Issue.Repo.APIFormat(mode), | ||||||
| 			Sender:     doer.APIFormat(), | 			Sender:     convert.ToUser(doer, false, false), | ||||||
| 			IsPull:     true, | 			IsPull:     true, | ||||||
| 		}) | 		}) | ||||||
| 	} else { | 	} else { | ||||||
| 		err = webhook_module.PrepareWebhooks(c.Issue.Repo, models.HookEventIssueComment, &api.IssueCommentPayload{ | 		err = webhook_module.PrepareWebhooks(c.Issue.Repo, models.HookEventIssueComment, &api.IssueCommentPayload{ | ||||||
| 			Action:  api.HookIssueCommentEdited, | 			Action:  api.HookIssueCommentEdited, | ||||||
| 			Issue:   convert.ToAPIIssue(c.Issue), | 			Issue:   convert.ToAPIIssue(c.Issue), | ||||||
| 			Comment: c.APIFormat(), | 			Comment: convert.ToComment(c), | ||||||
| 			Changes: &api.ChangesPayload{ | 			Changes: &api.ChangesPayload{ | ||||||
| 				Body: &api.ChangesFromPayload{ | 				Body: &api.ChangesFromPayload{ | ||||||
| 					From: oldContent, | 					From: oldContent, | ||||||
| 				}, | 				}, | ||||||
| 			}, | 			}, | ||||||
| 			Repository: c.Issue.Repo.APIFormat(mode), | 			Repository: c.Issue.Repo.APIFormat(mode), | ||||||
| 			Sender:     doer.APIFormat(), | 			Sender:     convert.ToUser(doer, false, false), | ||||||
| 			IsPull:     false, | 			IsPull:     false, | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
| @@ -395,18 +395,18 @@ func (m *webhookNotifier) NotifyCreateIssueComment(doer *models.User, repo *mode | |||||||
| 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventPullRequestComment, &api.IssueCommentPayload{ | 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventPullRequestComment, &api.IssueCommentPayload{ | ||||||
| 			Action:     api.HookIssueCommentCreated, | 			Action:     api.HookIssueCommentCreated, | ||||||
| 			Issue:      convert.ToAPIIssue(issue), | 			Issue:      convert.ToAPIIssue(issue), | ||||||
| 			Comment:    comment.APIFormat(), | 			Comment:    convert.ToComment(comment), | ||||||
| 			Repository: repo.APIFormat(mode), | 			Repository: repo.APIFormat(mode), | ||||||
| 			Sender:     doer.APIFormat(), | 			Sender:     convert.ToUser(doer, false, false), | ||||||
| 			IsPull:     true, | 			IsPull:     true, | ||||||
| 		}) | 		}) | ||||||
| 	} else { | 	} else { | ||||||
| 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssueComment, &api.IssueCommentPayload{ | 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssueComment, &api.IssueCommentPayload{ | ||||||
| 			Action:     api.HookIssueCommentCreated, | 			Action:     api.HookIssueCommentCreated, | ||||||
| 			Issue:      convert.ToAPIIssue(issue), | 			Issue:      convert.ToAPIIssue(issue), | ||||||
| 			Comment:    comment.APIFormat(), | 			Comment:    convert.ToComment(comment), | ||||||
| 			Repository: repo.APIFormat(mode), | 			Repository: repo.APIFormat(mode), | ||||||
| 			Sender:     doer.APIFormat(), | 			Sender:     convert.ToUser(doer, false, false), | ||||||
| 			IsPull:     false, | 			IsPull:     false, | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
| @@ -439,18 +439,18 @@ func (m *webhookNotifier) NotifyDeleteComment(doer *models.User, comment *models | |||||||
| 		err = webhook_module.PrepareWebhooks(comment.Issue.Repo, models.HookEventPullRequestComment, &api.IssueCommentPayload{ | 		err = webhook_module.PrepareWebhooks(comment.Issue.Repo, models.HookEventPullRequestComment, &api.IssueCommentPayload{ | ||||||
| 			Action:     api.HookIssueCommentDeleted, | 			Action:     api.HookIssueCommentDeleted, | ||||||
| 			Issue:      convert.ToAPIIssue(comment.Issue), | 			Issue:      convert.ToAPIIssue(comment.Issue), | ||||||
| 			Comment:    comment.APIFormat(), | 			Comment:    convert.ToComment(comment), | ||||||
| 			Repository: comment.Issue.Repo.APIFormat(mode), | 			Repository: comment.Issue.Repo.APIFormat(mode), | ||||||
| 			Sender:     doer.APIFormat(), | 			Sender:     convert.ToUser(doer, false, false), | ||||||
| 			IsPull:     true, | 			IsPull:     true, | ||||||
| 		}) | 		}) | ||||||
| 	} else { | 	} else { | ||||||
| 		err = webhook_module.PrepareWebhooks(comment.Issue.Repo, models.HookEventIssueComment, &api.IssueCommentPayload{ | 		err = webhook_module.PrepareWebhooks(comment.Issue.Repo, models.HookEventIssueComment, &api.IssueCommentPayload{ | ||||||
| 			Action:     api.HookIssueCommentDeleted, | 			Action:     api.HookIssueCommentDeleted, | ||||||
| 			Issue:      convert.ToAPIIssue(comment.Issue), | 			Issue:      convert.ToAPIIssue(comment.Issue), | ||||||
| 			Comment:    comment.APIFormat(), | 			Comment:    convert.ToComment(comment), | ||||||
| 			Repository: comment.Issue.Repo.APIFormat(mode), | 			Repository: comment.Issue.Repo.APIFormat(mode), | ||||||
| 			Sender:     doer.APIFormat(), | 			Sender:     convert.ToUser(doer, false, false), | ||||||
| 			IsPull:     false, | 			IsPull:     false, | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
| @@ -490,7 +490,7 @@ func (m *webhookNotifier) NotifyIssueChangeLabels(doer *models.User, issue *mode | |||||||
| 			Index:       issue.Index, | 			Index:       issue.Index, | ||||||
| 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | ||||||
| 			Repository:  issue.Repo.APIFormat(models.AccessModeNone), | 			Repository:  issue.Repo.APIFormat(models.AccessModeNone), | ||||||
| 			Sender:      doer.APIFormat(), | 			Sender:      convert.ToUser(doer, false, false), | ||||||
| 		}) | 		}) | ||||||
| 	} else { | 	} else { | ||||||
| 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssueLabel, &api.IssuePayload{ | 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssueLabel, &api.IssuePayload{ | ||||||
| @@ -498,7 +498,7 @@ func (m *webhookNotifier) NotifyIssueChangeLabels(doer *models.User, issue *mode | |||||||
| 			Index:      issue.Index, | 			Index:      issue.Index, | ||||||
| 			Issue:      convert.ToAPIIssue(issue), | 			Issue:      convert.ToAPIIssue(issue), | ||||||
| 			Repository: issue.Repo.APIFormat(mode), | 			Repository: issue.Repo.APIFormat(mode), | ||||||
| 			Sender:     doer.APIFormat(), | 			Sender:     convert.ToUser(doer, false, false), | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| @@ -532,7 +532,7 @@ func (m *webhookNotifier) NotifyIssueChangeMilestone(doer *models.User, issue *m | |||||||
| 			Index:       issue.Index, | 			Index:       issue.Index, | ||||||
| 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | 			PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | ||||||
| 			Repository:  issue.Repo.APIFormat(mode), | 			Repository:  issue.Repo.APIFormat(mode), | ||||||
| 			Sender:      doer.APIFormat(), | 			Sender:      convert.ToUser(doer, false, false), | ||||||
| 		}) | 		}) | ||||||
| 	} else { | 	} else { | ||||||
| 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssueMilestone, &api.IssuePayload{ | 		err = webhook_module.PrepareWebhooks(issue.Repo, models.HookEventIssueMilestone, &api.IssuePayload{ | ||||||
| @@ -540,7 +540,7 @@ func (m *webhookNotifier) NotifyIssueChangeMilestone(doer *models.User, issue *m | |||||||
| 			Index:      issue.Index, | 			Index:      issue.Index, | ||||||
| 			Issue:      convert.ToAPIIssue(issue), | 			Issue:      convert.ToAPIIssue(issue), | ||||||
| 			Repository: issue.Repo.APIFormat(mode), | 			Repository: issue.Repo.APIFormat(mode), | ||||||
| 			Sender:     doer.APIFormat(), | 			Sender:     convert.ToUser(doer, false, false), | ||||||
| 		}) | 		}) | ||||||
| 	} | 	} | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| @@ -549,7 +549,7 @@ func (m *webhookNotifier) NotifyIssueChangeMilestone(doer *models.User, issue *m | |||||||
| } | } | ||||||
|  |  | ||||||
| func (m *webhookNotifier) NotifyPushCommits(pusher *models.User, repo *models.Repository, refName, oldCommitID, newCommitID string, commits *repository.PushCommits) { | func (m *webhookNotifier) NotifyPushCommits(pusher *models.User, repo *models.Repository, refName, oldCommitID, newCommitID string, commits *repository.PushCommits) { | ||||||
| 	apiPusher := pusher.APIFormat() | 	apiPusher := convert.ToUser(pusher, false, false) | ||||||
| 	apiCommits, err := commits.ToAPIPayloadCommits(repo.RepoPath(), repo.HTMLURL()) | 	apiCommits, err := commits.ToAPIPayloadCommits(repo.RepoPath(), repo.HTMLURL()) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Error("commits.ToAPIPayloadCommits failed: %v", err) | 		log.Error("commits.ToAPIPayloadCommits failed: %v", err) | ||||||
| @@ -598,7 +598,7 @@ func (*webhookNotifier) NotifyMergePullRequest(pr *models.PullRequest, doer *mod | |||||||
| 		Index:       pr.Issue.Index, | 		Index:       pr.Issue.Index, | ||||||
| 		PullRequest: convert.ToAPIPullRequest(pr), | 		PullRequest: convert.ToAPIPullRequest(pr), | ||||||
| 		Repository:  pr.Issue.Repo.APIFormat(mode), | 		Repository:  pr.Issue.Repo.APIFormat(mode), | ||||||
| 		Sender:      doer.APIFormat(), | 		Sender:      convert.ToUser(doer, false, false), | ||||||
| 		Action:      api.HookIssueClosed, | 		Action:      api.HookIssueClosed, | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -631,7 +631,7 @@ func (m *webhookNotifier) NotifyPullRequestChangeTargetBranch(doer *models.User, | |||||||
| 		}, | 		}, | ||||||
| 		PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | 		PullRequest: convert.ToAPIPullRequest(issue.PullRequest), | ||||||
| 		Repository:  issue.Repo.APIFormat(mode), | 		Repository:  issue.Repo.APIFormat(mode), | ||||||
| 		Sender:      doer.APIFormat(), | 		Sender:      convert.ToUser(doer, false, false), | ||||||
| 	}) | 	}) | ||||||
|  |  | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| @@ -670,7 +670,7 @@ func (m *webhookNotifier) NotifyPullRequestReview(pr *models.PullRequest, review | |||||||
| 		Index:       review.Issue.Index, | 		Index:       review.Issue.Index, | ||||||
| 		PullRequest: convert.ToAPIPullRequest(pr), | 		PullRequest: convert.ToAPIPullRequest(pr), | ||||||
| 		Repository:  review.Issue.Repo.APIFormat(mode), | 		Repository:  review.Issue.Repo.APIFormat(mode), | ||||||
| 		Sender:      review.Reviewer.APIFormat(), | 		Sender:      convert.ToUser(review.Reviewer, false, false), | ||||||
| 		Review: &api.ReviewPayload{ | 		Review: &api.ReviewPayload{ | ||||||
| 			Type:    string(reviewHookType), | 			Type:    string(reviewHookType), | ||||||
| 			Content: review.Content, | 			Content: review.Content, | ||||||
| @@ -681,7 +681,7 @@ func (m *webhookNotifier) NotifyPullRequestReview(pr *models.PullRequest, review | |||||||
| } | } | ||||||
|  |  | ||||||
| func (m *webhookNotifier) NotifyCreateRef(pusher *models.User, repo *models.Repository, refType, refFullName string) { | func (m *webhookNotifier) NotifyCreateRef(pusher *models.User, repo *models.Repository, refType, refFullName string) { | ||||||
| 	apiPusher := pusher.APIFormat() | 	apiPusher := convert.ToUser(pusher, false, false) | ||||||
| 	apiRepo := repo.APIFormat(models.AccessModeNone) | 	apiRepo := repo.APIFormat(models.AccessModeNone) | ||||||
| 	refName := git.RefEndName(refFullName) | 	refName := git.RefEndName(refFullName) | ||||||
|  |  | ||||||
| @@ -725,14 +725,14 @@ func (m *webhookNotifier) NotifyPullRequestSynchronized(doer *models.User, pr *m | |||||||
| 		Index:       pr.Issue.Index, | 		Index:       pr.Issue.Index, | ||||||
| 		PullRequest: convert.ToAPIPullRequest(pr), | 		PullRequest: convert.ToAPIPullRequest(pr), | ||||||
| 		Repository:  pr.Issue.Repo.APIFormat(models.AccessModeNone), | 		Repository:  pr.Issue.Repo.APIFormat(models.AccessModeNone), | ||||||
| 		Sender:      doer.APIFormat(), | 		Sender:      convert.ToUser(doer, false, false), | ||||||
| 	}); 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(pusher *models.User, repo *models.Repository, refType, refFullName string) { | func (m *webhookNotifier) NotifyDeleteRef(pusher *models.User, repo *models.Repository, refType, refFullName string) { | ||||||
| 	apiPusher := pusher.APIFormat() | 	apiPusher := convert.ToUser(pusher, false, false) | ||||||
| 	apiRepo := repo.APIFormat(models.AccessModeNone) | 	apiRepo := repo.APIFormat(models.AccessModeNone) | ||||||
| 	refName := git.RefEndName(refFullName) | 	refName := git.RefEndName(refFullName) | ||||||
|  |  | ||||||
| @@ -756,9 +756,9 @@ func sendReleaseHook(doer *models.User, rel *models.Release, action api.HookRele | |||||||
| 	mode, _ := models.AccessLevel(rel.Publisher, rel.Repo) | 	mode, _ := models.AccessLevel(rel.Publisher, rel.Repo) | ||||||
| 	if err := webhook_module.PrepareWebhooks(rel.Repo, models.HookEventRelease, &api.ReleasePayload{ | 	if err := webhook_module.PrepareWebhooks(rel.Repo, models.HookEventRelease, &api.ReleasePayload{ | ||||||
| 		Action:     action, | 		Action:     action, | ||||||
| 		Release:    rel.APIFormat(), | 		Release:    convert.ToRelease(rel), | ||||||
| 		Repository: rel.Repo.APIFormat(mode), | 		Repository: rel.Repo.APIFormat(mode), | ||||||
| 		Sender:     rel.Publisher.APIFormat(), | 		Sender:     convert.ToUser(rel.Publisher, false, false), | ||||||
| 	}); err != nil { | 	}); err != nil { | ||||||
| 		log.Error("PrepareWebhooks: %v", err) | 		log.Error("PrepareWebhooks: %v", err) | ||||||
| 	} | 	} | ||||||
| @@ -777,7 +777,7 @@ func (m *webhookNotifier) NotifyDeleteRelease(doer *models.User, rel *models.Rel | |||||||
| } | } | ||||||
|  |  | ||||||
| func (m *webhookNotifier) NotifySyncPushCommits(pusher *models.User, repo *models.Repository, refName, oldCommitID, newCommitID string, commits *repository.PushCommits) { | func (m *webhookNotifier) NotifySyncPushCommits(pusher *models.User, repo *models.Repository, refName, oldCommitID, newCommitID string, commits *repository.PushCommits) { | ||||||
| 	apiPusher := pusher.APIFormat() | 	apiPusher := convert.ToUser(pusher, false, false) | ||||||
| 	apiCommits, err := commits.ToAPIPayloadCommits(repo.RepoPath(), repo.HTMLURL()) | 	apiCommits, err := commits.ToAPIPayloadCommits(repo.RepoPath(), repo.HTMLURL()) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		log.Error("commits.ToAPIPayloadCommits failed: %v", err) | 		log.Error("commits.ToAPIPayloadCommits failed: %v", err) | ||||||
|   | |||||||
| @@ -11,6 +11,7 @@ import ( | |||||||
|  |  | ||||||
| 	"code.gitea.io/gitea/models" | 	"code.gitea.io/gitea/models" | ||||||
| 	"code.gitea.io/gitea/modules/context" | 	"code.gitea.io/gitea/modules/context" | ||||||
|  | 	"code.gitea.io/gitea/modules/convert" | ||||||
| 	api "code.gitea.io/gitea/modules/structs" | 	api "code.gitea.io/gitea/modules/structs" | ||||||
| 	"code.gitea.io/gitea/routers/api/v1/utils" | 	"code.gitea.io/gitea/routers/api/v1/utils" | ||||||
| 	comment_service "code.gitea.io/gitea/services/comments" | 	comment_service "code.gitea.io/gitea/services/comments" | ||||||
| @@ -85,7 +86,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] = comments[i].APIFormat() | 		apiComments[i] = convert.ToComment(comments[i]) | ||||||
| 	} | 	} | ||||||
| 	ctx.JSON(http.StatusOK, &apiComments) | 	ctx.JSON(http.StatusOK, &apiComments) | ||||||
| } | } | ||||||
| @@ -167,7 +168,7 @@ func ListRepoIssueComments(ctx *context.APIContext) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	for i := range comments { | 	for i := range comments { | ||||||
| 		apiComments[i] = comments[i].APIFormat() | 		apiComments[i] = convert.ToComment(comments[i]) | ||||||
| 	} | 	} | ||||||
| 	ctx.JSON(http.StatusOK, &apiComments) | 	ctx.JSON(http.StatusOK, &apiComments) | ||||||
| } | } | ||||||
| @@ -225,7 +226,7 @@ func CreateIssueComment(ctx *context.APIContext, form api.CreateIssueCommentOpti | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	ctx.JSON(http.StatusCreated, comment.APIFormat()) | 	ctx.JSON(http.StatusCreated, convert.ToComment(comment)) | ||||||
| } | } | ||||||
|  |  | ||||||
| // GetIssueComment Get a comment by ID | // GetIssueComment Get a comment by ID | ||||||
| @@ -293,7 +294,7 @@ func GetIssueComment(ctx *context.APIContext) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	ctx.JSON(http.StatusOK, comment.APIFormat()) | 	ctx.JSON(http.StatusOK, convert.ToComment(comment)) | ||||||
| } | } | ||||||
|  |  | ||||||
| // EditIssueComment modify a comment of an issue | // EditIssueComment modify a comment of an issue | ||||||
| @@ -414,7 +415,7 @@ func editIssueComment(ctx *context.APIContext, form api.EditIssueCommentOption) | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	ctx.JSON(http.StatusOK, comment.APIFormat()) | 	ctx.JSON(http.StatusOK, convert.ToComment(comment)) | ||||||
| } | } | ||||||
|  |  | ||||||
| // DeleteIssueComment delete a comment from an issue | // DeleteIssueComment delete a comment from an issue | ||||||
|   | |||||||
| @@ -10,6 +10,7 @@ import ( | |||||||
|  |  | ||||||
| 	"code.gitea.io/gitea/models" | 	"code.gitea.io/gitea/models" | ||||||
| 	"code.gitea.io/gitea/modules/context" | 	"code.gitea.io/gitea/modules/context" | ||||||
|  | 	"code.gitea.io/gitea/modules/convert" | ||||||
| 	api "code.gitea.io/gitea/modules/structs" | 	api "code.gitea.io/gitea/modules/structs" | ||||||
| 	"code.gitea.io/gitea/routers/api/v1/utils" | 	"code.gitea.io/gitea/routers/api/v1/utils" | ||||||
| ) | ) | ||||||
| @@ -75,7 +76,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:     r.User.APIFormat(), | 			User:     convert.ToUser(r.User, ctx.IsSigned, false), | ||||||
| 			Reaction: r.Type, | 			Reaction: r.Type, | ||||||
| 			Created:  r.CreatedUnix.AsTime(), | 			Created:  r.CreatedUnix.AsTime(), | ||||||
| 		}) | 		}) | ||||||
| @@ -193,7 +194,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 models.IsErrReactionAlreadyExist(err) { | 			} else if models.IsErrReactionAlreadyExist(err) { | ||||||
| 				ctx.JSON(http.StatusOK, api.Reaction{ | 				ctx.JSON(http.StatusOK, api.Reaction{ | ||||||
| 					User:     ctx.User.APIFormat(), | 					User:     convert.ToUser(ctx.User, true, true), | ||||||
| 					Reaction: reaction.Type, | 					Reaction: reaction.Type, | ||||||
| 					Created:  reaction.CreatedUnix.AsTime(), | 					Created:  reaction.CreatedUnix.AsTime(), | ||||||
| 				}) | 				}) | ||||||
| @@ -204,7 +205,7 @@ func changeIssueCommentReaction(ctx *context.APIContext, form api.EditReactionOp | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		ctx.JSON(http.StatusCreated, api.Reaction{ | 		ctx.JSON(http.StatusCreated, api.Reaction{ | ||||||
| 			User:     ctx.User.APIFormat(), | 			User:     convert.ToUser(ctx.User, true, true), | ||||||
| 			Reaction: reaction.Type, | 			Reaction: reaction.Type, | ||||||
| 			Created:  reaction.CreatedUnix.AsTime(), | 			Created:  reaction.CreatedUnix.AsTime(), | ||||||
| 		}) | 		}) | ||||||
| @@ -289,7 +290,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:     r.User.APIFormat(), | 			User:     convert.ToUser(r.User, ctx.IsSigned, false), | ||||||
| 			Reaction: r.Type, | 			Reaction: r.Type, | ||||||
| 			Created:  r.CreatedUnix.AsTime(), | 			Created:  r.CreatedUnix.AsTime(), | ||||||
| 		}) | 		}) | ||||||
| @@ -402,7 +403,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 models.IsErrReactionAlreadyExist(err) { | 			} else if models.IsErrReactionAlreadyExist(err) { | ||||||
| 				ctx.JSON(http.StatusOK, api.Reaction{ | 				ctx.JSON(http.StatusOK, api.Reaction{ | ||||||
| 					User:     ctx.User.APIFormat(), | 					User:     convert.ToUser(ctx.User, true, true), | ||||||
| 					Reaction: reaction.Type, | 					Reaction: reaction.Type, | ||||||
| 					Created:  reaction.CreatedUnix.AsTime(), | 					Created:  reaction.CreatedUnix.AsTime(), | ||||||
| 				}) | 				}) | ||||||
| @@ -413,7 +414,7 @@ func changeIssueReaction(ctx *context.APIContext, form api.EditReactionOption, i | |||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		ctx.JSON(http.StatusCreated, api.Reaction{ | 		ctx.JSON(http.StatusCreated, api.Reaction{ | ||||||
| 			User:     ctx.User.APIFormat(), | 			User:     convert.ToUser(ctx.User, true, true), | ||||||
| 			Reaction: reaction.Type, | 			Reaction: reaction.Type, | ||||||
| 			Created:  reaction.CreatedUnix.AsTime(), | 			Created:  reaction.CreatedUnix.AsTime(), | ||||||
| 		}) | 		}) | ||||||
|   | |||||||
| @@ -9,6 +9,7 @@ import ( | |||||||
|  |  | ||||||
| 	"code.gitea.io/gitea/models" | 	"code.gitea.io/gitea/models" | ||||||
| 	"code.gitea.io/gitea/modules/context" | 	"code.gitea.io/gitea/modules/context" | ||||||
|  | 	"code.gitea.io/gitea/modules/convert" | ||||||
| 	api "code.gitea.io/gitea/modules/structs" | 	api "code.gitea.io/gitea/modules/structs" | ||||||
| 	"code.gitea.io/gitea/routers/api/v1/utils" | 	"code.gitea.io/gitea/routers/api/v1/utils" | ||||||
| ) | ) | ||||||
| @@ -276,6 +277,10 @@ func GetIssueSubscribers(ctx *context.APIContext) { | |||||||
| 		ctx.Error(http.StatusInternalServerError, "GetUsersByIDs", err) | 		ctx.Error(http.StatusInternalServerError, "GetUsersByIDs", err) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  | 	apiUsers := make([]*api.User, 0, len(users)) | ||||||
|  | 	for i := range users { | ||||||
|  | 		apiUsers[i] = convert.ToUser(users[i], ctx.IsSigned, false) | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	ctx.JSON(http.StatusOK, users.APIFormat()) | 	ctx.JSON(http.StatusOK, apiUsers) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -9,6 +9,7 @@ import ( | |||||||
|  |  | ||||||
| 	"code.gitea.io/gitea/models" | 	"code.gitea.io/gitea/models" | ||||||
| 	"code.gitea.io/gitea/modules/context" | 	"code.gitea.io/gitea/modules/context" | ||||||
|  | 	"code.gitea.io/gitea/modules/convert" | ||||||
| 	api "code.gitea.io/gitea/modules/structs" | 	api "code.gitea.io/gitea/modules/structs" | ||||||
| 	"code.gitea.io/gitea/routers/api/v1/utils" | 	"code.gitea.io/gitea/routers/api/v1/utils" | ||||||
| 	releaseservice "code.gitea.io/gitea/services/release" | 	releaseservice "code.gitea.io/gitea/services/release" | ||||||
| @@ -60,7 +61,7 @@ func GetRelease(ctx *context.APIContext) { | |||||||
| 		ctx.Error(http.StatusInternalServerError, "LoadAttributes", err) | 		ctx.Error(http.StatusInternalServerError, "LoadAttributes", err) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	ctx.JSON(http.StatusOK, release.APIFormat()) | 	ctx.JSON(http.StatusOK, convert.ToRelease(release)) | ||||||
| } | } | ||||||
|  |  | ||||||
| // ListReleases list a repository's releases | // ListReleases list a repository's releases | ||||||
| @@ -117,7 +118,7 @@ func ListReleases(ctx *context.APIContext) { | |||||||
| 			ctx.Error(http.StatusInternalServerError, "LoadAttributes", err) | 			ctx.Error(http.StatusInternalServerError, "LoadAttributes", err) | ||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 		rels[i] = release.APIFormat() | 		rels[i] = convert.ToRelease(release) | ||||||
| 	} | 	} | ||||||
| 	ctx.JSON(http.StatusOK, rels) | 	ctx.JSON(http.StatusOK, rels) | ||||||
| } | } | ||||||
| @@ -205,7 +206,7 @@ func CreateRelease(ctx *context.APIContext, form api.CreateReleaseOption) { | |||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	ctx.JSON(http.StatusCreated, rel.APIFormat()) | 	ctx.JSON(http.StatusCreated, convert.ToRelease(rel)) | ||||||
| } | } | ||||||
|  |  | ||||||
| // EditRelease edit a release | // EditRelease edit a release | ||||||
| @@ -288,7 +289,7 @@ func EditRelease(ctx *context.APIContext, form api.EditReleaseOption) { | |||||||
| 		ctx.Error(http.StatusInternalServerError, "LoadAttributes", err) | 		ctx.Error(http.StatusInternalServerError, "LoadAttributes", err) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	ctx.JSON(http.StatusOK, rel.APIFormat()) | 	ctx.JSON(http.StatusOK, convert.ToRelease(rel)) | ||||||
| } | } | ||||||
|  |  | ||||||
| // DeleteRelease delete a release from a repository | // DeleteRelease delete a release from a repository | ||||||
|   | |||||||
| @@ -9,6 +9,7 @@ import ( | |||||||
|  |  | ||||||
| 	"code.gitea.io/gitea/models" | 	"code.gitea.io/gitea/models" | ||||||
| 	"code.gitea.io/gitea/modules/context" | 	"code.gitea.io/gitea/modules/context" | ||||||
|  | 	"code.gitea.io/gitea/modules/convert" | ||||||
| 	"code.gitea.io/gitea/modules/log" | 	"code.gitea.io/gitea/modules/log" | ||||||
| 	"code.gitea.io/gitea/modules/setting" | 	"code.gitea.io/gitea/modules/setting" | ||||||
| 	api "code.gitea.io/gitea/modules/structs" | 	api "code.gitea.io/gitea/modules/structs" | ||||||
| @@ -62,7 +63,7 @@ func GetReleaseAttachment(ctx *context.APIContext) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	// FIXME Should prove the existence of the given repo, but results in unnecessary database requests | 	// FIXME Should prove the existence of the given repo, but results in unnecessary database requests | ||||||
| 	ctx.JSON(http.StatusOK, attach.APIFormat()) | 	ctx.JSON(http.StatusOK, convert.ToReleaseAttachment(attach)) | ||||||
| } | } | ||||||
|  |  | ||||||
| // ListReleaseAttachments lists all attachments of the release | // ListReleaseAttachments lists all attachments of the release | ||||||
| @@ -107,7 +108,7 @@ func ListReleaseAttachments(ctx *context.APIContext) { | |||||||
| 		ctx.Error(http.StatusInternalServerError, "LoadAttributes", err) | 		ctx.Error(http.StatusInternalServerError, "LoadAttributes", err) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	ctx.JSON(http.StatusOK, release.APIFormat().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 | ||||||
| @@ -203,7 +204,7 @@ func CreateReleaseAttachment(ctx *context.APIContext) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	ctx.JSON(http.StatusCreated, attach.APIFormat()) | 	ctx.JSON(http.StatusCreated, convert.ToReleaseAttachment(attach)) | ||||||
| } | } | ||||||
|  |  | ||||||
| // EditReleaseAttachment updates the given attachment | // EditReleaseAttachment updates the given attachment | ||||||
| @@ -267,7 +268,7 @@ func EditReleaseAttachment(ctx *context.APIContext, form api.EditAttachmentOptio | |||||||
| 	if err := models.UpdateAttachment(attach); err != nil { | 	if err := models.UpdateAttachment(attach); err != nil { | ||||||
| 		ctx.Error(http.StatusInternalServerError, "UpdateAttachment", attach) | 		ctx.Error(http.StatusInternalServerError, "UpdateAttachment", attach) | ||||||
| 	} | 	} | ||||||
| 	ctx.JSON(http.StatusCreated, attach.APIFormat()) | 	ctx.JSON(http.StatusCreated, convert.ToReleaseAttachment(attach)) | ||||||
| } | } | ||||||
|  |  | ||||||
| // DeleteReleaseAttachment delete a given attachment | // DeleteReleaseAttachment delete a given attachment | ||||||
|   | |||||||
| @@ -9,6 +9,7 @@ import ( | |||||||
|  |  | ||||||
| 	"code.gitea.io/gitea/models" | 	"code.gitea.io/gitea/models" | ||||||
| 	"code.gitea.io/gitea/modules/context" | 	"code.gitea.io/gitea/modules/context" | ||||||
|  | 	"code.gitea.io/gitea/modules/convert" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| // GetReleaseTag get a single release of a repository by its tagname | // GetReleaseTag get a single release of a repository by its tagname | ||||||
| @@ -56,5 +57,5 @@ func GetReleaseTag(ctx *context.APIContext) { | |||||||
| 		ctx.Error(http.StatusInternalServerError, "LoadAttributes", err) | 		ctx.Error(http.StatusInternalServerError, "LoadAttributes", err) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	ctx.JSON(http.StatusOK, release.APIFormat()) | 	ctx.JSON(http.StatusOK, convert.ToRelease(release)) | ||||||
| } | } | ||||||
|   | |||||||
| @@ -10,6 +10,7 @@ import ( | |||||||
|  |  | ||||||
| 	"code.gitea.io/gitea/models" | 	"code.gitea.io/gitea/models" | ||||||
| 	"code.gitea.io/gitea/modules/context" | 	"code.gitea.io/gitea/modules/context" | ||||||
|  | 	"code.gitea.io/gitea/modules/convert" | ||||||
| 	"code.gitea.io/gitea/modules/repofiles" | 	"code.gitea.io/gitea/modules/repofiles" | ||||||
| 	api "code.gitea.io/gitea/modules/structs" | 	api "code.gitea.io/gitea/modules/structs" | ||||||
| 	"code.gitea.io/gitea/routers/api/v1/utils" | 	"code.gitea.io/gitea/routers/api/v1/utils" | ||||||
| @@ -64,7 +65,7 @@ func NewCommitStatus(ctx *context.APIContext, form api.CreateStatusOption) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	ctx.JSON(http.StatusCreated, status.APIFormat()) | 	ctx.JSON(http.StatusCreated, convert.ToCommitStatus(status)) | ||||||
| } | } | ||||||
|  |  | ||||||
| // GetCommitStatuses returns all statuses for any given commit hash | // GetCommitStatuses returns all statuses for any given commit hash | ||||||
| @@ -222,7 +223,7 @@ func getCommitStatuses(ctx *context.APIContext, sha string) { | |||||||
|  |  | ||||||
| 	apiStatuses := make([]*api.Status, 0, len(statuses)) | 	apiStatuses := make([]*api.Status, 0, len(statuses)) | ||||||
| 	for _, status := range statuses { | 	for _, status := range statuses { | ||||||
| 		apiStatuses = append(apiStatuses, status.APIFormat()) | 		apiStatuses = append(apiStatuses, convert.ToCommitStatus(status)) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	ctx.SetLinkHeader(int(maxResults), listOptions.PageSize) | 	ctx.SetLinkHeader(int(maxResults), listOptions.PageSize) | ||||||
| @@ -305,7 +306,7 @@ func GetCombinedCommitStatusByRef(ctx *context.APIContext) { | |||||||
|  |  | ||||||
| 	retStatus.Statuses = make([]*api.Status, 0, len(statuses)) | 	retStatus.Statuses = make([]*api.Status, 0, len(statuses)) | ||||||
| 	for _, status := range statuses { | 	for _, status := range statuses { | ||||||
| 		retStatus.Statuses = append(retStatus.Statuses, status.APIFormat()) | 		retStatus.Statuses = append(retStatus.Statuses, convert.ToCommitStatus(status)) | ||||||
| 		if status.State.NoBetterThan(retStatus.State) { | 		if status.State.NoBetterThan(retStatus.State) { | ||||||
| 			retStatus.State = status.State | 			retStatus.State = status.State | ||||||
| 		} | 		} | ||||||
|   | |||||||
| @@ -19,6 +19,7 @@ import ( | |||||||
| 	"code.gitea.io/gitea/modules/auth" | 	"code.gitea.io/gitea/modules/auth" | ||||||
| 	"code.gitea.io/gitea/modules/base" | 	"code.gitea.io/gitea/modules/base" | ||||||
| 	"code.gitea.io/gitea/modules/context" | 	"code.gitea.io/gitea/modules/context" | ||||||
|  | 	"code.gitea.io/gitea/modules/convert" | ||||||
| 	"code.gitea.io/gitea/modules/git" | 	"code.gitea.io/gitea/modules/git" | ||||||
| 	issue_indexer "code.gitea.io/gitea/modules/indexer/issues" | 	issue_indexer "code.gitea.io/gitea/modules/indexer/issues" | ||||||
| 	"code.gitea.io/gitea/modules/log" | 	"code.gitea.io/gitea/modules/log" | ||||||
| @@ -2453,7 +2454,7 @@ func GetIssueAttachments(ctx *context.Context) { | |||||||
| 	issue := GetActionIssue(ctx) | 	issue := GetActionIssue(ctx) | ||||||
| 	var attachments = make([]*api.Attachment, len(issue.Attachments)) | 	var attachments = make([]*api.Attachment, len(issue.Attachments)) | ||||||
| 	for i := 0; i < len(issue.Attachments); i++ { | 	for i := 0; i < len(issue.Attachments); i++ { | ||||||
| 		attachments[i] = issue.Attachments[i].APIFormat() | 		attachments[i] = convert.ToReleaseAttachment(issue.Attachments[i]) | ||||||
| 	} | 	} | ||||||
| 	ctx.JSON(200, attachments) | 	ctx.JSON(200, attachments) | ||||||
| } | } | ||||||
| @@ -2472,7 +2473,7 @@ func GetCommentAttachments(ctx *context.Context) { | |||||||
| 			return | 			return | ||||||
| 		} | 		} | ||||||
| 		for i := 0; i < len(comment.Attachments); i++ { | 		for i := 0; i < len(comment.Attachments); i++ { | ||||||
| 			attachments = append(attachments, comment.Attachments[i].APIFormat()) | 			attachments = append(attachments, convert.ToReleaseAttachment(comment.Attachments[i])) | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	ctx.JSON(200, attachments) | 	ctx.JSON(200, attachments) | ||||||
|   | |||||||
| @@ -16,6 +16,7 @@ import ( | |||||||
| 	"code.gitea.io/gitea/modules/auth" | 	"code.gitea.io/gitea/modules/auth" | ||||||
| 	"code.gitea.io/gitea/modules/base" | 	"code.gitea.io/gitea/modules/base" | ||||||
| 	"code.gitea.io/gitea/modules/context" | 	"code.gitea.io/gitea/modules/context" | ||||||
|  | 	"code.gitea.io/gitea/modules/convert" | ||||||
| 	"code.gitea.io/gitea/modules/git" | 	"code.gitea.io/gitea/modules/git" | ||||||
| 	"code.gitea.io/gitea/modules/setting" | 	"code.gitea.io/gitea/modules/setting" | ||||||
| 	api "code.gitea.io/gitea/modules/structs" | 	api "code.gitea.io/gitea/modules/structs" | ||||||
| @@ -1052,7 +1053,7 @@ func TestWebhook(ctx *context.Context) { | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	apiUser := ctx.User.APIFormat() | 	apiUser := convert.ToUser(ctx.User, true, true) | ||||||
| 	p := &api.PushPayload{ | 	p := &api.PushPayload{ | ||||||
| 		Ref:    git.BranchPrefix + ctx.Repo.Repository.DefaultBranch, | 		Ref:    git.BranchPrefix + ctx.Repo.Repository.DefaultBranch, | ||||||
| 		Before: commit.ID.String(), | 		Before: commit.ID.String(), | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user