|
|
|
@ -169,61 +169,59 @@ func UserSignIn(uname, passwd string) (*User, error) { |
|
|
|
|
// For plain login, user must exist to reach this line.
|
|
|
|
|
// Now verify password.
|
|
|
|
|
if u.LoginType == PLAIN { |
|
|
|
|
newUser := &User{Passwd: passwd, Salt: u.Salt} |
|
|
|
|
newUser.EncodePasswd() |
|
|
|
|
if u.Passwd != newUser.Passwd { |
|
|
|
|
if !u.ValidtePassword(passwd) { |
|
|
|
|
return nil, ErrUserNotExist |
|
|
|
|
} |
|
|
|
|
return u, nil |
|
|
|
|
} else { |
|
|
|
|
if !has { |
|
|
|
|
var sources []LoginSource |
|
|
|
|
if err = x.UseBool().Find(&sources, |
|
|
|
|
&LoginSource{IsActived: true, AllowAutoRegister: true}); err != nil { |
|
|
|
|
return nil, err |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if !has { |
|
|
|
|
var sources []LoginSource |
|
|
|
|
if err = x.UseBool().Find(&sources, |
|
|
|
|
&LoginSource{IsActived: true, AllowAutoRegister: true}); err != nil { |
|
|
|
|
return nil, err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for _, source := range sources { |
|
|
|
|
if source.Type == LDAP { |
|
|
|
|
u, err := LoginUserLdapSource(nil, uname, passwd, |
|
|
|
|
source.Id, source.Cfg.(*LDAPConfig), true) |
|
|
|
|
if err == nil { |
|
|
|
|
return u, nil |
|
|
|
|
} |
|
|
|
|
log.Warn("Fail to login(%s) by LDAP(%s): %v", uname, source.Name, err) |
|
|
|
|
} else if source.Type == SMTP { |
|
|
|
|
u, err := LoginUserSMTPSource(nil, uname, passwd, |
|
|
|
|
source.Id, source.Cfg.(*SMTPConfig), true) |
|
|
|
|
if err == nil { |
|
|
|
|
return u, nil |
|
|
|
|
} |
|
|
|
|
log.Warn("Fail to login(%s) by SMTP(%s): %v", uname, source.Name, err) |
|
|
|
|
for _, source := range sources { |
|
|
|
|
if source.Type == LDAP { |
|
|
|
|
u, err := LoginUserLdapSource(nil, uname, passwd, |
|
|
|
|
source.Id, source.Cfg.(*LDAPConfig), true) |
|
|
|
|
if err == nil { |
|
|
|
|
return u, nil |
|
|
|
|
} |
|
|
|
|
log.Warn("Fail to login(%s) by LDAP(%s): %v", uname, source.Name, err) |
|
|
|
|
} else if source.Type == SMTP { |
|
|
|
|
u, err := LoginUserSMTPSource(nil, uname, passwd, |
|
|
|
|
source.Id, source.Cfg.(*SMTPConfig), true) |
|
|
|
|
if err == nil { |
|
|
|
|
return u, nil |
|
|
|
|
} |
|
|
|
|
log.Warn("Fail to login(%s) by SMTP(%s): %v", uname, source.Name, err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return nil, ErrUserNotExist |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var source LoginSource |
|
|
|
|
hasSource, err := x.Id(u.LoginSource).Get(&source) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, err |
|
|
|
|
} else if !hasSource { |
|
|
|
|
return nil, ErrLoginSourceNotExist |
|
|
|
|
} else if !source.IsActived { |
|
|
|
|
return nil, ErrLoginSourceNotActived |
|
|
|
|
} |
|
|
|
|
return nil, ErrUserNotExist |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
switch u.LoginType { |
|
|
|
|
case LDAP: |
|
|
|
|
return LoginUserLdapSource(u, u.LoginName, passwd, |
|
|
|
|
source.Id, source.Cfg.(*LDAPConfig), false) |
|
|
|
|
case SMTP: |
|
|
|
|
return LoginUserSMTPSource(u, u.LoginName, passwd, |
|
|
|
|
source.Id, source.Cfg.(*SMTPConfig), false) |
|
|
|
|
} |
|
|
|
|
return nil, ErrUnsupportedLoginType |
|
|
|
|
var source LoginSource |
|
|
|
|
hasSource, err := x.Id(u.LoginSource).Get(&source) |
|
|
|
|
if err != nil { |
|
|
|
|
return nil, err |
|
|
|
|
} else if !hasSource { |
|
|
|
|
return nil, ErrLoginSourceNotExist |
|
|
|
|
} else if !source.IsActived { |
|
|
|
|
return nil, ErrLoginSourceNotActived |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
switch u.LoginType { |
|
|
|
|
case LDAP: |
|
|
|
|
return LoginUserLdapSource(u, u.LoginName, passwd, |
|
|
|
|
source.Id, source.Cfg.(*LDAPConfig), false) |
|
|
|
|
case SMTP: |
|
|
|
|
return LoginUserSMTPSource(u, u.LoginName, passwd, |
|
|
|
|
source.Id, source.Cfg.(*SMTPConfig), false) |
|
|
|
|
} |
|
|
|
|
return nil, ErrUnsupportedLoginType |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Query if name/passwd can login against the LDAP directory pool
|
|
|
|
|