Browse Source

smtp login bug fixed

Lunny Xiao 10 năm trước cách đây
mục cha
commit
d2231bb54c
1 tập tin đã thay đổi với 23 bổ sung18 xóa
  1. 23 18
      models/login.go

+ 23 - 18
models/login.go

@@ -148,10 +148,8 @@ func DelLoginSource(source *LoginSource) error {
 // login a user
 func LoginUser(uname, passwd string) (*User, error) {
 	var u *User
-	var emailLogin bool
 	if strings.Contains(uname, "@") {
 		u = &User{Email: uname}
-		emailLogin = true
 	} else {
 		u = &User{LowerName: strings.ToLower(uname)}
 	}
@@ -161,14 +159,10 @@ func LoginUser(uname, passwd string) (*User, error) {
 		return nil, err
 	}
 
-	// if email login, then we cannot auto register
-	if emailLogin {
-		if !has {
-			return nil, ErrUserNotExist
-		}
-	}
 	if u.LoginType == LT_NOTYPE {
-		u.LoginType = LT_PLAIN
+		if has {
+			u.LoginType = LT_PLAIN
+		}
 	}
 
 	// for plain login, user must have existed.
@@ -194,13 +188,13 @@ func LoginUser(uname, passwd string) (*User, error) {
 
 			for _, source := range sources {
 				if source.Type == LT_LDAP {
-					u, err := LoginUserLdapSource(nil, u.LoginName, passwd,
+					u, err := LoginUserLdapSource(nil, uname, passwd,
 						source.Id, source.Cfg.(*LDAPConfig), true)
 					if err == nil {
 						return u, err
 					}
 				} else if source.Type == LT_SMTP {
-					u, err := LoginUserSMTPSource(nil, u.LoginName, passwd,
+					u, err := LoginUserSMTPSource(nil, uname, passwd,
 						source.Id, source.Cfg.(*SMTPConfig), true)
 
 					if err == nil {
@@ -295,16 +289,20 @@ var (
 	SMTPAuths  = []string{SMTP_PLAIN, SMTP_LOGIN}
 )
 
-func SmtpAuth(addr string, a smtp.Auth) error {
+func SmtpAuth(addr string, a smtp.Auth, tls bool) error {
 	c, err := smtp.Dial(addr)
 	if err != nil {
 		return err
 	}
 	defer c.Close()
 
-	if ok, _ := c.Extension("STARTTLS"); ok {
-		if err = c.StartTLS(nil); err != nil {
-			return err
+	if tls {
+		if ok, _ := c.Extension("STARTTLS"); ok {
+			if err = c.StartTLS(nil); err != nil {
+				return err
+			}
+		} else {
+			return errors.New("smtp server unsupported tls")
 		}
 	}
 
@@ -327,9 +325,11 @@ func LoginUserSMTPSource(user *User, name, passwd string, sourceId int64, cfg *S
 		auth = smtp.PlainAuth("", name, passwd, cfg.Host)
 	} else if cfg.Auth == SMTP_LOGIN {
 		auth = LoginAuth(name, passwd)
+	} else {
+		return nil, errors.New("Unsupported smtp auth type")
 	}
 
-	err := SmtpAuth(fmt.Sprintf("%s:%d", cfg.Host, cfg.Port), auth)
+	err := SmtpAuth(fmt.Sprintf("%s:%d", cfg.Host, cfg.Port), auth, cfg.TLS)
 	if err != nil {
 		return nil, err
 	}
@@ -338,10 +338,15 @@ func LoginUserSMTPSource(user *User, name, passwd string, sourceId int64, cfg *S
 		return user, nil
 	}
 
+	var loginName = name
+	idx := strings.Index(name, "@")
+	if idx > -1 {
+		loginName = name[:idx]
+	}
 	// fake a local user creation
 	user = &User{
-		LowerName:   strings.ToLower(name),
-		Name:        strings.ToLower(name),
+		LowerName:   strings.ToLower(loginName),
+		Name:        strings.ToLower(loginName),
 		LoginType:   LT_SMTP,
 		LoginSource: sourceId,
 		LoginName:   name,