Skip to content

Commit c8b64c7

Browse files
committed
Refactor
1 parent 229235f commit c8b64c7

File tree

3 files changed

+58
-33
lines changed

3 files changed

+58
-33
lines changed

services/mailer/mail.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,3 +171,39 @@ func fromDisplayName(u *user_model.User) string {
171171
}
172172
return u.GetCompleteName()
173173
}
174+
175+
func generateMetadataHeaders(repo *repo_model.Repository) map[string]string {
176+
return map[string]string{
177+
// https://datatracker.ietf.org/doc/html/rfc2919
178+
"List-ID": fmt.Sprintf("%s <%s.%s.%s>", repo.FullName(), repo.Name, repo.OwnerName, setting.Domain),
179+
180+
// https://datatracker.ietf.org/doc/html/rfc2369
181+
"List-Archive": fmt.Sprintf("<%s>", repo.HTMLURL()),
182+
183+
"X-Mailer": "Gitea",
184+
185+
"X-Gitea-Repository": repo.Name,
186+
"X-Gitea-Repository-Path": repo.FullName(),
187+
"X-Gitea-Repository-Link": repo.HTMLURL(),
188+
189+
"X-GitLab-Project": repo.Name,
190+
"X-GitLab-Project-Path": repo.FullName(),
191+
}
192+
}
193+
194+
func generateSenderRecipientHeaders(doer, recipient *user_model.User) map[string]string {
195+
return map[string]string{
196+
"X-Gitea-Sender": doer.Name,
197+
"X-Gitea-Recipient": recipient.Name,
198+
"X-GitHub-Sender": doer.Name,
199+
"X-GitHub-Recipient": recipient.Name,
200+
}
201+
}
202+
203+
func generateReasonHeaders(reason string) map[string]string {
204+
return map[string]string{
205+
"X-Gitea-Reason": reason,
206+
"X-GitHub-Reason": reason,
207+
"X-GitLab-NotificationReason": reason,
208+
}
209+
}

services/mailer/mail_issue_common.go

Lines changed: 20 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import (
2929
// Many e-mail service providers have limitations on the size of the email body, it's usually from 10MB to 25MB
3030
const maxEmailBodySize = 9_000_000
3131

32-
func fallbackMailSubject(issue *issues_model.Issue) string {
32+
func fallbackIssueMailSubject(issue *issues_model.Issue) string {
3333
return fmt.Sprintf("[%s] %s (#%d)", issue.Repo.FullName(), issue.Title, issue.Index)
3434
}
3535

@@ -86,7 +86,7 @@ func composeIssueCommentMessages(ctx context.Context, comment *mailComment, lang
8686
if actName != "new" {
8787
prefix = "Re: "
8888
}
89-
fallback = prefix + fallbackMailSubject(comment.Issue)
89+
fallback = prefix + fallbackIssueMailSubject(comment.Issue)
9090

9191
if comment.Comment != nil && comment.Comment.Review != nil {
9292
reviewComments = make([]*issues_model.Comment, 0, 10)
@@ -202,7 +202,7 @@ func composeIssueCommentMessages(ctx context.Context, comment *mailComment, lang
202202
msg.SetHeader("References", references...)
203203
msg.SetHeader("List-Unsubscribe", listUnsubscribe...)
204204

205-
for key, value := range generateAdditionalHeaders(comment, actType, recipient) {
205+
for key, value := range generateAdditionalHeadersForIssue(comment, actType, recipient) {
206206
msg.SetHeader(key, value)
207207
}
208208

@@ -302,35 +302,24 @@ func generateMessageIDForIssue(issue *issues_model.Issue, comment *issues_model.
302302
return fmt.Sprintf("<%s/%s/%d%s@%s>", issue.Repo.FullName(), path, issue.Index, extra, setting.Domain)
303303
}
304304

305-
func generateAdditionalHeaders(ctx *mailComment, reason string, recipient *user_model.User) map[string]string {
305+
func generateAdditionalHeadersForIssue(ctx *mailComment, reason string, recipient *user_model.User) map[string]string {
306306
repo := ctx.Issue.Repo
307307

308-
return map[string]string{
309-
// https://datatracker.ietf.org/doc/html/rfc2919
310-
"List-ID": fmt.Sprintf("%s <%s.%s.%s>", repo.FullName(), repo.Name, repo.OwnerName, setting.Domain),
311-
312-
// https://datatracker.ietf.org/doc/html/rfc2369
313-
"List-Archive": fmt.Sprintf("<%s>", repo.HTMLURL()),
314-
315-
"X-Mailer": "Gitea",
316-
"X-Gitea-Reason": reason,
317-
"X-Gitea-Sender": ctx.Doer.Name,
318-
"X-Gitea-Recipient": recipient.Name,
319-
"X-Gitea-Recipient-Address": recipient.Email,
320-
"X-Gitea-Repository": repo.Name,
321-
"X-Gitea-Repository-Path": repo.FullName(),
322-
"X-Gitea-Repository-Link": repo.HTMLURL(),
323-
"X-Gitea-Issue-ID": strconv.FormatInt(ctx.Issue.Index, 10),
324-
"X-Gitea-Issue-Link": ctx.Issue.HTMLURL(),
325-
326-
"X-GitHub-Reason": reason,
327-
"X-GitHub-Sender": ctx.Doer.Name,
328-
"X-GitHub-Recipient": recipient.Name,
329-
"X-GitHub-Recipient-Address": recipient.Email,
330-
331-
"X-GitLab-NotificationReason": reason,
332-
"X-GitLab-Project": repo.Name,
333-
"X-GitLab-Project-Path": repo.FullName(),
334-
"X-GitLab-Issue-IID": strconv.FormatInt(ctx.Issue.Index, 10),
308+
issueID := strconv.FormatInt(ctx.Issue.Index, 10)
309+
headers := generateMetadataHeaders(repo)
310+
311+
for k, v := range generateSenderRecipientHeaders(ctx.Doer, recipient) {
312+
headers[k] = v
313+
}
314+
for k, v := range generateReasonHeaders(reason) {
315+
headers[k] = v
335316
}
317+
318+
headers["X-Gitea-Recipient-Address"] = recipient.Email
319+
headers["X-Gitea-Issue-ID"] = issueID
320+
headers["X-Gitea-Issue-Link"] = ctx.Issue.HTMLURL()
321+
headers["X-GitHub-Recipient-Address"] = recipient.Email
322+
headers["X-GitLab-Issue-IID"] = issueID
323+
324+
return headers
336325
}

services/mailer/mail_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,13 +297,13 @@ func testComposeIssueCommentMessage(t *testing.T, ctx *mailComment, recipients [
297297
return msgs[0]
298298
}
299299

300-
func TestGenerateAdditionalHeaders(t *testing.T) {
300+
func TestGenerateAdditionalHeadersForIssue(t *testing.T) {
301301
doer, _, issue, _ := prepareMailerTest(t)
302302

303303
comment := &mailComment{Issue: issue, Doer: doer}
304304
recipient := &user_model.User{Name: "test", Email: "[email protected]"}
305305

306-
headers := generateAdditionalHeaders(comment, "dummy-reason", recipient)
306+
headers := generateAdditionalHeadersForIssue(comment, "dummy-reason", recipient)
307307

308308
expected := map[string]string{
309309
"List-ID": "user2/repo1 <repo1.user2.localhost>",

0 commit comments

Comments
 (0)