From 16e207b8e2737a28b7f3f3828b93bfabcf1f86fb Mon Sep 17 00:00:00 2001 From: Mmx233 Date: Fri, 21 Oct 2022 14:31:35 +0800 Subject: [PATCH] =?UTF-8?q?improve:=20=E6=8B=86=E5=88=86=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- v1/config.go | 17 ---------- v1/login.go | 96 +++++++++++++++++++++++++--------------------------- v1/models.go | 13 ------- 3 files changed, 47 insertions(+), 79 deletions(-) delete mode 100644 v1/config.go diff --git a/v1/config.go b/v1/config.go deleted file mode 100644 index 81b2ba7..0000000 --- a/v1/config.go +++ /dev/null @@ -1,17 +0,0 @@ -package BitSrun - -func GenerateLoginInfo(Form *LoginForm, Meta *LoginMeta) *LoginContext { - return &LoginContext{ - Meta: Meta, - Form: &LoginForm{ - UserName: func() string { - if Form.UserType == "" { - return Form.UserName - } else { - return Form.UserName + "@" + Form.UserType - } - }(), - PassWord: Form.PassWord, - }, - } -} diff --git a/v1/login.go b/v1/login.go index 60966f7..25fc361 100644 --- a/v1/login.go +++ b/v1/login.go @@ -6,81 +6,79 @@ import ( log "github.com/sirupsen/logrus" ) -func Login(c *Conf) error { +func LoginStatus(c *Conf) (online bool, ip string, e error) { c.initApi() - G := GenerateLoginInfo(c.LoginInfo.Form, c.LoginInfo.Meta) - - log.Debugln("正在检查登录状态") res, e := c.api.GetUserInfo() if e != nil { - return e + return false, "", e } + err, ok := res["error"] - 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"] + return false, "", ErrResultCannotFound + } + + ipInterface, ok := res["client_ip"] + if !ok { + ipInterface, ok = res["online_ip"] if !ok { - return ErrResultCannotFound + return false, "", ErrResultCannotFound } } - G.Ip = ip.(string) - log.Debugln("ip: ", G.Ip) + return err.(string) == "ok", ipInterface.(string), nil +} + +func DoLogin(clientIP string, c *Conf) error { log.Debugln("正在获取 Token") - res, e = c.api.GetChallenge(G.Form.UserName, G.Ip) + if c.LoginInfo.Form.UserType != "" { + c.LoginInfo.Form.UserName += "@" + c.LoginInfo.Form.UserType + } + + res, e := c.api.GetChallenge(c.LoginInfo.Form.UserName, clientIP) if e != nil { return e } - var token interface{} - token, ok = res["challenge"] + token, ok := res["challenge"] if !ok { return ErrResultCannotFound } - G.Token = token.(string) - log.Debugln("token: ", G.Token) + tokenStr := token.(string) + log.Debugln("token: ", tokenStr) log.Debugln("发送登录请求") 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, + "username": c.LoginInfo.Form.UserName, + "password": c.LoginInfo.Form.PassWord, + "ip": clientIP, + "acid": c.LoginInfo.Meta.Acid, + "enc_ver": c.LoginInfo.Meta.Enc, }) if e != nil { return e } - G.EncryptedInfo = "{SRBX1}" + Base64(XEncode(string(info), G.Token)) - G.Md5 = Md5(G.Token) - G.EncryptedMd5 = "{MD5}" + G.Md5 - - 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 = Sha1(chkstr) + EncryptedInfo := "{SRBX1}" + Base64(XEncode(string(info), tokenStr)) + Md5Str := Md5(tokenStr) + EncryptedMd5 := "{MD5}" + Md5Str + EncryptedChkstr := Sha1( + tokenStr + c.LoginInfo.Form.UserName + tokenStr + Md5Str + + tokenStr + c.LoginInfo.Meta.Acid + tokenStr + clientIP + + tokenStr + c.LoginInfo.Meta.N + tokenStr + c.LoginInfo.Meta.Type + + tokenStr + EncryptedInfo, + ) 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, + c.LoginInfo.Form.UserName, + EncryptedMd5, + c.LoginInfo.Meta.Acid, + clientIP, + EncryptedInfo, + EncryptedChkstr, + c.LoginInfo.Meta.N, + c.LoginInfo.Meta.Type, ) if e != nil { return e @@ -90,10 +88,10 @@ func Login(c *Conf) error { if !ok { return ErrResultCannotFound } - G.LoginResult = result.(string) + LoginResult := result.(string) - if G.LoginResult != "ok" { - return errors.New(G.LoginResult) + if LoginResult != "ok" { + return errors.New(LoginResult) } return nil diff --git a/v1/models.go b/v1/models.go index 8c68aab..a2a1f3f 100644 --- a/v1/models.go +++ b/v1/models.go @@ -38,16 +38,3 @@ type Conf struct { func (a *Conf) initApi() { a.api.Init(a.Https, a.LoginInfo.Form.Domain, a.Client) } - -type LoginContext struct { - Ip string - Token string - EncryptedInfo string - Md5 string - EncryptedMd5 string - EncryptedChkstr string - LoginResult string - - Form *LoginForm - Meta *LoginMeta -}