mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-04 06:24:11 +01:00 
			
		
		
		
	smtp login bug fixed
This commit is contained in:
		
							parent
							
								
									c5dbc24ca4
								
							
						
					
					
						commit
						d2231bb54c
					
				@ -148,10 +148,8 @@ func DelLoginSource(source *LoginSource) error {
 | 
				
			|||||||
// login a user
 | 
					// login a user
 | 
				
			||||||
func LoginUser(uname, passwd string) (*User, error) {
 | 
					func LoginUser(uname, passwd string) (*User, error) {
 | 
				
			||||||
	var u *User
 | 
						var u *User
 | 
				
			||||||
	var emailLogin bool
 | 
					 | 
				
			||||||
	if strings.Contains(uname, "@") {
 | 
						if strings.Contains(uname, "@") {
 | 
				
			||||||
		u = &User{Email: uname}
 | 
							u = &User{Email: uname}
 | 
				
			||||||
		emailLogin = true
 | 
					 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		u = &User{LowerName: strings.ToLower(uname)}
 | 
							u = &User{LowerName: strings.ToLower(uname)}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -161,14 +159,10 @@ func LoginUser(uname, passwd string) (*User, error) {
 | 
				
			|||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// if email login, then we cannot auto register
 | 
					 | 
				
			||||||
	if emailLogin {
 | 
					 | 
				
			||||||
		if !has {
 | 
					 | 
				
			||||||
			return nil, ErrUserNotExist
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if u.LoginType == LT_NOTYPE {
 | 
						if u.LoginType == LT_NOTYPE {
 | 
				
			||||||
		u.LoginType = LT_PLAIN
 | 
							if has {
 | 
				
			||||||
 | 
								u.LoginType = LT_PLAIN
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// for plain login, user must have existed.
 | 
						// for plain login, user must have existed.
 | 
				
			||||||
@ -194,13 +188,13 @@ func LoginUser(uname, passwd string) (*User, error) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			for _, source := range sources {
 | 
								for _, source := range sources {
 | 
				
			||||||
				if source.Type == LT_LDAP {
 | 
									if source.Type == LT_LDAP {
 | 
				
			||||||
					u, err := LoginUserLdapSource(nil, u.LoginName, passwd,
 | 
										u, err := LoginUserLdapSource(nil, uname, passwd,
 | 
				
			||||||
						source.Id, source.Cfg.(*LDAPConfig), true)
 | 
											source.Id, source.Cfg.(*LDAPConfig), true)
 | 
				
			||||||
					if err == nil {
 | 
										if err == nil {
 | 
				
			||||||
						return u, err
 | 
											return u, err
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				} else if source.Type == LT_SMTP {
 | 
									} 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)
 | 
											source.Id, source.Cfg.(*SMTPConfig), true)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					if err == nil {
 | 
										if err == nil {
 | 
				
			||||||
@ -295,16 +289,20 @@ var (
 | 
				
			|||||||
	SMTPAuths  = []string{SMTP_PLAIN, SMTP_LOGIN}
 | 
						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)
 | 
						c, err := smtp.Dial(addr)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	defer c.Close()
 | 
						defer c.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ok, _ := c.Extension("STARTTLS"); ok {
 | 
						if tls {
 | 
				
			||||||
		if err = c.StartTLS(nil); err != nil {
 | 
							if ok, _ := c.Extension("STARTTLS"); ok {
 | 
				
			||||||
			return err
 | 
								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)
 | 
							auth = smtp.PlainAuth("", name, passwd, cfg.Host)
 | 
				
			||||||
	} else if cfg.Auth == SMTP_LOGIN {
 | 
						} else if cfg.Auth == SMTP_LOGIN {
 | 
				
			||||||
		auth = LoginAuth(name, passwd)
 | 
							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 {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@ -338,10 +338,15 @@ func LoginUserSMTPSource(user *User, name, passwd string, sourceId int64, cfg *S
 | 
				
			|||||||
		return user, nil
 | 
							return user, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var loginName = name
 | 
				
			||||||
 | 
						idx := strings.Index(name, "@")
 | 
				
			||||||
 | 
						if idx > -1 {
 | 
				
			||||||
 | 
							loginName = name[:idx]
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	// fake a local user creation
 | 
						// fake a local user creation
 | 
				
			||||||
	user = &User{
 | 
						user = &User{
 | 
				
			||||||
		LowerName:   strings.ToLower(name),
 | 
							LowerName:   strings.ToLower(loginName),
 | 
				
			||||||
		Name:        strings.ToLower(name),
 | 
							Name:        strings.ToLower(loginName),
 | 
				
			||||||
		LoginType:   LT_SMTP,
 | 
							LoginType:   LT_SMTP,
 | 
				
			||||||
		LoginSource: sourceId,
 | 
							LoginSource: sourceId,
 | 
				
			||||||
		LoginName:   name,
 | 
							LoginName:   name,
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user