SJA APS后端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

47 lines
1.1 KiB

package mysmtp
import "errors"
/*
auth login
*/
type loginAuth struct {
username, password string
host string
}
/*
auth login 验证
*/
func LoginAuth(username, password, host string) Auth {
return &loginAuth{username, password, host}
}
/*
初步验证服务器信息,输入账号
*/
func (a *loginAuth) Start(server *ServerInfo) (string, []byte, error) {
// 如果不是安全连接,也不是本地的服务器,报错,不允许不安全的连接
if !server.TLS && !isLocalhost(server.Name) {
return "", nil, errors.New("unencrypted connection")
}
// 如果服务器信息和 Auth 对象的服务器信息不一致,报错
if server.Name != a.host {
return "", nil, errors.New("wrong host name")
}
// 验证时需要的账号
resp := []byte(a.username)
// "auth login" 命令
return "LOGIN", resp, nil
}
/*
进一步进行验证,输入密码
*/
func (a *loginAuth) Next(fromServer []byte, more bool) ([]byte, error) {
// 如果服务器需要更多验证,报错
if more {
return []byte(a.password), nil
}
return nil, nil
}