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,62 @@
package(default_visibility = ["//visibility:public"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_test",
"go_library",
)
go_test(
name = "go_default_test",
srcs = [
"dao_test.go",
"memcache_test.go",
"passport_test.go",
],
embed = [":go_default_library"],
rundir = ".",
tags = ["automanaged"],
deps = [
"//app/service/main/identify-game/conf:go_default_library",
"//app/service/main/identify-game/model:go_default_library",
"//vendor/github.com/smartystreets/goconvey/convey:go_default_library",
"//vendor/gopkg.in/h2non/gock.v1:go_default_library",
],
)
go_library(
name = "go_default_library",
srcs = [
"dao.go",
"memcache.go",
"passport.go",
],
importpath = "go-common/app/service/main/identify-game/dao",
tags = ["automanaged"],
visibility = ["//visibility:public"],
deps = [
"//app/service/main/identify-game/api/grpc/v1:go_default_library",
"//app/service/main/identify-game/conf:go_default_library",
"//app/service/main/identify-game/model:go_default_library",
"//library/cache/memcache: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",
"//library/stat/prom: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,61 @@
package dao
import (
"context"
"go-common/app/service/main/identify-game/conf"
"go-common/library/cache/memcache"
httpx "go-common/library/net/http/blademaster"
"go-common/library/stat/prom"
)
var (
errorsCount = prom.BusinessErrCount
cachedCount = prom.CacheHit
missedCount = prom.CacheMiss
)
// PromError prom error
func PromError(name string) {
errorsCount.Incr(name)
}
// Dao struct info of Dao
type Dao struct {
c *conf.Config
mc *memcache.Pool
client *httpx.Client
}
// New new a Dao and return.
func New(c *conf.Config) (d *Dao) {
d = &Dao{
c: c,
mc: memcache.NewPool(c.Memcache),
client: httpx.NewClient(c.HTTPClient),
}
return
}
// Close close connections of mc, redis, db.
func (d *Dao) Close() error {
return d.mc.Close()
}
// Ping ping health.
func (d *Dao) Ping(c context.Context) (err error) {
if err = d.pingMC(c); err != nil {
PromError("mc:Ping")
}
return
}
// pingMc ping memcache
func (d *Dao) pingMC(c context.Context) (err error) {
conn := d.mc.Get(c)
defer conn.Close()
item := memcache.Item{Key: "ping", Value: []byte{1}, Expiration: 100}
err = conn.Set(&item)
return
}

View File

@@ -0,0 +1,43 @@
package dao
import (
"flag"
"go-common/app/service/main/identify-game/conf"
"os"
"testing"
"gopkg.in/h2non/gock.v1"
)
var (
d *Dao
)
func TestMain(m *testing.M) {
if os.Getenv("DEPLOY_ENV") != "dev" {
flag.Set("app_id", "main.account.identify-game")
flag.Set("conf_token", "ba87634784874cad05e941bcabd55512")
flag.Set("tree_id", "identify-game")
flag.Set("tree_id", "11799")
flag.Set("conf_version", "server-1")
flag.Set("deploy_env", "uat")
flag.Set("conf_host", "config.bilibili.co")
flag.Set("conf_path", "/tmp")
flag.Set("region", "sh")
flag.Set("zone", "sh001")
}
flag.Parse()
if err := conf.Init(); err != nil {
panic(err)
}
d = New(conf.Conf)
d.client.SetTransport(gock.DefaultTransport)
m.Run()
os.Exit(0)
}
//func httpMock(method, url string) *gock.Request {
// r := gock.New(url)
// r.Method = strings.ToUpper(method)
// return r
//}

View File

@@ -0,0 +1,62 @@
package dao
import (
"context"
"go-common/app/service/main/identify-game/model"
"go-common/library/cache/memcache"
"go-common/library/log"
)
// SetAccessCache .
func (d *Dao) SetAccessCache(c context.Context, key string, res *model.AccessInfo) (err error) {
if res.Expires < 0 {
log.Error("identify-game expire error(expires:%d)", res.Expires)
return
}
item := &memcache.Item{Key: key, Object: res, Flags: memcache.FlagProtobuf, Expiration: int32(res.Expires)}
conn := d.mc.Get(c)
defer conn.Close()
if err = conn.Set(item); err != nil {
log.Error("identify-game set error(%s,%d,%v)", key, res.Expires, err)
}
return
}
// AccessCache .
func (d *Dao) AccessCache(c context.Context, key string) (res *model.AccessInfo, err error) {
conn := d.mc.Get(c)
defer conn.Close()
r, err := conn.Get(key)
if err != nil {
if err == memcache.ErrNotFound {
missedCount.Incr("access_cache")
err = nil
return
}
log.Error("conn.Get(%s) error(%v)", key, err)
return
}
res = &model.AccessInfo{}
if err = conn.Scan(r, res); err != nil {
PromError("mc:json解析失败")
log.Error("conn.Scan(%v) error(%v)", string(r.Value), err)
return
}
cachedCount.Incr("access_cache")
return
}
// DelAccessCache del cache.
func (d *Dao) DelAccessCache(c context.Context, key string) (err error) {
conn := d.mc.Get(c)
defer conn.Close()
if err = conn.Delete(key); err != nil {
if err == memcache.ErrNotFound {
err = nil
return
}
log.Error("conn.Delete(%s) error(%v)", key, err)
}
return
}

View File

@@ -0,0 +1,58 @@
package dao
import (
"context"
"go-common/app/service/main/identify-game/model"
"testing"
"github.com/smartystreets/goconvey/convey"
)
func TestDaoSetAccessCache(t *testing.T) {
var (
c = context.Background()
key = "123456"
res = &model.AccessInfo{Mid: 1, AppID: 1, Token: "ashiba", CreateAt: 123, UserID: "12", Name: "mdzz", Expires: 1577811661, Permission: "all"}
)
convey.Convey("SetAccessCache", t, func(ctx convey.C) {
err := d.SetAccessCache(c, key, res)
ctx.Convey("Then err should be nil.", func(ctx convey.C) {
ctx.So(err, convey.ShouldBeNil)
})
})
res.Expires = -1
convey.Convey("SetAccessCacheExpires", t, func(ctx convey.C) {
err := d.SetAccessCache(c, key, res)
ctx.Convey("Then err should be error.", func(ctx convey.C) {
ctx.So(err, convey.ShouldBeNil)
})
})
}
func TestDaoAccessCache(t *testing.T) {
var (
c = context.Background()
key = "123456"
)
convey.Convey("AccessCache", t, func(ctx convey.C) {
res, err := d.AccessCache(c, key)
ctx.Convey("Then err should be nil.res should not be nil.", func(ctx convey.C) {
ctx.So(err, convey.ShouldBeNil)
ctx.So(res, convey.ShouldNotBeNil)
})
})
}
func TestDaoDelAccessCache(t *testing.T) {
var (
c = context.Background()
key = "123456"
)
convey.Convey("DelAccessCache", t, func(ctx convey.C) {
err := d.DelAccessCache(c, key)
ctx.Convey("Then err should be nil.", func(ctx convey.C) {
ctx.So(err, convey.ShouldBeNil)
})
})
}

View File

@@ -0,0 +1,128 @@
package dao
import (
"context"
"fmt"
"net/url"
"strconv"
"go-common/app/service/main/identify-game/api/grpc/v1"
"go-common/app/service/main/identify-game/model"
"go-common/library/ecode"
"go-common/library/log"
"go-common/library/net/metadata"
)
const (
_createCookieURI = "/intranet/auth/createCookie/byMid"
)
// AccessToken .
func (d *Dao) AccessToken(c context.Context, accesskey, target string) (token *model.AccessInfo, err error) {
params := url.Values{}
params.Set("access_key", accesskey)
var res struct {
Code int `json:"code"`
Token *struct {
Mid string `json:"mid"`
AppID int64 `json:"appid"`
Token string `json:"access_key"`
CreateAt int64 `json:"create_at"`
UserID string `json:"userid"`
Name string `json:"uname"`
Expires string `json:"expires"`
Permission string `json:"permission"`
} `json:"access_info,omitempty"`
Data *model.AccessInfo `json:"data,omitempty"`
}
tokenURL := d.c.Dispatcher.Oauth[target]
if err = d.client.Get(c, tokenURL, metadata.String(c, metadata.RemoteIP), params, &res); err != nil {
log.Error("oauth for region %s, url(%s) error(%v)", target, tokenURL+"?"+params.Encode(), err)
return
}
if res.Code != 0 {
err = ecode.Int(res.Code)
log.Error("oauth for region %s, url(%s) error(%v)", target, tokenURL+"?"+params.Encode(), err)
return
}
if res.Token != nil {
t := res.Token
var mid int64
if mid, err = strconv.ParseInt(t.Mid, 10, 64); err != nil {
log.Error("strconv.ParseInt(%s, 10, 64) error(%v)", t.Mid, err)
return
}
var expires int64
if expires, err = strconv.ParseInt(t.Expires, 10, 64); err != nil {
log.Error("strconv.ParseInt(%s, 10, 64) error(%v)", t.Expires, err)
return
}
token = &model.AccessInfo{
Mid: mid,
AppID: t.AppID,
Token: t.Token,
CreateAt: t.CreateAt,
UserID: t.UserID,
Name: t.Name,
Expires: expires,
Permission: t.Permission,
}
} else {
token = res.Data
}
return
}
// RenewToken request passport renewToken .
func (d *Dao) RenewToken(c context.Context, accesskey, target string) (renewToken *model.RenewInfo, err error) {
params := url.Values{}
params.Set("access_key", accesskey)
var res struct {
Code int `json:"code"`
Expires int64 `json:"expires"`
Data struct {
Expires int64 `json:"expires"`
}
}
renewURL := d.c.Dispatcher.RenewToken[target]
if err = d.client.Get(c, renewURL, metadata.String(c, metadata.RemoteIP), params, &res); err != nil {
log.Error("renewtoken for region %s, url(%s) error(%v)", target, renewURL+"?"+params.Encode(), err)
return
}
if res.Code != 0 {
err = ecode.Int(res.Code)
log.Error("renewtoken for region %s, url(%s) error(%v)", target, renewURL+"?"+params.Encode(), err)
return
}
expires := res.Expires
if expires == 0 {
expires = res.Data.Expires
}
renewToken = &model.RenewInfo{
Expires: expires,
}
return
}
// GetCookieByMid get cookie by mid
func (d *Dao) GetCookieByMid(c context.Context, mid int64) (cookies *v1.CreateCookieReply, err error) {
params := url.Values{}
params.Set("mid", fmt.Sprintf("%d", mid))
URL := d.c.Passport.Host["auth"] + _createCookieURI
var res struct {
Code int `json:"code"`
Data *v1.CreateCookieReply `json:"data,omitempty"`
}
if err = d.client.Get(c, URL, metadata.String(c, metadata.RemoteIP), params, &res); err != nil {
log.Error("get cookies by mid(%d) from url(%s) error(%v)", mid, URL, err)
return
}
if res.Code != 0 {
err = ecode.Int(res.Code)
log.Error("get cookies error, mid(%d), error(%v)", mid, err)
return
}
cookies = res.Data
return
}

View File

@@ -0,0 +1,50 @@
package dao
import (
"context"
"testing"
"github.com/smartystreets/goconvey/convey"
)
func TestDaoAccessToken(t *testing.T) {
var (
c = context.Background()
accesskey = "accessKey"
target = "origin"
)
convey.Convey("AccessToken", t, func(ctx convey.C) {
token, err := d.AccessToken(c, accesskey, target)
ctx.Convey("Then err should be nil.token should not be nil.", func(ctx convey.C) {
ctx.So(err, convey.ShouldEqual, -101)
ctx.So(token, convey.ShouldBeNil)
})
})
}
func TestDaoRenewToken(t *testing.T) {
var (
c = context.Background()
accesskey = "accessKey"
target = "origin"
)
convey.Convey("RenewToken", t, func(ctx convey.C) {
renewToken, err := d.RenewToken(c, accesskey, target)
ctx.Convey("Then err should be nil.renewToken should not be nil.", func(ctx convey.C) {
ctx.So(err, convey.ShouldEqual, -101)
ctx.So(renewToken, convey.ShouldBeNil)
})
})
}
func TestGetCookieByMid(t *testing.T) {
var (
c = context.Background()
mid = int64(234112334566723432)
)
convey.Convey("GetCookieByMid", t, func(ctx convey.C) {
cookies, err := d.GetCookieByMid(c, mid)
convey.So(err, convey.ShouldNotBeNil)
convey.So(cookies, convey.ShouldBeNil)
})
}