Skip to content

Commit 290cf75

Browse files
authored
[refactor] Unify the export of user data via API (#15144)
* [refactor] unify how user data is exported via API * test time via unix timestamp
1 parent f4d2749 commit 290cf75

26 files changed

+117
-97
lines changed

integrations/api_issue_reaction_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ func TestAPIIssuesReactions(t *testing.T) {
6161
DecodeJSON(t, resp, &apiReactions)
6262
expectResponse := make(map[int]api.Reaction)
6363
expectResponse[0] = api.Reaction{
64-
User: convert.ToUser(user2, true, true),
64+
User: convert.ToUser(user2, user2),
6565
Reaction: "eyes",
6666
Created: time.Unix(1573248003, 0),
6767
}
@@ -121,12 +121,12 @@ func TestAPICommentReactions(t *testing.T) {
121121
DecodeJSON(t, resp, &apiReactions)
122122
expectResponse := make(map[int]api.Reaction)
123123
expectResponse[0] = api.Reaction{
124-
User: convert.ToUser(user2, true, true),
124+
User: convert.ToUser(user2, user2),
125125
Reaction: "laugh",
126126
Created: time.Unix(1573248004, 0),
127127
}
128128
expectResponse[1] = api.Reaction{
129-
User: convert.ToUser(user1, true, true),
129+
User: convert.ToUser(user1, user1),
130130
Reaction: "laugh",
131131
Created: time.Unix(1573248005, 0),
132132
}

integrations/api_team_user_test.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,13 @@ func TestAPITeamUser(t *testing.T) {
3131
user2.Created = user2.Created.In(time.Local)
3232
user := models.AssertExistsAndLoadBean(t, &models.User{Name: "user2"}).(*models.User)
3333

34-
assert.Equal(t, convert.ToUser(user, true, false), user2)
34+
expectedUser := convert.ToUser(user, user)
35+
36+
// test time via unix timestamp
37+
assert.EqualValues(t, expectedUser.LastLogin.Unix(), user2.LastLogin.Unix())
38+
assert.EqualValues(t, expectedUser.Created.Unix(), user2.Created.Unix())
39+
expectedUser.LastLogin = user2.LastLogin
40+
expectedUser.Created = user2.Created
41+
42+
assert.Equal(t, expectedUser, user2)
3543
}

modules/convert/git_commit.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,13 @@ func ToCommit(repo *models.Repository, commit *git.Commit, userCache map[string]
8686
}
8787

8888
if ok {
89-
apiAuthor = ToUser(cacheAuthor, false, false)
89+
apiAuthor = ToUser(cacheAuthor, nil)
9090
} else {
9191
author, err := models.GetUserByEmail(commit.Author.Email)
9292
if err != nil && !models.IsErrUserNotExist(err) {
9393
return nil, err
9494
} else if err == nil {
95-
apiAuthor = ToUser(author, false, false)
95+
apiAuthor = ToUser(author, nil)
9696
if userCache != nil {
9797
userCache[commit.Author.Email] = author
9898
}
@@ -108,13 +108,13 @@ func ToCommit(repo *models.Repository, commit *git.Commit, userCache map[string]
108108
}
109109

110110
if ok {
111-
apiCommitter = ToUser(cacheCommitter, false, false)
111+
apiCommitter = ToUser(cacheCommitter, nil)
112112
} else {
113113
committer, err := models.GetUserByEmail(commit.Committer.Email)
114114
if err != nil && !models.IsErrUserNotExist(err) {
115115
return nil, err
116116
} else if err == nil {
117-
apiCommitter = ToUser(committer, false, false)
117+
apiCommitter = ToUser(committer, nil)
118118
if userCache != nil {
119119
userCache[commit.Committer.Email] = committer
120120
}

modules/convert/issue.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ func ToAPIIssue(issue *models.Issue) *api.Issue {
3131
URL: issue.APIURL(),
3232
HTMLURL: issue.HTMLURL(),
3333
Index: issue.Index,
34-
Poster: ToUser(issue.Poster, false, false),
34+
Poster: ToUser(issue.Poster, nil),
3535
Title: issue.Title,
3636
Body: issue.Content,
3737
Ref: issue.Ref,
@@ -66,9 +66,9 @@ func ToAPIIssue(issue *models.Issue) *api.Issue {
6666
}
6767
if len(issue.Assignees) > 0 {
6868
for _, assignee := range issue.Assignees {
69-
apiIssue.Assignees = append(apiIssue.Assignees, ToUser(assignee, false, false))
69+
apiIssue.Assignees = append(apiIssue.Assignees, ToUser(assignee, nil))
7070
}
71-
apiIssue.Assignee = ToUser(issue.Assignees[0], false, false) // For compatibility, we're keeping the first assignee as `apiIssue.Assignee`
71+
apiIssue.Assignee = ToUser(issue.Assignees[0], nil) // For compatibility, we're keeping the first assignee as `apiIssue.Assignee`
7272
}
7373
if issue.IsPull {
7474
if err := issue.LoadPullRequest(); err != nil {

modules/convert/issue_comment.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
func ToComment(c *models.Comment) *api.Comment {
1414
return &api.Comment{
1515
ID: c.ID,
16-
Poster: ToUser(c.Poster, false, false),
16+
Poster: ToUser(c.Poster, nil),
1717
HTMLURL: c.HTMLURL(),
1818
IssueURL: c.IssueURL(),
1919
PRURL: c.PRURL(),

modules/convert/pull.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ func ToAPIPullRequest(pr *models.PullRequest) *api.PullRequest {
159159
if pr.HasMerged {
160160
apiPullRequest.Merged = pr.MergedUnix.AsTimePtr()
161161
apiPullRequest.MergedCommitID = &pr.MergedCommitID
162-
apiPullRequest.MergedBy = ToUser(pr.Merger, false, false)
162+
apiPullRequest.MergedBy = ToUser(pr.Merger, nil)
163163
}
164164

165165
return apiPullRequest

modules/convert/pull_review.go

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,9 @@ func ToPullReview(r *models.Review, doer *models.User) (*api.PullReview, error)
2020
r.Reviewer = models.NewGhostUser()
2121
}
2222

23-
auth := false
24-
if doer != nil {
25-
auth = doer.IsAdmin || doer.ID == r.ReviewerID
26-
}
27-
2823
result := &api.PullReview{
2924
ID: r.ID,
30-
Reviewer: ToUser(r.Reviewer, doer != nil, auth),
25+
Reviewer: ToUser(r.Reviewer, doer),
3126
ReviewerTeam: ToTeam(r.ReviewerTeam),
3227
State: api.ReviewStateUnknown,
3328
Body: r.Content,
@@ -88,14 +83,10 @@ func ToPullReviewCommentList(review *models.Review, doer *models.User) ([]*api.P
8883
for _, lines := range review.CodeComments {
8984
for _, comments := range lines {
9085
for _, comment := range comments {
91-
auth := false
92-
if doer != nil {
93-
auth = doer.IsAdmin || doer.ID == comment.Poster.ID
94-
}
9586
apiComment := &api.PullReviewComment{
9687
ID: comment.ID,
9788
Body: comment.Content,
98-
Reviewer: ToUser(comment.Poster, doer != nil, auth),
89+
Reviewer: ToUser(comment.Poster, doer),
9990
ReviewID: review.ID,
10091
Created: comment.CreatedUnix.AsTime(),
10192
Updated: comment.UpdatedUnix.AsTime(),

modules/convert/release.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ func ToRelease(r *models.Release) *api.Release {
2929
IsPrerelease: r.IsPrerelease,
3030
CreatedAt: r.CreatedUnix.AsTime(),
3131
PublishedAt: r.CreatedUnix.AsTime(),
32-
Publisher: ToUser(r.Publisher, false, false),
32+
Publisher: ToUser(r.Publisher, nil),
3333
Attachments: assets,
3434
}
3535
}

modules/convert/repository.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func innerToRepo(repo *models.Repository, mode models.AccessMode, isParent bool)
102102

103103
return &api.Repository{
104104
ID: repo.ID,
105-
Owner: ToUser(repo.Owner, mode != models.AccessModeNone, mode >= models.AccessModeAdmin),
105+
Owner: ToUserWithAccessMode(repo.Owner, mode),
106106
Name: repo.Name,
107107
FullName: repo.FullName(),
108108
Description: repo.Description,

modules/convert/status.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func ToCommitStatus(status *models.CommitStatus) *api.CommitStatus {
2424

2525
if status.CreatorID != 0 {
2626
creator, _ := models.GetUserByID(status.CreatorID)
27-
apiStatus.Creator = ToUser(creator, false, false)
27+
apiStatus.Creator = ToUser(creator, nil)
2828
}
2929

3030
return apiStatus

modules/convert/user.go

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,32 @@ import (
1111
)
1212

1313
// ToUser convert models.User to api.User
14-
// signed shall only be set if requester is logged in. authed shall only be set if user is site admin or user himself
15-
func ToUser(user *models.User, signed, authed bool) *api.User {
14+
// if doer is set, private information is added if the doer has the permission to see it
15+
func ToUser(user, doer *models.User) *api.User {
16+
if user == nil {
17+
return nil
18+
}
19+
authed := false
20+
signed := false
21+
if doer != nil {
22+
signed = true
23+
authed = doer.ID == user.ID || doer.IsAdmin
24+
}
25+
return toUser(user, signed, authed)
26+
}
27+
28+
// ToUserWithAccessMode convert models.User to api.User
29+
// AccessMode is not none show add some more information
30+
func ToUserWithAccessMode(user *models.User, accessMode models.AccessMode) *api.User {
1631
if user == nil {
1732
return nil
1833
}
34+
return toUser(user, accessMode != models.AccessModeNone, false)
35+
}
36+
37+
// toUser convert models.User to api.User
38+
// signed shall only be set if requester is logged in. authed shall only be set if user is site admin or user himself
39+
func toUser(user *models.User, signed, authed bool) *api.User {
1940
result := &api.User{
2041
ID: user.ID,
2142
UserName: user.Name,

modules/convert/user_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,14 @@ func TestUser_ToUser(t *testing.T) {
1515

1616
user1 := models.AssertExistsAndLoadBean(t, &models.User{ID: 1, IsAdmin: true}).(*models.User)
1717

18-
apiUser := ToUser(user1, true, true)
18+
apiUser := toUser(user1, true, true)
1919
assert.True(t, apiUser.IsAdmin)
2020

2121
user2 := models.AssertExistsAndLoadBean(t, &models.User{ID: 2, IsAdmin: false}).(*models.User)
2222

23-
apiUser = ToUser(user2, true, true)
23+
apiUser = toUser(user2, true, true)
2424
assert.False(t, apiUser.IsAdmin)
2525

26-
apiUser = ToUser(user1, false, false)
26+
apiUser = toUser(user1, false, false)
2727
assert.False(t, apiUser.IsAdmin)
2828
}

0 commit comments

Comments
 (0)