diff --git a/controllers/login.go b/controllers/login.go index 48a5ef6..834df4b 100644 --- a/controllers/login.go +++ b/controllers/login.go @@ -9,7 +9,7 @@ import ( // Login 登录逻辑 func Login(localAddr net.Addr) error { - return BitSrun.Login(&BitSrun.LoginConf{ + return BitSrun.Login(&BitSrun.Conf{ Https: global.Config.Settings.Basic.Https, LoginInfo: BitSrun.LoginInfo{ Form: &global.Config.Form, diff --git a/v1/login.go b/v1/login.go index 212e132..c5f5c59 100644 --- a/v1/login.go +++ b/v1/login.go @@ -2,111 +2,99 @@ package BitSrun import ( "encoding/json" + "errors" "github.com/Mmx233/BitSrunLoginGo/util" log "github.com/sirupsen/logrus" ) -func Login(c *LoginConf) error { +func Login(c *Conf) error { c.initApi() G := util.GenerateLoginInfo(c.LoginInfo.Form, c.LoginInfo.Meta) - var ok bool + log.Debugln("正在检查登录状态") - { - log.Debugln("正在检查登录状态") - - res, e := c.api.GetUserInfo() - if e != nil { - return e - } - err := res["error"].(string) - if err == "ok" { - log.Debugln("已登录~") - return nil - } - log.Infoln("检测到用户未登录,开始尝试登录...") - - { - log.Debugln("正在获取客户端 IP") - - var ip interface{} - ip, ok = res["client_ip"] - if !ok { - ip, ok = res["online_ip"] - if !ok { - return ErrResultCannotFound - } - } - G.Ip = ip.(string) - log.Debugln("ip: ", G.Ip) - } + res, e := c.api.GetUserInfo() + if e != nil { + return e } + err, ok := res["error"] + if err == "ok" { + log.Debugln("已登录~") + return nil + } + log.Infoln("检测到用户未登录,开始尝试登录...") - { - log.Debugln("正在获取 Token") + log.Debugln("正在获取客户端 IP") - res, e := c.api.GetChallenge(G.Form.UserName, G.Ip) - if e != nil { - return e - } - var token interface{} - token, ok = res["challenge"] + var ip interface{} + ip, ok = res["client_ip"] + if !ok { + ip, ok = res["online_ip"] if !ok { return ErrResultCannotFound } - G.Token = token.(string) - log.Debugln("token: ", G.Token) } + G.Ip = ip.(string) + log.Debugln("ip: ", G.Ip) - { - log.Debugln("发送登录请求") + log.Debugln("正在获取 Token") - info, e := json.Marshal(map[string]string{ - "username": G.Form.UserName, - "password": G.Form.PassWord, - "ip": G.Ip, - "acid": G.Meta.Acid, - "enc_ver": G.Meta.Enc, - }) - if e != nil { - return e - } - G.EncryptedInfo = "{SRBX1}" + util.Base64(util.XEncode(string(info), G.Token)) - G.Md5 = util.Md5(G.Token) - G.EncryptedMd5 = "{MD5}" + G.Md5 + res, e = c.api.GetChallenge(G.Form.UserName, G.Ip) + if e != nil { + return e + } + var token interface{} + token, ok = res["challenge"] + if !ok { + return ErrResultCannotFound + } + G.Token = token.(string) + log.Debugln("token: ", G.Token) - var chkstr = G.Token + G.Form.UserName + G.Token + G.Md5 - chkstr += G.Token + G.Meta.Acid + G.Token + G.Ip - chkstr += G.Token + G.Meta.N + G.Token + G.Meta.Type - chkstr += G.Token + G.EncryptedInfo - G.EncryptedChkstr = util.Sha1(chkstr) + log.Debugln("发送登录请求") - res, e := c.api.Login( - G.Form.UserName, - G.EncryptedMd5, - G.Meta.Acid, - G.Ip, - G.EncryptedInfo, - G.EncryptedChkstr, - G.Meta.N, - G.Meta.Type, - ) - if e != nil { - return e - } - var result interface{} - result, ok = res["error"] - if !ok { - return ErrResultCannotFound - } - G.LoginResult = result.(string) + info, e := json.Marshal(map[string]string{ + "username": G.Form.UserName, + "password": G.Form.PassWord, + "ip": G.Ip, + "acid": G.Meta.Acid, + "enc_ver": G.Meta.Enc, + }) + if e != nil { + return e + } + G.EncryptedInfo = "{SRBX1}" + util.Base64(util.XEncode(string(info), G.Token)) + G.Md5 = util.Md5(G.Token) + G.EncryptedMd5 = "{MD5}" + G.Md5 - if G.LoginResult == "ok" { - log.Infoln("已成功登录~") - } else { - log.Errorf("登陆失败: %s\n请开启日志 debug_level 获取更多信息", G.LoginResult) - return nil - } + var chkstr = G.Token + G.Form.UserName + G.Token + G.Md5 + chkstr += G.Token + G.Meta.Acid + G.Token + G.Ip + chkstr += G.Token + G.Meta.N + G.Token + G.Meta.Type + chkstr += G.Token + G.EncryptedInfo + G.EncryptedChkstr = util.Sha1(chkstr) + + res, e = c.api.Login( + G.Form.UserName, + G.EncryptedMd5, + G.Meta.Acid, + G.Ip, + G.EncryptedInfo, + G.EncryptedChkstr, + G.Meta.N, + G.Meta.Type, + ) + if e != nil { + return e + } + var result interface{} + result, ok = res["error"] + if !ok { + return ErrResultCannotFound + } + G.LoginResult = result.(string) + + if G.LoginResult == "ok" { + return errors.New(G.LoginResult) } return nil diff --git a/v1/models.go b/v1/models.go index 6c142a6..a2a1f3f 100644 --- a/v1/models.go +++ b/v1/models.go @@ -25,7 +25,7 @@ type LoginInfo struct { Meta *LoginMeta } -type LoginConf struct { +type Conf struct { //调用 API 时直接访问 https URL Https bool //登录参数,不可缺省 @@ -35,6 +35,6 @@ type LoginConf struct { api srun.Api } -func (a *LoginConf) initApi() { +func (a *Conf) initApi() { a.api.Init(a.Https, a.LoginInfo.Form.Domain, a.Client) }