You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
525 lines
14 KiB
525 lines
14 KiB
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{} |
|
|
|
}
|
|
|