|
@@ -67,11 +67,12 @@ func (cfg *LDAPConfig) ToDB() ([]byte, error) {
|
|
|
}
|
|
|
|
|
|
type SMTPConfig struct {
|
|
|
- Auth string
|
|
|
- Host string
|
|
|
- Port int
|
|
|
- TLS bool
|
|
|
- SkipVerify bool
|
|
|
+ Auth string
|
|
|
+ Host string
|
|
|
+ Port int
|
|
|
+ AllowedDomains string `xorm:"TEXT"`
|
|
|
+ TLS bool
|
|
|
+ SkipVerify bool
|
|
|
}
|
|
|
|
|
|
func (cfg *SMTPConfig) FromDB(bs []byte) error {
|
|
@@ -383,6 +384,16 @@ func SMTPAuth(a smtp.Auth, cfg *SMTPConfig) error {
|
|
|
// Create a local user if success
|
|
|
// Return the same LoginUserPlain semantic
|
|
|
func LoginUserSMTPSource(u *User, name, passwd string, sourceId int64, cfg *SMTPConfig, autoRegister bool) (*User, error) {
|
|
|
+ // Verify allowed domains.
|
|
|
+ if len(cfg.AllowedDomains) > 0 {
|
|
|
+ idx := strings.Index(name, "@")
|
|
|
+ if idx == -1 {
|
|
|
+ return nil, ErrUserNotExist{0, name}
|
|
|
+ } else if !com.IsSliceContainsStr(strings.Split(cfg.AllowedDomains, ","), name[idx+1:]) {
|
|
|
+ return nil, ErrUserNotExist{0, name}
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
var auth smtp.Auth
|
|
|
if cfg.Auth == SMTP_PLAIN {
|
|
|
auth = smtp.PlainAuth("", name, passwd, cfg.Host)
|
|
@@ -394,7 +405,8 @@ func LoginUserSMTPSource(u *User, name, passwd string, sourceId int64, cfg *SMTP
|
|
|
|
|
|
if err := SMTPAuth(auth, cfg); err != nil {
|
|
|
if strings.Contains(err.Error(), "Username and Password not accepted") {
|
|
|
- return nil, ErrUserNotExist{u.Id, u.Name}
|
|
|
+ fmt.Println(err)
|
|
|
+ return nil, ErrUserNotExist{0, name}
|
|
|
}
|
|
|
return nil, err
|
|
|
}
|