526 lines
14 KiB
Go
526 lines
14 KiB
Go
package model
|
|
|
|
import (
|
|
"crypto/hmac"
|
|
"crypto/sha1"
|
|
"encoding/base64"
|
|
"encoding/json"
|
|
"fmt"
|
|
"math/rand"
|
|
"net/url"
|
|
"strings"
|
|
gotime "time"
|
|
|
|
"go-common/app/service/main/account-recovery/conf"
|
|
"go-common/library/log"
|
|
"go-common/library/time"
|
|
)
|
|
|
|
// QueryInfoReq query mid info req
|
|
type QueryInfoReq struct {
|
|
QType string `form:"q_type" validate:"required"`
|
|
QValue string `form:"q_value" validate:"required"`
|
|
CToken string `form:"token" validate:"required"`
|
|
Code string `form:"code" validate:"required"`
|
|
}
|
|
|
|
// QueryInfoResp query info response
|
|
type QueryInfoResp struct {
|
|
Status int64 `json:"status"`
|
|
UID int64 `json:"uid"`
|
|
}
|
|
|
|
// MIDInfo mid info data
|
|
type MIDInfo struct {
|
|
Mids string `json:"mids"`
|
|
Count int64 `json:"count"`
|
|
}
|
|
|
|
// User user info data
|
|
type User struct {
|
|
UserID string `json:"userid"`
|
|
Pwd string `json:"pwd"`
|
|
}
|
|
|
|
// Check check safe: Flag , reg: CheckInfo
|
|
type Check struct {
|
|
CheckInfo string `json:"checkInfo"`
|
|
}
|
|
|
|
// UserInfoReq 用户申诉提交信息
|
|
type UserInfoReq struct {
|
|
LoginAddrs string `json:"login_addrs" form:"login_addrs" validate:"required,min=1"`
|
|
RegTime time.Time `json:"reg_time" form:"reg_time" validate:"required"`
|
|
RegType int8 `json:"reg_type" form:"reg_type" validate:"required"`
|
|
RegAddr string `json:"reg_addr" form:"reg_addr" validate:"required"`
|
|
Unames string `json:"unames" form:"unames"`
|
|
Pwds string `json:"pwds" form:"pwds" validate:"required"`
|
|
Phones string `json:"phones" form:"phones"`
|
|
Emails string `json:"emails" form:"emails"`
|
|
SafeQuestion int8 `json:"safe_question" form:"safe_question" default:"99"`
|
|
SafeAnswer string `json:"safe_answer" form:"safe_answer"`
|
|
CardID string `json:"card_id" form:"card_id"`
|
|
CardType int8 `json:"card_type" form:"card_type" default:"99"`
|
|
Captcha string `json:"captcha" form:"captcha" validate:"required"`
|
|
LinkMail string `json:"link_mail" form:"link_mail" validate:"required,email"`
|
|
Mid int64 `json:"mid" form:"mid" validate:"required,min=1"`
|
|
Business string `json:"business" form:"business" default:"account"`
|
|
BusinessMap map[string]string
|
|
Files []string `json:"files" form:"files,split"`
|
|
LastSucCount int64 //成功找回的总次数
|
|
LastSucCTime time.Time //上次成功找回的提交时间
|
|
}
|
|
|
|
// DBAccountRecoveryAddit is
|
|
type DBAccountRecoveryAddit struct {
|
|
Rid int64 `json:"rid"`
|
|
Files string `json:"files"`
|
|
Extra string `json:"extra"`
|
|
Ctime time.Time `json:"ctime"`
|
|
Mtime time.Time `json:"mtime"`
|
|
}
|
|
|
|
// AsRecoveryAddit parse DBAccountRecoveryAddit to RecoveryAddit
|
|
func (dbAddit *DBAccountRecoveryAddit) AsRecoveryAddit() *RecoveryAddit {
|
|
addit := &RecoveryAddit{
|
|
Files: []string{},
|
|
Extra: map[string]interface{}{},
|
|
}
|
|
if err := json.Unmarshal([]byte(dbAddit.Extra), &addit.Extra); err != nil {
|
|
log.Error("QueryRecoveryAddit: json.Unmarshal(%s) error(%v)", addit.Extra, err)
|
|
}
|
|
addit.Files = strings.Split(dbAddit.Files, ",")
|
|
for i, v := range addit.Files {
|
|
addit.Files[i] = BuildFileURL(v)
|
|
}
|
|
|
|
return addit
|
|
}
|
|
|
|
// BuildFileURL build bfs download url
|
|
func BuildFileURL(raw string) string {
|
|
if raw == "" {
|
|
return ""
|
|
}
|
|
ori, err := url.Parse(raw)
|
|
if err != nil {
|
|
return raw
|
|
}
|
|
if strings.HasPrefix(ori.Path, "/bfs/account") {
|
|
//println("filename=====",bfsFilename(ori.Path, "account"))
|
|
token := authorize(conf.Conf.Bfs.Key, conf.Conf.Bfs.Secret, "GET", "account", bfsFilename(ori.Path, "account"), gotime.Now().Unix())
|
|
p := url.Values{}
|
|
p.Set("token", token)
|
|
ori.RawQuery = p.Encode()
|
|
}
|
|
if ori.Hostname() == "" {
|
|
ori.Host = fmt.Sprintf("i%d.hdslb.com", rand.Int63n(3))
|
|
ori.Scheme = "http"
|
|
}
|
|
return ori.String()
|
|
}
|
|
|
|
// authorize returns authorization for upload file to bfs
|
|
func authorize(key, secret, method, bucket, filename string, expire int64) string {
|
|
content := fmt.Sprintf("%s\n%s\n%s\n%d\n", method, bucket, filename, expire)
|
|
mac := hmac.New(sha1.New, []byte(secret))
|
|
mac.Write([]byte(content))
|
|
signature := base64.StdEncoding.EncodeToString(mac.Sum(nil))
|
|
return fmt.Sprintf("%s:%s:%d", key, signature, expire)
|
|
}
|
|
|
|
func bfsFilename(path string, bucket string) string {
|
|
return strings.TrimLeft(path, fmt.Sprintf("/bfs/%s", bucket))
|
|
}
|
|
|
|
// QueryRecoveryInfoReq 信息查询请求
|
|
type QueryRecoveryInfoReq struct {
|
|
// FirstRid int64 `json:"first_rid" form:"first_rid"`
|
|
// LastRid int64 `json:"last_rid" form:"last_rid"`
|
|
// RID account recovery info id
|
|
RID int64 `json:"rid" form:"rid"`
|
|
// UID user id
|
|
UID int64 `json:"uid" form:"uid"`
|
|
// Status account recovery status
|
|
// status value, example: default "0", thought "1", reject "2"
|
|
Status *int64 `json:"status" form:"-"`
|
|
// Game is game user
|
|
// game value, example: "1"/"0"
|
|
Game *int64 `json:"game" form:"-"`
|
|
// Size default size 10
|
|
Size int64 `json:"size" form:"size"`
|
|
StartTime time.Time `json:"start_time" form:"start_time"`
|
|
EndTime time.Time `json:"end_time" form:"end_time"`
|
|
IsAdvanced bool `json:"-"`
|
|
// CurrPage int64 `form:"curr_page"`
|
|
Page int64 `form:"page"`
|
|
Bussiness string `json:"-"`
|
|
}
|
|
|
|
// DBRecoveryInfoParams DBRecoveryInfoParams
|
|
type DBRecoveryInfoParams struct {
|
|
ExistGame bool
|
|
ExistStatus bool
|
|
ExistMid bool
|
|
Mid int64
|
|
Game int64
|
|
Status int64
|
|
FirstRid int64
|
|
LastRid int64
|
|
Size int64
|
|
StartTime time.Time
|
|
EndTime time.Time
|
|
SubNum int64
|
|
CurrPage int64
|
|
}
|
|
|
|
// AccountRecoveryInfo account recovery db info
|
|
type AccountRecoveryInfo struct {
|
|
Rid int64
|
|
Mid int64
|
|
UserType int64
|
|
Status int64
|
|
LoginAddr string
|
|
UNames string
|
|
RegTime time.Time `json:"-"`
|
|
RegTimeStr string `json:"RegTime"`
|
|
RegType int64 `json:"-"`
|
|
RegTypeStr string `json:"RegType"`
|
|
RegAddr string
|
|
Pwd string
|
|
Phones string
|
|
Emails string
|
|
SafeQuestion int64 `json:"-"`
|
|
SafeQuestionStr string `json:"SafeQuestion"`
|
|
SafeAnswer string
|
|
CardType int64 `json:"-"`
|
|
CardTypeStr string `json:"CardType"`
|
|
CardID string
|
|
SysLoginAddr string
|
|
SysReg string
|
|
SysUNames string
|
|
SysPwds string
|
|
SysPhones string
|
|
SysEmails string
|
|
SysSafe string
|
|
SysCard string
|
|
LinkEmail string
|
|
Operator string
|
|
OptTime time.Time
|
|
Remark string
|
|
CTime time.Time
|
|
MTime time.Time
|
|
Bussiness string
|
|
LastSucCount int64
|
|
LastSucCTime time.Time
|
|
}
|
|
|
|
// RecoveryResInfo RecoveryResInfo
|
|
type RecoveryResInfo struct {
|
|
AccountRecoveryInfo
|
|
RecoverySuccess
|
|
RecoveryAddit
|
|
LastSuccessData
|
|
}
|
|
|
|
// RecoverySuccess recovery success info
|
|
type RecoverySuccess struct {
|
|
SuccessMID int64 `json:"-"`
|
|
SuccessCount int64
|
|
FirstSuccessTime time.Time
|
|
LastSuccessTime time.Time
|
|
}
|
|
|
|
// LastSuccessData last recovery success info
|
|
type LastSuccessData struct {
|
|
LastApplyMID int64 `json:"-"`
|
|
LastApplyTime time.Time
|
|
}
|
|
|
|
// RecoveryAddit common business field
|
|
type RecoveryAddit struct {
|
|
Files []string
|
|
Extra map[string]interface{}
|
|
}
|
|
|
|
// MultiQueryRes MultiQueryRes
|
|
type MultiQueryRes struct {
|
|
Info []*RecoveryResInfo
|
|
Page *Page
|
|
}
|
|
|
|
// UserInfoRes response of userInfo
|
|
type UserInfoRes struct {
|
|
LoginAddrs string `json:"login_addrs"`
|
|
Unames string `json:"unames"`
|
|
Pwds string `json:"pwds"`
|
|
Phones string `json:"phones"`
|
|
Emails string `json:"emails"`
|
|
|
|
RegInfo *RegInfo `json:"reg_info"`
|
|
SafeInfo *SafeInfo `json:"safe_info"`
|
|
CardInfo *CardInfo `json:"card_info"`
|
|
}
|
|
|
|
// RegInfo reg info
|
|
type RegInfo struct {
|
|
RegTime time.Time `json:"reg_time"`
|
|
RegType int64 `json:"reg_type"`
|
|
RegAddr string `json:"reg_addr"`
|
|
}
|
|
|
|
// SafeInfo safe info
|
|
type SafeInfo struct {
|
|
SafeQuestion int8 `json:"safe_question"`
|
|
SafeAnswer string `json:"safe_answer"`
|
|
}
|
|
|
|
// CardInfo card info
|
|
type CardInfo struct {
|
|
CardID string `json:"card_id"`
|
|
CardType int8 `json:"card_type"`
|
|
}
|
|
|
|
// SysInfo sys check info
|
|
type SysInfo struct {
|
|
SysLoginAddrs string `json:"sys_login_addrs"`
|
|
SysReg string `json:"sys_reg"`
|
|
SysUNames string `json:"sys_nick"`
|
|
SysPwds string `json:"sys_pwds"`
|
|
SysPhones string `json:"sys_phones"`
|
|
SysEmails string `json:"sys_emails"`
|
|
SysSafe string `json:"sys_safe"`
|
|
SysCard string `json:"sys_card"`
|
|
}
|
|
|
|
// OperInfo operate info
|
|
type OperInfo struct {
|
|
Operator string `json:"operator"`
|
|
OperTime time.Time `json:"oper_time"`
|
|
}
|
|
|
|
// AppealRes 信息查询返回结果
|
|
type AppealRes struct {
|
|
Rid int64 `json:"rid"`
|
|
Mid int64 `json:"uid"`
|
|
Ctime time.Time `json:"ctime"`
|
|
Count int64 `json:"count"`
|
|
|
|
LinkEmail string `json:"link_email"`
|
|
Remark string `json:"remark"`
|
|
Status int64 `json:"status"`
|
|
|
|
UserInfoRes *UserInfoRes `json:"user_info"`
|
|
SysInfo *SysInfo `json:"sys_info"`
|
|
OperInfo *OperInfo `json:"oper_info"`
|
|
}
|
|
|
|
// Page page
|
|
type Page struct {
|
|
//Num int64 `json:"num"`
|
|
Size int64 `json:"size"`
|
|
Total int64 `json:"total"`
|
|
}
|
|
|
|
//JudgeReq appeal judge
|
|
type JudgeReq struct {
|
|
Status int64 `form:"status" validate:"required"`
|
|
Rid int64 `form:"rid" validate:"required"`
|
|
Operator string `form:"operator" validate:"required"`
|
|
OptTime time.Time `form:"opt_time" validate:"required"`
|
|
Remark string `form:"remark"`
|
|
}
|
|
|
|
//BatchJudgeReq appeal judge
|
|
type BatchJudgeReq struct {
|
|
Status int64 `form:"status" validate:"required"`
|
|
Rids string `form:"rids" validate:"required"`
|
|
Operator string `form:"operator" validate:"required"`
|
|
OptTime time.Time `form:"opt_time" validate:"required"`
|
|
Remark string `form:"remark"`
|
|
RidsAry []int64
|
|
}
|
|
|
|
// CommonResq common response
|
|
type CommonResq struct {
|
|
Code int64 `json:"code"`
|
|
TS int64 `json:"ts"`
|
|
Message string `json:"message"`
|
|
}
|
|
|
|
// Token captcha token
|
|
type Token struct {
|
|
Token string `json:"token"`
|
|
URL string `json:"url"`
|
|
}
|
|
|
|
// TokenResq response of capthca
|
|
type TokenResq struct {
|
|
CommonResq
|
|
Data *Token `json:"data"`
|
|
}
|
|
|
|
// Game data of game
|
|
type Game struct {
|
|
GameBaseID int `json:"id"`
|
|
GameName string `json:"name"`
|
|
LastLogin string `json:"lastLogin"`
|
|
}
|
|
|
|
// GameListRes game list res
|
|
type GameListRes struct {
|
|
Mid int64 `json:"mid"`
|
|
Items []*Game `json:"items"`
|
|
}
|
|
|
|
// UserBindLogRes UserBindLogRes
|
|
type UserBindLogRes struct {
|
|
Page Page `json:"page"`
|
|
Result []*UserBindLog `json:"result"`
|
|
}
|
|
|
|
// UserBindLog UserBindLog
|
|
type UserBindLog struct {
|
|
Mid int64 `json:"mid"`
|
|
Phone string `json:"phone"`
|
|
Email string `json:"email"`
|
|
Time string `json:"time"`
|
|
}
|
|
|
|
// BatchAppeal some of appeal info
|
|
type BatchAppeal struct {
|
|
Rid string
|
|
Mid string
|
|
LinkMail string
|
|
Ctime time.Time
|
|
}
|
|
|
|
// NickNameReq request es params
|
|
type NickNameReq struct {
|
|
Mid int64 `form:"mid"`
|
|
Page int `form:"page"`
|
|
Size int `form:"size"`
|
|
From int64 `form:"from"`
|
|
To int64 `form:"to"`
|
|
}
|
|
|
|
// NickNameLogEs query field form es
|
|
type NickNameLogEs struct {
|
|
OldName string `json:"str_0"`
|
|
NewName string `json:"str_1"`
|
|
}
|
|
|
|
// NickESRes the result of es query
|
|
type NickESRes struct {
|
|
Page Page `json:"page"`
|
|
Result []*NickNameLogEs `json:"result"`
|
|
}
|
|
|
|
// NickNameLogRes make NickESRes result become we need
|
|
type NickNameLogRes struct {
|
|
Page Page `json:"page"`
|
|
Result []*NickNameInfo `json:"result"`
|
|
}
|
|
|
|
// NickNameInfo nickName
|
|
type NickNameInfo struct {
|
|
OldName string `json:"old_name"`
|
|
NewName string `json:"new_name"`
|
|
}
|
|
|
|
// CheckEmailPhone check email and phone
|
|
type CheckEmailPhone struct {
|
|
PhonesCheck string
|
|
EmailCheck string
|
|
}
|
|
|
|
//CaptchaMailReq get mail captcha
|
|
type CaptchaMailReq struct {
|
|
Mid int64 `form:"mid" validate:"required"`
|
|
LinkMail string `form:"link_mail" validate:"required"`
|
|
}
|
|
|
|
// AddrInfo AddrInfo
|
|
type AddrInfo struct {
|
|
OftenAddrs string `json:"oftenAddrs"`
|
|
}
|
|
|
|
// SendMailReq send mail according to status and rid
|
|
type SendMailReq struct {
|
|
RID int64 `form:"rid" validate:"required"`
|
|
Status int64 `form:"status" validate:"required"`
|
|
}
|
|
|
|
// LoginIPInfo login ip info
|
|
type LoginIPInfo struct {
|
|
LoginIP string `json:"loginip"`
|
|
}
|
|
|
|
// UserInfo user detail info
|
|
type UserInfo struct {
|
|
Mid int64 `json:"mid"`
|
|
Phone string `json:"telphone"`
|
|
Email string `json:"email"`
|
|
JoinTime time.Time `json:"join_time"`
|
|
}
|
|
|
|
// UserBindLogReq UserBindLogReq
|
|
type UserBindLogReq struct {
|
|
// Action value : telBindLog or emailBindLog
|
|
Action string `form:"action"`
|
|
Mid int64 `form:"mid"`
|
|
//Query search tel or email
|
|
Query string `form:"query"`
|
|
Page int `form:"page"`
|
|
Size int `form:"size"`
|
|
From int64 `form:"from"`
|
|
To int64 `form:"to"`
|
|
}
|
|
|
|
// EsRes EsRes
|
|
type EsRes struct {
|
|
Page Page `json:"page"`
|
|
Result []*UserActLogEs `json:"result"`
|
|
}
|
|
|
|
// UserActLogEs UserActLogEs
|
|
type UserActLogEs struct {
|
|
Mid int64 `json:"mid"`
|
|
Str0 string `json:"str_0"`
|
|
ExtraData string `json:"extra_data"`
|
|
CTime string `json:"ctime"`
|
|
}
|
|
|
|
const (
|
|
// VerifyMail verify mail
|
|
VerifyMail = 1 //验证码邮件
|
|
// CommitMail commit mail
|
|
CommitMail = 2 //申诉信息提交邮件
|
|
// RejectMail reject mail
|
|
RejectMail = 3 //账号申诉驳回邮件
|
|
// AgreeMail agree mail
|
|
AgreeMail = 4 //账号审核通过邮件
|
|
|
|
// DOAgree agree this appeal
|
|
DOAgree = 1 //申诉通过
|
|
// DOReject reject this appeal
|
|
DOReject = 2 //申诉驳回
|
|
|
|
// HIDEALL hide all
|
|
HIDEALL = "*********"
|
|
|
|
// BizGame game
|
|
BizGame = "game"
|
|
)
|
|
|
|
// BusinessExtraArgs business args
|
|
func BusinessExtraArgs(business string) []string {
|
|
switch business {
|
|
case BizGame:
|
|
return []string{"GamePlay", "GameArea", "GameRoleCTime", "GameRoleCreatePhoneType", "GameUsedPhoneType", "GameNames"}
|
|
|
|
}
|
|
return []string{}
|
|
|
|
}
|