Skip to content

Commit b31436d

Browse files
committed
Merge remote-tracking branch 'giteaofficial/main'
* giteaofficial/main: Warn users when they try to use a non-root-url to sign in/up (go-gitea#32272) Fix null errors on conversation holder (go-gitea#32258) (go-gitea#32266) Support requested_reviewers data in comment webhook events (go-gitea#26178)
2 parents 88e59ef + 0196b35 commit b31436d

File tree

6 files changed

+76
-48
lines changed

6 files changed

+76
-48
lines changed

modules/structs/hook.go

+8-7
Original file line numberDiff line numberDiff line change
@@ -217,13 +217,14 @@ const (
217217

218218
// IssueCommentPayload represents a payload information of issue comment event.
219219
type IssueCommentPayload struct {
220-
Action HookIssueCommentAction `json:"action"`
221-
Issue *Issue `json:"issue"`
222-
Comment *Comment `json:"comment"`
223-
Changes *ChangesPayload `json:"changes,omitempty"`
224-
Repository *Repository `json:"repository"`
225-
Sender *User `json:"sender"`
226-
IsPull bool `json:"is_pull"`
220+
Action HookIssueCommentAction `json:"action"`
221+
Issue *Issue `json:"issue"`
222+
PullRequest *PullRequest `json:"pull_request,omitempty"`
223+
Comment *Comment `json:"comment"`
224+
Changes *ChangesPayload `json:"changes,omitempty"`
225+
Repository *Repository `json:"repository"`
226+
Sender *User `json:"sender"`
227+
IsPull bool `json:"is_pull"`
227228
}
228229

229230
// JSONPayload implements Payload

services/webhook/notifier.go

+42-32
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func (m *webhookNotifier) IssueClearLabels(ctx context.Context, doer *user_model
5959
err = PrepareWebhooks(ctx, EventSource{Repository: issue.Repo}, webhook_module.HookEventPullRequestLabel, &api.PullRequestPayload{
6060
Action: api.HookIssueLabelCleared,
6161
Index: issue.Index,
62-
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
62+
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, doer),
6363
Repository: convert.ToRepo(ctx, issue.Repo, permission),
6464
Sender: convert.ToUser(ctx, doer, nil),
6565
})
@@ -150,7 +150,7 @@ func (m *webhookNotifier) IssueChangeAssignee(ctx context.Context, doer *user_mo
150150
}
151151
apiPullRequest := &api.PullRequestPayload{
152152
Index: issue.Index,
153-
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
153+
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, doer),
154154
Repository: convert.ToRepo(ctx, issue.Repo, permission),
155155
Sender: convert.ToUser(ctx, doer, nil),
156156
}
@@ -201,7 +201,7 @@ func (m *webhookNotifier) IssueChangeTitle(ctx context.Context, doer *user_model
201201
From: oldTitle,
202202
},
203203
},
204-
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
204+
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, doer),
205205
Repository: convert.ToRepo(ctx, issue.Repo, permission),
206206
Sender: convert.ToUser(ctx, doer, nil),
207207
})
@@ -236,7 +236,7 @@ func (m *webhookNotifier) IssueChangeStatus(ctx context.Context, doer *user_mode
236236
// Merge pull request calls issue.changeStatus so we need to handle separately.
237237
apiPullRequest := &api.PullRequestPayload{
238238
Index: issue.Index,
239-
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
239+
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, doer),
240240
Repository: convert.ToRepo(ctx, issue.Repo, permission),
241241
Sender: convert.ToUser(ctx, doer, nil),
242242
CommitID: commitID,
@@ -307,7 +307,7 @@ func (m *webhookNotifier) NewPullRequest(ctx context.Context, pull *issues_model
307307
if err := PrepareWebhooks(ctx, EventSource{Repository: pull.Issue.Repo}, webhook_module.HookEventPullRequest, &api.PullRequestPayload{
308308
Action: api.HookIssueOpened,
309309
Index: pull.Issue.Index,
310-
PullRequest: convert.ToAPIPullRequest(ctx, pull, nil),
310+
PullRequest: convert.ToAPIPullRequest(ctx, pull, pull.Issue.Poster),
311311
Repository: convert.ToRepo(ctx, pull.Issue.Repo, permission),
312312
Sender: convert.ToUser(ctx, pull.Issue.Poster, nil),
313313
}); err != nil {
@@ -336,7 +336,7 @@ func (m *webhookNotifier) IssueChangeContent(ctx context.Context, doer *user_mod
336336
From: oldContent,
337337
},
338338
},
339-
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
339+
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, doer),
340340
Repository: convert.ToRepo(ctx, issue.Repo, permission),
341341
Sender: convert.ToUser(ctx, doer, nil),
342342
})
@@ -375,17 +375,20 @@ func (m *webhookNotifier) UpdateComment(ctx context.Context, doer *user_model.Us
375375
}
376376

377377
var eventType webhook_module.HookEventType
378+
var pullRequest *api.PullRequest
378379
if c.Issue.IsPull {
379380
eventType = webhook_module.HookEventPullRequestComment
381+
pullRequest = convert.ToAPIPullRequest(ctx, c.Issue.PullRequest, doer)
380382
} else {
381383
eventType = webhook_module.HookEventIssueComment
382384
}
383385

384386
permission, _ := access_model.GetUserRepoPermission(ctx, c.Issue.Repo, doer)
385387
if err := PrepareWebhooks(ctx, EventSource{Repository: c.Issue.Repo}, eventType, &api.IssueCommentPayload{
386-
Action: api.HookIssueCommentEdited,
387-
Issue: convert.ToAPIIssue(ctx, doer, c.Issue),
388-
Comment: convert.ToAPIComment(ctx, c.Issue.Repo, c),
388+
Action: api.HookIssueCommentEdited,
389+
Issue: convert.ToAPIIssue(ctx, doer, c.Issue),
390+
PullRequest: pullRequest,
391+
Comment: convert.ToAPIComment(ctx, c.Issue.Repo, c),
389392
Changes: &api.ChangesPayload{
390393
Body: &api.ChangesFromPayload{
391394
From: oldContent,
@@ -403,20 +406,23 @@ func (m *webhookNotifier) CreateIssueComment(ctx context.Context, doer *user_mod
403406
issue *issues_model.Issue, comment *issues_model.Comment, mentions []*user_model.User,
404407
) {
405408
var eventType webhook_module.HookEventType
409+
var pullRequest *api.PullRequest
406410
if issue.IsPull {
407411
eventType = webhook_module.HookEventPullRequestComment
412+
pullRequest = convert.ToAPIPullRequest(ctx, issue.PullRequest, doer)
408413
} else {
409414
eventType = webhook_module.HookEventIssueComment
410415
}
411416

412417
permission, _ := access_model.GetUserRepoPermission(ctx, repo, doer)
413418
if err := PrepareWebhooks(ctx, EventSource{Repository: issue.Repo}, eventType, &api.IssueCommentPayload{
414-
Action: api.HookIssueCommentCreated,
415-
Issue: convert.ToAPIIssue(ctx, doer, issue),
416-
Comment: convert.ToAPIComment(ctx, repo, comment),
417-
Repository: convert.ToRepo(ctx, repo, permission),
418-
Sender: convert.ToUser(ctx, doer, nil),
419-
IsPull: issue.IsPull,
419+
Action: api.HookIssueCommentCreated,
420+
Issue: convert.ToAPIIssue(ctx, doer, issue),
421+
PullRequest: pullRequest,
422+
Comment: convert.ToAPIComment(ctx, repo, comment),
423+
Repository: convert.ToRepo(ctx, repo, permission),
424+
Sender: convert.ToUser(ctx, doer, nil),
425+
IsPull: issue.IsPull,
420426
}); err != nil {
421427
log.Error("PrepareWebhooks [comment_id: %d]: %v", comment.ID, err)
422428
}
@@ -440,20 +446,23 @@ func (m *webhookNotifier) DeleteComment(ctx context.Context, doer *user_model.Us
440446
}
441447

442448
var eventType webhook_module.HookEventType
449+
var pullRequest *api.PullRequest
443450
if comment.Issue.IsPull {
444451
eventType = webhook_module.HookEventPullRequestComment
452+
pullRequest = convert.ToAPIPullRequest(ctx, comment.Issue.PullRequest, doer)
445453
} else {
446454
eventType = webhook_module.HookEventIssueComment
447455
}
448456

449457
permission, _ := access_model.GetUserRepoPermission(ctx, comment.Issue.Repo, doer)
450458
if err := PrepareWebhooks(ctx, EventSource{Repository: comment.Issue.Repo}, eventType, &api.IssueCommentPayload{
451-
Action: api.HookIssueCommentDeleted,
452-
Issue: convert.ToAPIIssue(ctx, doer, comment.Issue),
453-
Comment: convert.ToAPIComment(ctx, comment.Issue.Repo, comment),
454-
Repository: convert.ToRepo(ctx, comment.Issue.Repo, permission),
455-
Sender: convert.ToUser(ctx, doer, nil),
456-
IsPull: comment.Issue.IsPull,
459+
Action: api.HookIssueCommentDeleted,
460+
Issue: convert.ToAPIIssue(ctx, doer, comment.Issue),
461+
PullRequest: pullRequest,
462+
Comment: convert.ToAPIComment(ctx, comment.Issue.Repo, comment),
463+
Repository: convert.ToRepo(ctx, comment.Issue.Repo, permission),
464+
Sender: convert.ToUser(ctx, doer, nil),
465+
IsPull: comment.Issue.IsPull,
457466
}); err != nil {
458467
log.Error("PrepareWebhooks [comment_id: %d]: %v", comment.ID, err)
459468
}
@@ -525,7 +534,7 @@ func (m *webhookNotifier) IssueChangeLabels(ctx context.Context, doer *user_mode
525534
err = PrepareWebhooks(ctx, EventSource{Repository: issue.Repo}, webhook_module.HookEventPullRequestLabel, &api.PullRequestPayload{
526535
Action: api.HookIssueLabelUpdated,
527536
Index: issue.Index,
528-
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
537+
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, doer),
529538
Repository: convert.ToRepo(ctx, issue.Repo, access_model.Permission{AccessMode: perm.AccessModeOwner}),
530539
Sender: convert.ToUser(ctx, doer, nil),
531540
})
@@ -567,7 +576,7 @@ func (m *webhookNotifier) IssueChangeMilestone(ctx context.Context, doer *user_m
567576
err = PrepareWebhooks(ctx, EventSource{Repository: issue.Repo}, webhook_module.HookEventPullRequestMilestone, &api.PullRequestPayload{
568577
Action: hookAction,
569578
Index: issue.Index,
570-
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
579+
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, doer),
571580
Repository: convert.ToRepo(ctx, issue.Repo, permission),
572581
Sender: convert.ToUser(ctx, doer, nil),
573582
})
@@ -640,7 +649,7 @@ func (*webhookNotifier) MergePullRequest(ctx context.Context, doer *user_model.U
640649
// Merge pull request calls issue.changeStatus so we need to handle separately.
641650
apiPullRequest := &api.PullRequestPayload{
642651
Index: pr.Issue.Index,
643-
PullRequest: convert.ToAPIPullRequest(ctx, pr, nil),
652+
PullRequest: convert.ToAPIPullRequest(ctx, pr, doer),
644653
Repository: convert.ToRepo(ctx, pr.Issue.Repo, permission),
645654
Sender: convert.ToUser(ctx, doer, nil),
646655
Action: api.HookIssueClosed,
@@ -668,7 +677,7 @@ func (m *webhookNotifier) PullRequestChangeTargetBranch(ctx context.Context, doe
668677
From: oldBranch,
669678
},
670679
},
671-
PullRequest: convert.ToAPIPullRequest(ctx, pr, nil),
680+
PullRequest: convert.ToAPIPullRequest(ctx, pr, doer),
672681
Repository: convert.ToRepo(ctx, issue.Repo, mode),
673682
Sender: convert.ToUser(ctx, doer, nil),
674683
}); err != nil {
@@ -703,11 +712,12 @@ func (m *webhookNotifier) PullRequestReview(ctx context.Context, pr *issues_mode
703712
return
704713
}
705714
if err := PrepareWebhooks(ctx, EventSource{Repository: review.Issue.Repo}, reviewHookType, &api.PullRequestPayload{
706-
Action: api.HookIssueReviewed,
707-
Index: review.Issue.Index,
708-
PullRequest: convert.ToAPIPullRequest(ctx, pr, nil),
709-
Repository: convert.ToRepo(ctx, review.Issue.Repo, permission),
710-
Sender: convert.ToUser(ctx, review.Reviewer, nil),
715+
Action: api.HookIssueReviewed,
716+
Index: review.Issue.Index,
717+
PullRequest: convert.ToAPIPullRequest(ctx, pr, review.Reviewer),
718+
RequestedReviewer: convert.ToUser(ctx, review.Reviewer, nil),
719+
Repository: convert.ToRepo(ctx, review.Issue.Repo, permission),
720+
Sender: convert.ToUser(ctx, review.Reviewer, nil),
711721
Review: &api.ReviewPayload{
712722
Type: string(reviewHookType),
713723
Content: review.Content,
@@ -729,7 +739,7 @@ func (m *webhookNotifier) PullRequestReviewRequest(ctx context.Context, doer *us
729739
}
730740
apiPullRequest := &api.PullRequestPayload{
731741
Index: issue.Index,
732-
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, nil),
742+
PullRequest: convert.ToAPIPullRequest(ctx, issue.PullRequest, doer),
733743
RequestedReviewer: convert.ToUser(ctx, reviewer, nil),
734744
Repository: convert.ToRepo(ctx, issue.Repo, permission),
735745
Sender: convert.ToUser(ctx, doer, nil),
@@ -774,7 +784,7 @@ func (m *webhookNotifier) PullRequestSynchronized(ctx context.Context, doer *use
774784
if err := PrepareWebhooks(ctx, EventSource{Repository: pr.Issue.Repo}, webhook_module.HookEventPullRequestSync, &api.PullRequestPayload{
775785
Action: api.HookIssueSynchronized,
776786
Index: pr.Issue.Index,
777-
PullRequest: convert.ToAPIPullRequest(ctx, pr, nil),
787+
PullRequest: convert.ToAPIPullRequest(ctx, pr, doer),
778788
Repository: convert.ToRepo(ctx, pr.Issue.Repo, access_model.Permission{AccessMode: perm.AccessModeOwner}),
779789
Sender: convert.ToUser(ctx, doer, nil),
780790
}); err != nil {

web_src/js/features/common-page.ts

+8
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,11 @@ export function checkAppUrl() {
9191
showGlobalErrorMessage(`Your ROOT_URL in app.ini is "${appUrl}", it's unlikely matching the site you are visiting.
9292
Mismatched ROOT_URL config causes wrong URL links for web UI/mail content/webhook notification/OAuth2 sign-in.`, 'warning');
9393
}
94+
95+
export function checkAppUrlScheme() {
96+
const curUrl = window.location.href;
97+
// some users visit "http://domain" while appUrl is "https://domain", COOKIE_SECURE makes it impossible to sign in
98+
if (curUrl.startsWith('http:') && appUrl.startsWith('https:')) {
99+
showGlobalErrorMessage(`This instance is configured to run under HTTPS (by ROOT_URL config), you are accessing by HTTP. Mismatched scheme might cause problems for sign-in/sign-up.`, 'warning');
100+
}
101+
}

web_src/js/features/repo-issue.ts

+10-7
Original file line numberDiff line numberDiff line change
@@ -187,14 +187,17 @@ export function initRepoIssueCommentDelete() {
187187
const path = conversationHolder.getAttribute('data-path');
188188
const side = conversationHolder.getAttribute('data-side');
189189
const idx = conversationHolder.getAttribute('data-idx');
190-
const lineType = conversationHolder.closest('tr').getAttribute('data-line-type');
191-
192-
if (lineType === 'same') {
193-
document.querySelector(`[data-path="${path}"] .add-code-comment[data-idx="${idx}"]`).classList.remove('tw-invisible');
194-
} else {
195-
document.querySelector(`[data-path="${path}"] .add-code-comment[data-side="${side}"][data-idx="${idx}"]`).classList.remove('tw-invisible');
190+
const lineType = conversationHolder.closest('tr')?.getAttribute('data-line-type');
191+
192+
// the conversation holder could appear either on the "Conversation" page, or the "Files Changed" page
193+
// on the Conversation page, there is no parent "tr", so no need to do anything for "add-code-comment"
194+
if (lineType) {
195+
if (lineType === 'same') {
196+
document.querySelector(`[data-path="${path}"] .add-code-comment[data-idx="${idx}"]`).classList.remove('tw-invisible');
197+
} else {
198+
document.querySelector(`[data-path="${path}"] .add-code-comment[data-side="${side}"][data-idx="${idx}"]`).classList.remove('tw-invisible');
199+
}
196200
}
197-
198201
conversationHolder.remove();
199202
}
200203

web_src/js/features/user-auth.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
import {checkAppUrl} from './common-page.ts';
1+
import {checkAppUrl, checkAppUrlScheme} from './common-page.ts';
2+
3+
export function initUserCheckAppUrl() {
4+
if (!document.querySelector('.page-content.user.signin, .page-content.user.signup, .page-content.user.link-account')) return;
5+
checkAppUrlScheme();
6+
}
27

38
export function initUserAuthOauth2() {
49
const outer = document.querySelector('#oauth2-login-navigator');

web_src/js/index.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import {initFindFileInRepo} from './features/repo-findfile.ts';
2424
import {initCommentContent, initMarkupContent} from './markup/content.ts';
2525
import {initPdfViewer} from './render/pdf.ts';
2626

27-
import {initUserAuthOauth2} from './features/user-auth.ts';
27+
import {initUserAuthOauth2, initUserCheckAppUrl} from './features/user-auth.ts';
2828
import {
2929
initRepoIssueDue,
3030
initRepoIssueReferenceRepositorySearch,
@@ -219,6 +219,7 @@ onDomReady(() => {
219219
initCommitStatuses,
220220
initCaptcha,
221221

222+
initUserCheckAppUrl,
222223
initUserAuthOauth2,
223224
initUserAuthWebAuthn,
224225
initUserAuthWebAuthnRegister,

0 commit comments

Comments
 (0)