diff --git a/Global/global.go b/Global/global.go new file mode 100644 index 0000000..3a376cb --- /dev/null +++ b/Global/global.go @@ -0,0 +1,5 @@ +package Global + +import "Mmx/Modles" + +var Config *Modles.Config diff --git a/Modles/config.go b/Modles/config.go index 1ce15a8..1fa9ab5 100644 --- a/Modles/config.go +++ b/Modles/config.go @@ -1,6 +1,12 @@ package Modles -type Config struct { - From LoginForm - Meta LoginMeta +type Settings struct { + QuitIfNetOk bool `json:"quit_if_net_ok"` + DemoMode bool `json:"demo_mode"` +} + +type Config struct { + From LoginForm `json:"from"` + Meta LoginMeta `json:"meta"` + Settings Settings `json:"settings"` } diff --git a/Util/config.go b/Util/config.go index beb8fcc..c5545fd 100644 --- a/Util/config.go +++ b/Util/config.go @@ -1,6 +1,7 @@ package Util import ( + "Mmx/Global" "Mmx/Modles" "fmt" "os" @@ -55,6 +56,8 @@ func (a *config) Init() *Modles.LoginInfo { os.Exit(3) } + Global.Config = &c + return a.Generate( &c.From, &c.Meta, diff --git a/Util/util.go b/Util/util.go index 0b267b2..5aa01b0 100644 --- a/Util/util.go +++ b/Util/util.go @@ -1,11 +1,13 @@ package Util import ( + "Mmx/Global" "crypto/md5" "crypto/sha1" "errors" "fmt" "io" + "os" "regexp" ) @@ -45,3 +47,14 @@ func Sha1(content string) string { bs := h.Sum(nil) return fmt.Sprintf("%x\n", bs) } + +func ErrHandler(err error) { + if err != nil { + fmt.Println("Error occurred") + if Global.Config.Settings.DemoMode { + panic(err) + } + fmt.Println(err) + os.Exit(3) + } +} diff --git a/main.go b/main.go index 592ae3f..d1d2972 100644 --- a/main.go +++ b/main.go @@ -1,33 +1,27 @@ package main import ( + "Mmx/Global" "Mmx/Request" "Mmx/Util" "encoding/json" "fmt" ) -func ErrHandler(err error) { - if err != nil { - fmt.Println("Error occurred") - panic(err) - } -} - func main() { - if Util.Checker.NetOk() { + G := Util.Config.Init() + + if Global.Config.Settings.QuitIfNetOk && Util.Checker.NetOk() { fmt.Println("There's no need to login") return } - G := Util.Config.Init() - fmt.Println("Step1: Get local ip returned from srun server.") { body, err := Request.Get(G.UrlLoginPage, nil) - ErrHandler(err) + Util.ErrHandler(err) G.Ip, err = Util.GetIp(body) - ErrHandler(err) + Util.ErrHandler(err) } fmt.Println("Step2: Get token by resolving challenge result.") { @@ -36,11 +30,11 @@ func main() { "username": G.Form.UserName, "ip": G.Ip, }) - ErrHandler(err) + Util.ErrHandler(err) G.Token, err = Util.GetToken(data) - ErrHandler(err) + Util.ErrHandler(err) } - fmt.Println("Step3: Loggin and resolve response.") + fmt.Println("Step3: Login and resolve response.") { info, err := json.Marshal(map[string]string{ "username": G.Form.UserName, @@ -49,7 +43,7 @@ func main() { "acid": G.Meta.Acid, "enc_ver": G.Meta.Enc, }) - ErrHandler(err) + Util.ErrHandler(err) G.EncryptedInfo = "{SRBX1}" + Util.Base64(Util.XEncode(string(info), G.Token)) G.Md5 = Util.Md5(G.Token) G.EncryptedMd5 = "{MD5}" + G.Md5 @@ -80,9 +74,9 @@ func main() { "double_stack": "0", "_": "1602812428675", }) - ErrHandler(err) + Util.ErrHandler(err) G.LoginResult, err = Util.GetResult(res) - ErrHandler(err) + Util.ErrHandler(err) } - fmt.Println("The loggin result is: " + G.LoginResult) + fmt.Println("The login result is: " + G.LoginResult) }