Skip to content

Commit 12625ca

Browse files
Merge branch 'master' into improve-strings
2 parents 87c9692 + c5f6f8f commit 12625ca

File tree

4 files changed

+310
-73
lines changed

4 files changed

+310
-73
lines changed

models/user.go

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import (
1414
"errors"
1515
"fmt"
1616
_ "image/jpeg" // Needed for jpeg support
17-
"net/mail"
1817
"os"
1918
"path/filepath"
2019
"regexp"
@@ -809,9 +808,8 @@ func CreateUser(u *User) (err error) {
809808
return ErrEmailAlreadyUsed{u.Email}
810809
}
811810

812-
_, err = mail.ParseAddress(u.Email)
813-
if err != nil {
814-
return ErrEmailInvalid{u.Email}
811+
if err = ValidateEmail(u.Email); err != nil {
812+
return err
815813
}
816814

817815
isExist, err = isEmailUsed(sess, u.Email)
@@ -956,11 +954,10 @@ func checkDupEmail(e Engine, u *User) error {
956954
return nil
957955
}
958956

959-
func updateUser(e Engine, u *User) error {
957+
func updateUser(e Engine, u *User) (err error) {
960958
u.Email = strings.ToLower(u.Email)
961-
_, err := mail.ParseAddress(u.Email)
962-
if err != nil {
963-
return ErrEmailInvalid{u.Email}
959+
if err = ValidateEmail(u.Email); err != nil {
960+
return err
964961
}
965962
_, err = e.ID(u.ID).AllCols().Update(u)
966963
return err
@@ -982,13 +979,21 @@ func updateUserCols(e Engine, u *User, cols ...string) error {
982979
}
983980

984981
// UpdateUserSetting updates user's settings.
985-
func UpdateUserSetting(u *User) error {
982+
func UpdateUserSetting(u *User) (err error) {
983+
sess := x.NewSession()
984+
defer sess.Close()
985+
if err = sess.Begin(); err != nil {
986+
return err
987+
}
986988
if !u.IsOrganization() {
987-
if err := checkDupEmail(x, u); err != nil {
989+
if err = checkDupEmail(sess, u); err != nil {
988990
return err
989991
}
990992
}
991-
return updateUser(x, u)
993+
if err = updateUser(sess, u); err != nil {
994+
return err
995+
}
996+
return sess.Commit()
992997
}
993998

994999
// deleteBeans deletes all given beans, beans should contain delete conditions.

models/user_mail.go

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,21 @@ type EmailAddress struct {
3333
IsPrimary bool `xorm:"-"`
3434
}
3535

36+
// ValidateEmail check if email is a allowed address
37+
func ValidateEmail(email string) error {
38+
if len(email) == 0 {
39+
return nil
40+
}
41+
42+
if _, err := mail.ParseAddress(email); err != nil {
43+
return ErrEmailInvalid{email}
44+
}
45+
46+
// TODO: add an email allow/block list
47+
48+
return nil
49+
}
50+
3651
// GetEmailAddresses returns all email addresses belongs to given user.
3752
func GetEmailAddresses(uid int64) ([]*EmailAddress, error) {
3853
emails := make([]*EmailAddress, 0, 5)
@@ -144,9 +159,8 @@ func addEmailAddress(e Engine, email *EmailAddress) error {
144159
return ErrEmailAlreadyUsed{email.Email}
145160
}
146161

147-
_, err = mail.ParseAddress(email.Email)
148-
if err != nil {
149-
return ErrEmailInvalid{email.Email}
162+
if err = ValidateEmail(email.Email); err != nil {
163+
return err
150164
}
151165

152166
_, err = e.Insert(email)
@@ -173,9 +187,8 @@ func AddEmailAddresses(emails []*EmailAddress) error {
173187
} else if used {
174188
return ErrEmailAlreadyUsed{emails[i].Email}
175189
}
176-
_, err = mail.ParseAddress(emails[i].Email)
177-
if err != nil {
178-
return ErrEmailInvalid{emails[i].Email}
190+
if err = ValidateEmail(emails[i].Email); err != nil {
191+
return err
179192
}
180193
}
181194

routers/repo/issue.go

Lines changed: 23 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -2392,67 +2392,34 @@ func attachmentsHTML(ctx *context.Context, attachments []*models.Attachment) str
23922392
}
23932393

23942394
func combineLabelComments(issue *models.Issue) {
2395-
for i := 0; i < len(issue.Comments); {
2396-
c := issue.Comments[i]
2397-
var shouldMerge bool
2398-
var removingCur bool
2399-
var prev *models.Comment
2400-
2401-
if i == 0 {
2402-
shouldMerge = false
2403-
} else {
2395+
for i := 0; i < len(issue.Comments); i++ {
2396+
var (
2397+
prev *models.Comment
2398+
cur = issue.Comments[i]
2399+
)
2400+
if i > 0 {
24042401
prev = issue.Comments[i-1]
2405-
removingCur = c.Content != "1"
2406-
2407-
shouldMerge = prev.PosterID == c.PosterID && c.CreatedUnix-prev.CreatedUnix < 60 &&
2408-
c.Type == prev.Type
24092402
}
2410-
2411-
if c.Type == models.CommentTypeLabel {
2412-
if !shouldMerge {
2413-
if removingCur {
2414-
c.RemovedLabels = make([]*models.Label, 1)
2415-
c.AddedLabels = make([]*models.Label, 0)
2416-
c.RemovedLabels[0] = c.Label
2403+
if i == 0 || cur.Type != models.CommentTypeLabel ||
2404+
(prev != nil && prev.PosterID != cur.PosterID) ||
2405+
(prev != nil && cur.CreatedUnix-prev.CreatedUnix >= 60) {
2406+
if cur.Type == models.CommentTypeLabel {
2407+
if cur.Content != "1" {
2408+
cur.RemovedLabels = append(cur.RemovedLabels, cur.Label)
24172409
} else {
2418-
c.RemovedLabels = make([]*models.Label, 0)
2419-
c.AddedLabels = make([]*models.Label, 1)
2420-
c.AddedLabels[0] = c.Label
2410+
cur.AddedLabels = append(cur.AddedLabels, cur.Label)
24212411
}
2422-
} else {
2423-
// Remove duplicated "added" and "removed" labels
2424-
// This way, adding and immediately removing a label won't generate a comment.
2425-
var appendingTo *[]*models.Label
2426-
var other *[]*models.Label
2427-
2428-
if removingCur {
2429-
appendingTo = &prev.RemovedLabels
2430-
other = &prev.AddedLabels
2431-
} else {
2432-
appendingTo = &prev.AddedLabels
2433-
other = &prev.RemovedLabels
2434-
}
2435-
2436-
appending := true
2437-
2438-
for i := 0; i < len(*other); i++ {
2439-
l := (*other)[i]
2440-
if l.ID == c.Label.ID {
2441-
*other = append((*other)[:i], (*other)[i+1:]...)
2442-
appending = false
2443-
break
2444-
}
2445-
}
2446-
2447-
if appending {
2448-
*appendingTo = append(*appendingTo, c.Label)
2449-
}
2450-
2451-
prev.CreatedUnix = c.CreatedUnix
2452-
issue.Comments = append(issue.Comments[:i], issue.Comments[i+1:]...)
2453-
continue
24542412
}
2413+
continue
24552414
}
2456-
i++
2415+
2416+
if cur.Content != "1" {
2417+
prev.RemovedLabels = append(prev.RemovedLabels, cur.Label)
2418+
} else {
2419+
prev.AddedLabels = append(prev.AddedLabels, cur.Label)
2420+
}
2421+
prev.CreatedUnix = cur.CreatedUnix
2422+
issue.Comments = append(issue.Comments[:i], issue.Comments[i+1:]...)
2423+
i--
24572424
}
24582425
}

0 commit comments

Comments
 (0)