Create & Init Project...

This commit is contained in:
2019-04-22 18:49:16 +08:00
commit fc4fa37393
25440 changed files with 4054998 additions and 0 deletions

View File

@@ -0,0 +1,44 @@
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
name = "go_default_library",
srcs = [
"account.go",
"cache.go",
"cloud.go",
"http.go",
"passport.go",
"passport_login.go",
"passport_reg.go",
"sign.go",
],
importpath = "go-common/app/service/main/passport-game/http",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/service/main/passport-game/conf:go_default_library",
"//app/service/main/passport-game/model:go_default_library",
"//app/service/main/passport-game/service:go_default_library",
"//library/ecode:go_default_library",
"//library/log:go_default_library",
"//library/net/http/blademaster:go_default_library",
"//library/net/metadata:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)

View File

@@ -0,0 +1,51 @@
package http
import (
"strconv"
"go-common/app/service/main/passport-game/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
func myInfo(c *bm.Context) {
var (
err error
params = c.Request.Form
accessKey = params.Get("access_key")
)
if accessKey == "" {
c.JSON(nil, ecode.RequestErr)
return
}
app, ok := c.Get("app")
if !ok {
c.JSON(nil, ecode.AppKeyInvalid)
return
}
info, err := srv.MyInfo(c, app.(*model.App), accessKey)
if err != nil {
log.Error("service.MyInfo(%s) error(%v)", accessKey, err)
c.JSON(nil, err)
return
}
c.JSON(info, nil)
}
func info(c *bm.Context) {
var (
err error
midStr = c.Request.Form.Get("mid")
)
if midStr == "" {
c.JSON(nil, ecode.RequestErr)
return
}
mid, err := strconv.ParseInt(midStr, 10, 64)
if err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
c.JSON(srv.Info(c, mid), nil)
}

View File

@@ -0,0 +1,49 @@
package http
import (
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
func infoPBCache(c *bm.Context) {
var (
err error
key = c.Request.Form.Get("key")
)
if key == "" {
c.JSON(nil, ecode.RequestErr)
return
}
info, err := srv.InfoPBCache(c, key)
if err != nil {
log.Error("service.InfoPBCache(%s) error(%v)", key, err)
res := map[string]interface{}{}
res["code"] = err
res["message"] = err.Error()
c.JSONMap(res, nil)
return
}
c.JSON(info, nil)
}
func tokenPBCache(c *bm.Context) {
var (
err error
key = c.Request.Form.Get("key")
)
if key == "" {
c.JSON(nil, ecode.RequestErr)
return
}
info, err := srv.TokenPBCache(c, key)
if err != nil {
log.Error("service.TokenPBCache(%s) error(%v)", key, err)
res := map[string]interface{}{}
res["code"] = err
res["message"] = err.Error()
c.JSONMap(res, nil)
return
}
c.JSON(info, nil)
}

View File

@@ -0,0 +1,9 @@
package http
import (
"go-common/library/net/http/blademaster"
)
func regions(c *blademaster.Context) {
c.JSON(srv.Regions(c), nil)
}

View File

@@ -0,0 +1,81 @@
package http
import (
"net/http"
"go-common/app/service/main/passport-game/conf"
"go-common/app/service/main/passport-game/service"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
var (
srv *service.Service
)
// Init init http sever instance.
func Init(c *conf.Config, s *service.Service) {
srv = s
// init inner router
engine := bm.DefaultServer(c.BM)
initRouter(engine)
// init inner server
if err := engine.Start(); err != nil {
log.Error("engine.Start error(%v)", err)
panic(err)
}
}
// initRouter init inner router.
func initRouter(e *bm.Engine) {
// health check
e.Ping(ping)
e.Register(register)
// new defined api lists
g := e.Group("/x/passport-game")
{
g.GET("/oauth", verify, oauth)
g.GET("/myinfo", verify, myInfo)
g.GET("/info", verify, info)
g.GET("/key", verify, getKeyProxy)
g.GET("/login", verify, loginProxy)
g.GET("/renewtoken", verify, renewToken)
g.GET("/regions", verify, regions)
g.POST("/reg/v3", verify, regV3)
g.POST("/reg/v2", verify, regV2)
g.POST("/reg", verify, reg)
g.POST("/reg/byTel", verify, byTel)
g.GET("/captcha", verify, captcha)
g.POST("/sendSms", verify, sendSms)
}
inner := e.Group("/cache/pb")
{
inner.GET("/token", tokenPBCache)
inner.GET("/info", infoPBCache)
}
}
func verify(c *bm.Context) {
app, err := verifySign(c, srv)
if err != nil {
c.JSON(nil, err)
c.Abort()
}
c.Set("app", app)
}
// ping check server ok.
func ping(c *bm.Context) {
if err := srv.Ping(c); err != nil {
log.Error("ping error(%v)", err)
c.AbortWithStatus(http.StatusServiceUnavailable)
}
}
// register support discovery.
func register(c *bm.Context) {
c.JSON(map[string]struct{}{}, nil)
}

View File

@@ -0,0 +1,81 @@
package http
import (
"go-common/app/service/main/passport-game/model"
"go-common/app/service/main/passport-game/service"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
func oauth(c *bm.Context) {
var (
err error
params = c.Request.Form
accessKey = params.Get("access_key")
from = params.Get("from")
)
if accessKey == "" {
c.JSON(nil, ecode.RequestErr)
return
}
app, ok := c.Get("app")
if !ok {
c.JSON(nil, ecode.AppKeyInvalid)
return
}
var token *model.Token
if token, err = srv.Oauth(c, app.(*model.App), accessKey, from); err != nil {
log.Error("service.Oauth(%s) error(%v)", accessKey, err)
res := map[string]interface{}{}
if err == service.ErrDispatcherError {
res["message"] = err.Error()
}
c.JSONMap(res, err)
return
}
c.JSON(token, nil)
}
func getKeyOrigin(c *bm.Context) {
var err error
var t *model.RSAKey
if t, err = srv.RSAKeyOrigin(c); err != nil {
log.Error("service.RSAKeyOrigin() error(%v)", err)
c.JSON(nil, err)
return
}
c.JSON(t, nil)
}
func getKey(c *bm.Context) {
c.JSON(srv.RSAKey(c), nil)
}
func getKeyProxy(c *bm.Context) {
if srv.Proxy(c) {
getKeyOrigin(c)
return
}
getKey(c)
}
func renewToken(c *bm.Context) {
var (
err error
params = c.Request.Form
accessKey = params.Get("access_key")
from = params.Get("from")
)
var r *model.RenewToken
if r, err = srv.RenewToken(c, accessKey, from); err != nil {
log.Error("service.RenewToken() error(%v)", err)
res := map[string]interface{}{}
if err == service.ErrDispatcherError {
res["message"] = err.Error()
}
c.JSONMap(res, err)
return
}
c.JSON(r, nil)
}

View File

@@ -0,0 +1,62 @@
package http
import (
"strconv"
"go-common/app/service/main/passport-game/model"
"go-common/library/ecode"
"go-common/library/log"
bm "go-common/library/net/http/blademaster"
)
func loginOrigin(c *bm.Context) {
var (
err error
t *model.LoginToken
params = c.Request.Form
cookie = c.Request.Header.Get("Cookie")
)
if t, err = srv.LoginOrigin(c, params.Encode(), cookie); err != nil {
log.Error("service.LoginOrigin(%s, %s) error(%v)", params.Encode(), cookie, err)
c.JSON(nil, err)
return
}
c.JSON(t, nil)
}
func login(c *bm.Context) {
var (
err error
subid = int64(0)
params = c.Request.Form
subidStr = params.Get("subid")
userid = params.Get("userid")
rsaPwd = params.Get("pwd")
)
if subidStr != "" {
if subid, err = strconv.ParseInt(subidStr, 10, 32); err != nil {
c.JSON(nil, ecode.RequestErr)
return
}
}
app, ok := c.Get("app")
if !ok {
c.JSON(nil, ecode.AppKeyInvalid)
return
}
t, err := srv.Login(c, app.(*model.App), int32(subid), userid, rsaPwd)
if err != nil {
log.Error("service.Login() error(%v)", err)
c.JSON(nil, err)
return
}
c.JSON(t, err)
}
func loginProxy(c *bm.Context) {
if srv.Proxy(c) {
loginOrigin(c)
return
}
login(c)
}

View File

@@ -0,0 +1,67 @@
package http
import (
"go-common/app/service/main/passport-game/model"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/metadata"
)
func regV3(c *bm.Context) {
var argRegV3 = new(model.ArgRegV3)
err := c.Bind(argRegV3)
if err != nil {
return
}
var cookie = c.Request.Header.Get("Cookie")
c.JSON(srv.RegV3(c, model.TdoRegV3{Arg: *argRegV3, IP: metadata.String(c, metadata.RemoteIP), Cookie: cookie}))
}
func regV2(c *bm.Context) {
var argRegV2 = new(model.ArgRegV2)
err := c.Bind(argRegV2)
if err != nil {
return
}
var cookie = c.Request.Header.Get("Cookie")
c.JSON(srv.RegV2(c, model.TdoRegV2{Arg: *argRegV2, IP: metadata.String(c, metadata.RemoteIP), Cookie: cookie}))
}
func reg(c *bm.Context) {
var argReg = new(model.ArgReg)
err := c.Bind(argReg)
if err != nil {
return
}
var cookie = c.Request.Header.Get("Cookie")
c.JSON(srv.Reg(c, model.TdoReg{Arg: *argReg, IP: metadata.String(c, metadata.RemoteIP), Cookie: cookie}))
}
func byTel(c *bm.Context) {
var argByTel = new(model.ArgByTel)
err := c.Bind(argByTel)
if err != nil {
return
}
var cookie = c.Request.Header.Get("Cookie")
c.JSON(srv.ByTel(c, model.TdoByTel{Arg: *argByTel, IP: metadata.String(c, metadata.RemoteIP), Cookie: cookie}))
}
func captcha(c *bm.Context) {
c.JSON(srv.Captcha(c, metadata.String(c, metadata.RemoteIP)))
}
func sendSms(c *bm.Context) {
var sendSmsp = new(model.SendSms)
berr := c.Bind(sendSmsp)
if berr != nil {
return
}
var cookie = c.Request.Header.Get("Cookie")
err := srv.SendSms(c, model.TdoSendSms{Arg: *sendSmsp, IP: metadata.String(c, metadata.RemoteIP), Cookie: cookie})
c.JSON(nil, err)
}

View File

@@ -0,0 +1,88 @@
package http
import (
"bytes"
"crypto/md5"
"encoding/hex"
"net/url"
"sort"
"strings"
"go-common/app/service/main/passport-game/model"
"go-common/app/service/main/passport-game/service"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
)
// VerifySign verify sign.
func verifySign(c *bm.Context, s *service.Service) (res *model.App, err error) {
var (
r = c.Request
query = r.Form
)
if r.Method == "POST" {
// Give priority to sign in url query, otherwise check sign in post form.
p := c.Request.URL.Query()
if p.Get("sign") != "" {
query = p
}
}
if query.Get("ts") == "" {
err = ecode.RequestErr
return
}
appKey := query.Get("appkey")
if appKey == "" {
err = ecode.RequestErr
return
}
app, ok := s.APP(appKey)
if !ok {
err = ecode.AppKeyInvalid
return
}
secret := app.AppSecret
tmp := encodeQuery(query)
if strings.IndexByte(tmp, '+') > -1 {
tmp = strings.Replace(tmp, "+", "%20", -1)
}
mh := md5.Sum([]byte(strings.ToLower(tmp) + secret))
sign := query.Get("sign")
if hex.EncodeToString(mh[:]) != sign {
mh1 := md5.Sum([]byte(tmp + secret))
if hex.EncodeToString(mh1[:]) != sign {
err = ecode.SignCheckErr
}
}
res = app
return
}
// encodeQuery encodes the values into ``URL encoded'' form ("bar=baz&foo=quux") sorted by key.
// NOTE: sign ignored!!!
func encodeQuery(v url.Values) string {
if v == nil {
return ""
}
var buf bytes.Buffer
keys := make([]string, 0, len(v))
for k := range v {
keys = append(keys, k)
}
sort.Strings(keys)
for _, k := range keys {
if k == "sign" {
continue
}
vs := v[k]
prefix := url.QueryEscape(k) + "="
for _, v := range vs {
if buf.Len() > 0 {
buf.WriteByte('&')
}
buf.WriteString(prefix)
buf.WriteString(url.QueryEscape(v))
}
}
return buf.String()
}