aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--models/login.go41
1 files changed, 23 insertions, 18 deletions
diff --git a/models/login.go b/models/login.go
index fae2ac76..92d1a362 100644
--- a/models/login.go
+++ b/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,