129 lines
3.6 KiB
Go
129 lines
3.6 KiB
Go
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
|
|
}
|