chore: 重新整理代码若干;撤销对 login error 的错误的错误处理

This commit is contained in:
Mmx233
2022-10-21 13:30:28 +08:00
parent 09acd88312
commit 8f8cedc0b3
3 changed files with 76 additions and 88 deletions

View File

@@ -9,7 +9,7 @@ import (
// Login 登录逻辑 // Login 登录逻辑
func Login(localAddr net.Addr) error { func Login(localAddr net.Addr) error {
return BitSrun.Login(&BitSrun.LoginConf{ return BitSrun.Login(&BitSrun.Conf{
Https: global.Config.Settings.Basic.Https, Https: global.Config.Settings.Basic.Https,
LoginInfo: BitSrun.LoginInfo{ LoginInfo: BitSrun.LoginInfo{
Form: &global.Config.Form, Form: &global.Config.Form,

View File

@@ -2,111 +2,99 @@ package BitSrun
import ( import (
"encoding/json" "encoding/json"
"errors"
"github.com/Mmx233/BitSrunLoginGo/util" "github.com/Mmx233/BitSrunLoginGo/util"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
) )
func Login(c *LoginConf) error { func Login(c *Conf) error {
c.initApi() c.initApi()
G := util.GenerateLoginInfo(c.LoginInfo.Form, c.LoginInfo.Meta) G := util.GenerateLoginInfo(c.LoginInfo.Form, c.LoginInfo.Meta)
var ok bool log.Debugln("正在检查登录状态")
{ res, e := c.api.GetUserInfo()
log.Debugln("正在检查登录状态") if e != nil {
return e
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)
}
} }
err, ok := res["error"]
if err == "ok" {
log.Debugln("已登录~")
return nil
}
log.Infoln("检测到用户未登录,开始尝试登录...")
{ log.Debugln("正在获取客户端 IP")
log.Debugln("正在获取 Token")
res, e := c.api.GetChallenge(G.Form.UserName, G.Ip) var ip interface{}
if e != nil { ip, ok = res["client_ip"]
return e if !ok {
} ip, ok = res["online_ip"]
var token interface{}
token, ok = res["challenge"]
if !ok { if !ok {
return ErrResultCannotFound return ErrResultCannotFound
} }
G.Token = token.(string)
log.Debugln("token: ", G.Token)
} }
G.Ip = ip.(string)
log.Debugln("ip: ", G.Ip)
{ log.Debugln("正在获取 Token")
log.Debugln("发送登录请求")
info, e := json.Marshal(map[string]string{ res, e = c.api.GetChallenge(G.Form.UserName, G.Ip)
"username": G.Form.UserName, if e != nil {
"password": G.Form.PassWord, return e
"ip": G.Ip, }
"acid": G.Meta.Acid, var token interface{}
"enc_ver": G.Meta.Enc, token, ok = res["challenge"]
}) if !ok {
if e != nil { return ErrResultCannotFound
return e }
} G.Token = token.(string)
G.EncryptedInfo = "{SRBX1}" + util.Base64(util.XEncode(string(info), G.Token)) log.Debugln("token: ", G.Token)
G.Md5 = util.Md5(G.Token)
G.EncryptedMd5 = "{MD5}" + G.Md5
var chkstr = G.Token + G.Form.UserName + G.Token + G.Md5 log.Debugln("发送登录请求")
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( info, e := json.Marshal(map[string]string{
G.Form.UserName, "username": G.Form.UserName,
G.EncryptedMd5, "password": G.Form.PassWord,
G.Meta.Acid, "ip": G.Ip,
G.Ip, "acid": G.Meta.Acid,
G.EncryptedInfo, "enc_ver": G.Meta.Enc,
G.EncryptedChkstr, })
G.Meta.N, if e != nil {
G.Meta.Type, return e
) }
if e != nil { G.EncryptedInfo = "{SRBX1}" + util.Base64(util.XEncode(string(info), G.Token))
return e G.Md5 = util.Md5(G.Token)
} G.EncryptedMd5 = "{MD5}" + G.Md5
var result interface{}
result, ok = res["error"]
if !ok {
return ErrResultCannotFound
}
G.LoginResult = result.(string)
if G.LoginResult == "ok" { var chkstr = G.Token + G.Form.UserName + G.Token + G.Md5
log.Infoln("已成功登录~") chkstr += G.Token + G.Meta.Acid + G.Token + G.Ip
} else { chkstr += G.Token + G.Meta.N + G.Token + G.Meta.Type
log.Errorf("登陆失败: %s\n请开启日志 debug_level 获取更多信息", G.LoginResult) chkstr += G.Token + G.EncryptedInfo
return nil 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 return nil

View File

@@ -25,7 +25,7 @@ type LoginInfo struct {
Meta *LoginMeta Meta *LoginMeta
} }
type LoginConf struct { type Conf struct {
//调用 API 时直接访问 https URL //调用 API 时直接访问 https URL
Https bool Https bool
//登录参数,不可缺省 //登录参数,不可缺省
@@ -35,6 +35,6 @@ type LoginConf struct {
api srun.Api api srun.Api
} }
func (a *LoginConf) initApi() { func (a *Conf) initApi() {
a.api.Init(a.Https, a.LoginInfo.Form.Domain, a.Client) a.api.Init(a.Https, a.LoginInfo.Form.Domain, a.Client)
} }