bilibili-backup/app/service/main/account-recovery/model/model.go
2019-04-22 02:59:20 +00:00

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{}
}