func InitPlat() { http.Handle("/zssj/js/", http.StripPrefix("/zssj/js/", http.FileServer(http.Dir(config.GetConfigStr("bw_plugin")+"/js")))) http.Handle("/zssj/images/", http.StripPrefix("/zssj/images/", http.FileServer(http.Dir(config.GetConfigStr("bw_plugin")+"/images")))) for key, val := range platMap { http.HandleFunc(key, val) } }
// juxian game auth func On619GameAuth(w http.ResponseWriter, req *http.Request) { defer req.Body.Close() logging.Debug("619 request login:%s,%s", req.RemoteAddr, req.URL.Path) game_plat := game.GetGameNameByUrl(req.URL.Path) + "_" + game.GetPlatNameByUrl(req.URL.Path) StationId := req.FormValue("StationId") account := req.FormValue("UserId") timestr := req.FormValue("Time") game_id := req.FormValue("GameId") server_id := req.FormValue("ServerId") sign := req.FormValue("Sign") hash := md5.New() mystr := "StationId=" + StationId + "&" + account + "&" + game_id + "&" + server_id + "&" + config.GetConfigStr(game_plat+"_key") + "_" + timestr io.WriteString(hash, mystr) mysign := fmt.Sprintf("%x", hash.Sum(nil)) if mysign != sign { logging.Debug("md5 check err:%s,%s,%s", mystr, mysign, sign) //TODO redirect error page http.Redirect(w, req, config.GetConfigStr(game_plat+"_err"), 303) return } if account == "" { http.Redirect(w, req, config.GetConfigStr(game_plat+"_err"), 303) logging.Debug("account and qid can not be none both:%s", mystr) return } tr, _ := strconv.Atoi(timestr) diffsec := math.Abs(float64(time.Now().Unix() - int64(tr))) if diffsec > time.Hour.Seconds()*24 { http.Redirect(w, req, config.GetConfigStr(game_plat+"_err"), 303) logging.Debug("time err:%s,%d,%d", mystr, time.Now().Unix(), diffsec) return } myaccount, myaccid, err := db.GetMyAccount(game.GetPlatNameByUrl(req.URL.Path), account, "") if err != nil { http.Redirect(w, req, config.GetConfigStr(game_plat+"_err"), 303) return } logging.Debug("request login ok:%s,%d", myaccount, myaccid) gameid, _ := strconv.Atoi(game_id) serverid, _ := strconv.Atoi(server_id) server_id = strconv.Itoa((gameid << 16) + serverid) game.AddLoginToken(game.GetGameNameByUrl(req.URL.Path), server_id, myaccount, myaccid, 1, mysign, w, game.GetPlatNameByUrl(req.URL.Path), req, config.GetConfigStr(game_plat+"_err")) //para := fmt.Sprintf("?account=%s&accid=%d&server_id=%s", myaccount, myaccid, server_id) //http.Redirect(w, req, config.GetConfigStr(game_plat+"_ok")+para, 303) //TODO redirect to gamepage }
func (self *GameLoginBw) Login(zoneid uint32, myaccount string, myaccid uint32, isAdult uint32, token string, w http.ResponseWriter, platname string, req *http.Request, err_url string) error { game := 0 game, tmpl_data.Zonename = db.GetZonenameByZoneid(zoneid) tmpl_data.Token = token tmpl_data.Zoneid = strconv.Itoa(int(zoneid)) tmpl_data.Zonetype = "0" tmpl_data.Nettype = "0" starttype := req.FormValue("starttype") if starttype != "" { tmpl_data.Starttype = starttype } logintype := req.FormValue("logintype") tmpl_data.Configpath = config.GetConfigStr("bw_configpath") + platname + ".xml" cmd := Cmd.NewStWebLoginUserTokenWebGateUserCmd() cmd.Zoneid = uint32((game << 16) + int(zoneid)) cmd.Accid = myaccid for i, v := range myaccount { cmd.Account[i] = byte(v) } cmd.Lifetime = 3600 //token过期时间,0表示只登陆一次 cmd.UserType = 1 ///ChannelType cmd.Type = isAdult for i, v := range token { cmd.Token[i] = byte(v) } if self.task != nil { self.task.SendCmd(cmd) } if logintype == "1" { page := `<!DOCTYPE html> <html> <head> <title></title> </head> <body> <script type="text/javascript"> window.location.href = "%s"; </script> </body> </html> ` url := fmt.Sprintf("/api/entergame?server=%d&servername=%s&token=%s", zoneid, tmpl_data.Zonename, token) w.Write([]byte(fmt.Sprintf(page, url))) return nil } tmpl_data.Loginurl = err_url err := tmpl.Execute(w, tmpl_data) if err != nil { logging.Debug("excute game page error:%s", err.Error()) return err } return nil }
func OnJuXianBill(w http.ResponseWriter, req *http.Request) { defer req.Body.Close() game_plat := game.GetGameNameByUrl(req.URL.Path) + "_" + game.GetPlatNameByUrl(req.URL.Path) qid := req.FormValue("qid") order_amount := req.FormValue("order_amount") order_id := req.FormValue("order_id") server_id := req.FormValue("server_id") sign := req.FormValue("sign") logging.Debug("juxian request bill:%s,%s,%s", qid, req.RemoteAddr, req.URL.Path) hash := md5.New() mystr := qid + order_amount + order_id + server_id + config.GetConfigStr(game_plat+"_key") io.WriteString(hash, mystr) mysign := fmt.Sprintf("%x", hash.Sum(nil)) if strings.ToLower(mysign) != strings.ToLower(sign) { hash.Reset() mystr1 := "qid=" + qid + "&order_amount=" + order_amount + "&order_id=" + order_id + "&server_id=" + server_id + "&sign=" + config.GetConfigStr(game_plat+"_key") io.WriteString(hash, mystr1) mysign := fmt.Sprintf("%x", hash.Sum(nil)) if strings.ToLower(mysign) != strings.ToLower(sign) { hash.Reset() mystr2 := "qid=" + qid + "&order_amount=" + order_amount + "&order_id=" + order_id + "&server_id=" + server_id + "&sign=" + config.GetConfigStr(game_plat+"_key") io.WriteString(hash, mystr2) mysign := fmt.Sprintf("%x", hash.Sum(nil)) if strings.ToLower(mysign) != strings.ToLower(sign) { logging.Debug("md5 check err:%s,%s,%s,%s,%s", mystr, mystr1, mystr2, mysign, sign) w.Write([]byte("0")) return } } } myaccid, err := db.GetMyAccountByAccountId(game.GetPlatNameByUrl(req.URL.Path), qid) if err != nil { logging.Debug("bill account err:%s", qid) w.Write([]byte("3")) return } zoneid, _ := strconv.Atoi(server_id) gameid, _ := db.GetZonenameByZoneid(uint32(zoneid)) logging.Debug("request bill ok:%s,%d,%d,%d", qid, myaccid, gameid, zoneid) serverid, _ := strconv.Atoi(server_id) server_id = strconv.Itoa((gameid << 16) + serverid) names := db.GetAllZoneCharNameByAccid(server_id, myaccid) if names == nil || len(names) == 0 { logging.Debug("bill checkname err:%d,%s", myaccid, qid) w.Write([]byte("3")) return } moneynum, _ := strconv.ParseFloat(order_amount, 32) game.Billing(game.GetGameNameByUrl(req.URL.Path), server_id, myaccid, 0, uint32(moneynum*100)) w.Write([]byte("1")) }
func (self *GameLoginBw) Connect() *net.TCPConn { cfg := config.NewConfig() if err := cfg.LoadFromFile(config.GetConfigStr("loginServerList"), "LoginServerList"); err != nil { logging.Error("init game err,%s", err.Error()) return nil } addr := cfg.GetConfigStr("ip") + ":" + cfg.GetConfigStr("port") raddr, _ := net.ResolveTCPAddr("tcp", addr) conn, err := net.DialTCP("tcp", nil, raddr) if err != nil { logging.Error("conn err:%s,1%s", addr, err.Error()) return nil } logging.Debug("new connection:%s", conn.RemoteAddr()) return conn }
func (self *GameLoginBw) Init(name string) bool { conn := self.Connect() tick := time.Tick(time.Second) tmpl_data = &BwGameTemplate{} tmpl_data.GameName = config.GetConfigStr("bw_gamename") tmpl_data.Starttype = config.GetConfigStr("bw_starttype") tmpl_data.Patchurl = config.GetConfigStr("bw_patchurl") tmpl_data.Allurl = config.GetConfigStr("bw_allurl") tmpl_data.Setuppath = config.GetConfigStr("bw_setuppath") + "#" + strconv.Itoa(int(time.Now().Unix())) tmpl_data.Loginaddr = config.GetConfigStr("bw_loginaddr") tmpl_data.Loginport = config.GetConfigStr("bw_loginport") tmpl_data.Configpath = config.GetConfigStr("bw_configpath") var err error tmpl, err = template.ParseFiles(config.GetConfigStr("bw_plugin") + "/templates/game.html") if err != nil { logging.Debug("open game page error:%s", err.Error()) return false } for { select { case <-tick: if conn == nil { conn = self.Connect() } if conn != nil { self.task = bwtask.NewBwTask(conn, "LBW") self.task.SetHandleMessage(&handleMessageMap) cmd := Cmd.NewStRequestLoginLoginCmd() self.task.SendCmd(cmd) self.task.Id = 1 //rand.Int63() self.task.Name = name self.task.Start() <-self.task.StopChan conn = nil } } } return true }
func OnJuUcjoyBill(w http.ResponseWriter, req *http.Request) { defer req.Body.Close() game_plat := game.GetGameNameByUrl(req.URL.Path) + "_" + game.GetPlatNameByUrl(req.URL.Path) qid := req.FormValue("accountid") gameid := req.FormValue("gameid") server_id := req.FormValue("serverid") orderid := req.FormValue("orderid") order_amount := req.FormValue("point") giftcoin := req.FormValue("giftcoin") timestamp := req.FormValue("timestamp") remark := req.FormValue("remark") sign := req.FormValue("sign") logging.Debug("ucjoy request bill:%s,%s,%s", qid, req.RemoteAddr, req.URL.Path) hash := md5.New() mystr := qid + gameid + server_id + orderid + order_amount + giftcoin + timestamp + remark + config.GetConfigStr(game_plat+"_key") io.WriteString(hash, mystr) mysign := fmt.Sprintf("%x", hash.Sum(nil)) if strings.ToLower(mysign) != strings.ToLower(sign) { logging.Debug("md5 check err:%s,%s,%s", mystr, mysign, sign) w.Write([]byte("4")) return } myaccid, err := db.GetMyAccountByAccountId(game.GetPlatNameByUrl(req.URL.Path), qid) if err != nil { logging.Debug("bill account err:%s", qid) w.Write([]byte("3")) return } zoneid, _ := strconv.Atoi(server_id) zid := config.GetConfigInt("zqb_zoneid_" + server_id) if zid != 0 { zoneid = zid } if zoneid == 11211 { zoneid = 11012 } if zoneid == 11238 { zoneid = 11013 } if zoneid == 11351 { zoneid = 11014 } if zoneid == 11397 { zoneid = 11015 } if zoneid == 11396 { zoneid = 11999 } if zoneid == 11491 { zoneid = 11016 } if zoneid == 11551 { zoneid = 11017 } if zoneid == 11592 { zoneid = 11018 } if zoneid == 11651 { zoneid = 11019 } if zoneid == 11694 { zoneid = 11998 } if zoneid == 11771 { zoneid = 11020 } if zoneid == 11872 { zoneid = 11021 } if zoneid == 11912 { zoneid = 11022 } if zoneid == 11931 { zoneid = 11023 } if zoneid == 12011 { zoneid = 11024 } if zoneid == 12071 { zoneid = 11099 } if zoneid == 12091 { zoneid = 11025 } if zoneid == 12133 { zoneid = 11026 } if zoneid == 12211 { zoneid = 11027 } if zoneid == 12220 { zoneid = 11098 } mygameid, _ := db.GetZonenameByZoneid(uint32(zoneid)) logging.Debug("request bill ok:%s,%d,%d,%d", qid, myaccid, mygameid, zoneid) serverid := zoneid server_id = strconv.Itoa((mygameid << 16) + serverid) names := db.GetAllZoneCharNameByAccid(server_id, myaccid) if names == nil || len(names) == 0 { logging.Debug("bill checkname err:%d,%s", myaccid, qid) w.Write([]byte("3")) return } moneynum, _ := strconv.ParseFloat(order_amount, 32) game.Billing(game.GetGameNameByUrl(req.URL.Path), server_id, myaccid, 0, uint32(moneynum)) w.Write([]byte("1")) }
// juxian game auth func OnJuXianAuth(w http.ResponseWriter, req *http.Request) { defer req.Body.Close() game_plat := game.GetGameNameByUrl(req.URL.Path) + "_" + game.GetPlatNameByUrl(req.URL.Path) qid := req.FormValue("qid") timestr := req.FormValue("time") server_id := req.FormValue("server_id") sign := req.FormValue("sign") isAdult := req.FormValue("isAdult") account := req.FormValue("account") logging.Debug("juxian request login:%s,%s,%s", qid, req.RemoteAddr, req.URL.Path) hash := md5.New() mystr := "qid=" + qid + "&time=" + timestr + "&server_id=" + server_id + config.GetConfigStr(game_plat+"_key") io.WriteString(hash, mystr) logging.Debug("%s", mystr) mysign := fmt.Sprintf("%x", hash.Sum(nil)) if strings.ToLower(mysign) != strings.ToLower(sign) { hash.Reset() mystr1 := "qid=" + qid + "&time=" + timestr + "&server_id=" + server_id + "&sign=" + config.GetConfigStr(game_plat+"_key") io.WriteString(hash, mystr1) logging.Debug("%s", mystr) mysign := fmt.Sprintf("%x", hash.Sum(nil)) if strings.ToLower(mysign) != strings.ToLower(sign) { hash.Reset() mystr2 := qid + timestr + server_id + config.GetConfigStr(game_plat+"_key") io.WriteString(hash, mystr1) logging.Debug("%s", mystr2) mysign := fmt.Sprintf("%x", hash.Sum(nil)) if strings.ToLower(mysign) != strings.ToLower(sign) { logging.Debug("md5 check err:%s,%s,%s,%s,%s", mystr, mystr1, mystr2, mysign, sign) //TODO redirect error page http.Redirect(w, req, config.GetConfigStr(game_plat+"_err"), 303) return } } } if account == "" { account = qid } if account == "" { http.Redirect(w, req, config.GetConfigStr(game_plat+"_err"), 303) logging.Debug("account and qid can not be none both:%s", mystr) return } tr, _ := strconv.Atoi(timestr) diffsec := math.Abs(float64(time.Now().Unix() - int64(tr))) if diffsec > time.Hour.Seconds()*24 { http.Redirect(w, req, config.GetConfigStr(game_plat+"_err"), 303) logging.Debug("time err:%s,%d,%d", mystr, time.Now().Unix(), diffsec) return } myaccount, myaccid, err := db.GetMyAccount(game.GetPlatNameByUrl(req.URL.Path), account, qid) if err != nil { http.Redirect(w, req, config.GetConfigStr(game_plat+"_err"), 303) return } logging.Debug("request login ok:%s,%d", myaccount, myaccid) adult, _ := strconv.Atoi(isAdult) game.AddLoginToken(game.GetGameNameByUrl(req.URL.Path), server_id, myaccount, myaccid, uint32(adult), mysign, w, game.GetPlatNameByUrl(req.URL.Path), req, config.GetConfigStr(game_plat+"_err")) //para := fmt.Sprintf("?account=%s&accid=%d&server_id=%s", myaccount, myaccid, server_id) //http.Redirect(w, req, config.GetConfigStr(game_plat+"_ok")+para, 303) //TODO redirect to gamepage }
// juxian game auth func OnJuXianCheckName(w http.ResponseWriter, req *http.Request) { defer req.Body.Close() game_plat := game.GetGameNameByUrl(req.URL.Path) + "_" + game.GetPlatNameByUrl(req.URL.Path) qid := req.FormValue("qid") server_id := req.FormValue("server_id") sign := req.FormValue("sign") logging.Debug("juxian request checkname:%s,%s,%s", qid, req.RemoteAddr, req.URL.Path) hash := md5.New() mystr := "qid=" + qid + "&server_id=" + server_id + config.GetConfigStr(game_plat+"_key") io.WriteString(hash, mystr) mysign := fmt.Sprintf("%x", hash.Sum(nil)) if strings.ToLower(mysign) != strings.ToLower(sign) { hash.Reset() mystr1 := "qid=" + qid + "&server_id=" + server_id + "&sign=" + config.GetConfigStr(game_plat+"_key") io.WriteString(hash, mystr1) mysign := fmt.Sprintf("%x", hash.Sum(nil)) if strings.ToLower(mysign) != strings.ToLower(sign) { hash.Reset() mystr2 := qid + server_id + config.GetConfigStr(game_plat+"_key") io.WriteString(hash, mystr2) mysign := fmt.Sprintf("%x", hash.Sum(nil)) if strings.ToLower(mysign) != strings.ToLower(sign) { logging.Debug("juxian md5 check err:%s,%s,%s,%s,%s", mystr, mystr1, mystr2, mysign, sign) ret := ErrorState{Result: "-1"} b, _ := json.Marshal(ret) w.Write(b) return } return } } //account := qid myaccid, err := db.GetMyAccountByAccountId(game.GetPlatNameByUrl(req.URL.Path), qid) if err != nil { http.Redirect(w, req, config.GetConfigStr(game_plat+"_err"), 303) return } zoneid, _ := strconv.Atoi(server_id) gameid, _ := db.GetZonenameByZoneid(uint32(zoneid)) logging.Debug("request check ok:%s,%d,%d,%d", qid, myaccid, gameid, zoneid) serverid, _ := strconv.Atoi(server_id) server_id = strconv.Itoa((gameid << 16) + serverid) names := db.GetAllZoneCharNameByAccid(server_id, myaccid) if names == nil || len(names) == 0 { logging.Debug("names err:%d", myaccid) ret := ErrorState{Result: "-3"} b, _ := json.Marshal(ret) w.Write(b) return } nicks := NickNameList{ Result: "1", Data: make([]NickName, len(names)), } convert, _ := iconv.Open("GB2312", "UTF-8") for i, name := range names { charname, _ := convert.ConvString(name.CharName) fmt.Println(name.CharId, charname) nicks.Data[i].Nickid = name.CharId nicks.Data[i].Nickname = charname } b, _ := json.Marshal(nicks) fmt.Println(string(b)) w.Write(b) }
func main() { flag.Parse() config.SetConfig("config", *flag.String("config", "config.xml", "config xml file for start")) config.SetConfig("logfilename", *flag.String("logfilename", "/log/authserver.log", "log file name")) config.SetConfig("daemon", *flag.String("daemon", "false", "need run as daemon")) config.SetConfig("port", *flag.String("port", "8000", "http port ")) config.SetConfig("log", *flag.String("log", "debug", "logger level ")) config.SetConfig("loginServerList", *flag.String("loginServerList", "loginServerList.xml", "server list config")) config.SetConfig("bw_plugin", *flag.String("bw_plugin", "game/bw/", "bw_plugin dir")) config.LoadFromFile(config.GetConfigStr("config"), "global") if err := config.LoadFromFile(config.GetConfigStr("config"), "AuthServer"); err != nil { fmt.Println(err) return } if err := config.LoadFromFile(config.GetConfigStr("key"), "Key"); err != nil { fmt.Println(err) return } logger, err := logging.NewTimeRotationHandler(config.GetConfigStr("logfilename"), "060102-15") if err != nil { fmt.Println(err) return } logger.SetLevel(logging.DEBUG) logging.AddHandler("AU", logger) if config.GetConfigStr("daemon") == "true" { logging.DisableStdout() } logging.Info("server starting...") mysqlurl := config.GetConfigStr("mysql") if ok, err := regexp.MatchString("^mysql://.*:.*@.*/.*$", mysqlurl); ok == false || err != nil { logging.Error("mysql config syntax err:%s", mysqlurl) return } mysqlurl = strings.Replace(mysqlurl, "mysql://", "", 1) mysqlurl = strings.Replace(mysqlurl, "@", ":", 1) mysqlurl = strings.Replace(mysqlurl, "/", ":", 1) mysqlurls := strings.Split(mysqlurl, ":") config.SetConfig("dbname", mysqlurls[4]) db.InitDatabase(mysqlurls[2]+":"+mysqlurls[3], mysqlurls[0], mysqlurls[1], mysqlurls[4]) mysqlurl = config.GetConfigStr("mysql_checkname") if ok, err := regexp.MatchString("^mysql://.*:.*@.*/.*$", mysqlurl); ok == false || err != nil { logging.Error("mysql config syntax err:%s", mysqlurl) return } mysqlurl = strings.Replace(mysqlurl, "mysql://", "", 1) mysqlurl = strings.Replace(mysqlurl, "@", ":", 1) mysqlurl = strings.Replace(mysqlurl, "/", ":", 1) mysqlurls = strings.Split(mysqlurl, ":") db.InitCheckNameDatabase(mysqlurls[2]+":"+mysqlurls[3], mysqlurls[0], mysqlurls[1], mysqlurls[4]) plat.InitPlat() game.InitLogin() game.InitBill() //addr, err := net.InterfaceByIndex(0) ifname, err := net.InterfaceByName(config.GetConfigStr("ifname")) if err != nil { fmt.Println("GetLocalIp Err:", err) logging.Debug("GetLocalIp Err:%s", err.Error()) } addrs, err := ifname.Addrs() if err != nil { fmt.Println("GetLocalIp Err:", err) logging.Debug("GetLocalIp Err:%s", err.Error()) } else { fmt.Println(addrs[0].String(), addrs[0].Network(), strings.Split(addrs[0].String(), "/")[0]) } //err = http.ListenAndServe(strings.Split(addrs[0].String(), "/")[0]+":"+config.GetConfigStr("port"), nil) err = http.ListenAndServe(":"+config.GetConfigStr("port"), nil) if err != nil { fmt.Println(err) logging.Debug("ListenAndServe:%s", err.Error()) } logging.Info("server stop...") }
// juxian game auth func OnKuaiWanAuth(w http.ResponseWriter, req *http.Request) { defer req.Body.Close() logging.Debug("kw request login:%s,%s", req.RemoteAddr, req.URL.Path) game_plat := game.GetGameNameByUrl(req.URL.Path) + "_" + game.GetPlatNameByUrl(req.URL.Path) account := req.FormValue("login_name") timestr := req.FormValue("time") game_id := req.FormValue("game_id") server_id := req.FormValue("server_id") from_id := req.FormValue("from_id") sign := req.FormValue("token") hash := md5.New() mystr := "from_id=" + from_id + "&game_id=" + game_id + "&login_name=" + account + "&server_id=" + server_id + "&time=" + timestr + "&key=" + config.GetConfigStr(game_plat+"_key") io.WriteString(hash, mystr) mysign := fmt.Sprintf("%x", hash.Sum(nil)) if mysign != sign { logging.Debug("OnKuaiWanAuth md5 check err:%s,%s,%s", mystr, mysign, sign) ret := ErrorState{Result: "-1"} b, _ := json.Marshal(ret) w.Write(b) return } if account == "" || len(account) > 20 { logging.Debug("account err:%s", mystr) ret := ErrorState{Result: "-2"} b, _ := json.Marshal(ret) w.Write(b) return } if game_id == "" || server_id == "" { logging.Debug("account err:%s", mystr) ret := ErrorState{Result: "-3"} b, _ := json.Marshal(ret) w.Write(b) return } if from_id == "" { logging.Debug("account err:%s", mystr) ret := ErrorState{Result: "-4"} b, _ := json.Marshal(ret) w.Write(b) return } tr, _ := strconv.Atoi(timestr) diffsec := math.Abs(float64(time.Now().Unix() - int64(tr))) if diffsec > time.Hour.Seconds()*24 { ret := ErrorState{Result: "-5"} b, _ := json.Marshal(ret) w.Write(b) return } account = from_id + "_" + account myaccount, myaccid, err := db.GetMyAccount(game.GetPlatNameByUrl(req.URL.Path), account, "") if err != nil { ret := ErrorState{Result: "-5"} b, _ := json.Marshal(ret) w.Write(b) return } logging.Debug("request login ok:%s,%d", myaccount, myaccid) gameid, _ := strconv.Atoi(game_id) serverid, _ := strconv.Atoi(server_id) server_id = strconv.Itoa((gameid << 16) + serverid) game.AddLoginToken(game.GetGameNameByUrl(req.URL.Path), server_id, myaccount, myaccid, 1, mysign, w, game.GetPlatNameByUrl(req.URL.Path), req, config.GetConfigStr(game_plat+"_err")) //para := fmt.Sprintf("?account=%s&accid=%d&server_id=%s", myaccount, myaccid, server_id) //http.Redirect(w, req, config.GetConfigStr(game_plat+"_ok")+para, 303) //TODO redirect to gamepage }
// juxian game auth func OnKuaiWanCheckName(w http.ResponseWriter, req *http.Request) { defer req.Body.Close() logging.Debug("kw request login:%s,%s", req.RemoteAddr, req.URL.Path) game_plat := game.GetGameNameByUrl(req.URL.Path) + "_" + game.GetPlatNameByUrl(req.URL.Path) account := req.FormValue("login_name") game_id := req.FormValue("game_id") server_id := req.FormValue("server_id") from_id := req.FormValue("from_id") sign := req.FormValue("token") hash := md5.New() mystr := from_id + game_id + account + server_id + config.GetConfigStr(game_plat+"_key") io.WriteString(hash, mystr) mysign := fmt.Sprintf("%x", hash.Sum(nil)) if mysign != sign { logging.Debug("kuaiwan md5 check err:%s,%s,%s", mystr, mysign, sign) ret := ErrorState{Result: "-1"} b, _ := json.Marshal(ret) w.Write(b) return } if from_id == "" { logging.Debug("account err:%s", mystr) ret := ErrorState{Result: "-2"} b, _ := json.Marshal(ret) w.Write(b) return } if account == "" || len(account) > 20 { logging.Debug("account err:%s", mystr) ret := ErrorState{Result: "-3"} b, _ := json.Marshal(ret) w.Write(b) return } account = from_id + "_" + account _, myaccid, err := db.GetMyAccount(game.GetPlatNameByUrl(req.URL.Path), account, "") if err != nil { logging.Debug("my account err:%s", account) ret := ErrorState{Result: "-3"} b, _ := json.Marshal(ret) w.Write(b) return } names := db.GetAllZoneCharNameByAccid(server_id, myaccid) if names == nil || len(names) == 0 { logging.Debug("names err:%d", myaccid) ret := ErrorState{Result: "-3"} b, _ := json.Marshal(ret) w.Write(b) return } nicks := NickNameList{ Result: "1", Data: make([]NickName, len(names)), } convert, _ := iconv.Open("GB2312", "UTF-8") for i, name := range names { charname, _ := convert.ConvString(name.CharName) fmt.Println(name.CharId, charname) nicks.Data[i].Nickid = name.CharId nicks.Data[i].Nickname = charname } b, _ := json.Marshal(nicks) fmt.Println(string(b)) w.Write(b) }
// juxian game auth func OnKuaiWanBill(w http.ResponseWriter, req *http.Request) { defer req.Body.Close() logging.Debug("kw request login:%s,%s", req.RemoteAddr, req.URL.Path) game_plat := game.GetGameNameByUrl(req.URL.Path) + "_" + game.GetPlatNameByUrl(req.URL.Path) account := req.FormValue("login_name") money := req.FormValue("money") order_no := req.FormValue("order_no") game_id := req.FormValue("game_id") server_id := req.FormValue("server_id") from_id := req.FormValue("from_id") sign := req.FormValue("token") hash := md5.New() mystr := from_id + game_id + account + money + order_no + server_id + config.GetConfigStr(game_plat+"_key") io.WriteString(hash, mystr) mysign := fmt.Sprintf("%x", hash.Sum(nil)) if mysign != sign { logging.Debug("OnKuaiWanBill md5 check err:%s,%s,%s", mystr, mysign, sign) ret := ErrorState{Result: "-1"} b, _ := json.Marshal(ret) w.Write(b) return } if account == "" || len(account) > 20 { logging.Debug("account err:%s", mystr) ret := ErrorState{Result: "-2"} b, _ := json.Marshal(ret) w.Write(b) return } if game_id == "" || server_id == "" { logging.Debug("account err:%s", mystr) ret := ErrorState{Result: "-3"} b, _ := json.Marshal(ret) w.Write(b) return } if from_id == "" { logging.Debug("account err:%s", mystr) ret := ErrorState{Result: "-3"} b, _ := json.Marshal(ret) w.Write(b) return } moneynum, _ := strconv.Atoi(money) if moneynum <= 0 { ret := ErrorState{Result: "-4"} b, _ := json.Marshal(ret) w.Write(b) return } if v, ok := order_map[order_no]; ok { if time.Now().Unix()-v < 86400 { ret := ErrorState{Result: "-5"} b, _ := json.Marshal(ret) w.Write(b) return } delete(order_map, order_no) } order_map[order_no] = time.Now().Unix() account = from_id + "_" + account myaccount, myaccid, err := db.GetMyAccount(game.GetPlatNameByUrl(req.URL.Path), account, "") if err != nil { ret := ErrorState{Result: "-6"} b, _ := json.Marshal(ret) w.Write(b) return } logging.Debug("request OnKuaiWanBill ok:%s,%d", myaccount, myaccid) gameid, _ := strconv.Atoi(game_id) serverid, _ := strconv.Atoi(server_id) server_id = strconv.Itoa((gameid << 16) + serverid) game.Billing(game.GetGameNameByUrl(req.URL.Path), server_id, myaccid, 0, uint32(moneynum)) ret := ErrorState{Result: "1"} b, _ := json.Marshal(ret) w.Write(b) }