308 lines
6.8 KiB
Go
308 lines
6.8 KiB
Go
package controllers
|
|
|
|
import (
|
|
"fmt"
|
|
"html/template"
|
|
"merchant/datas"
|
|
"merchant/models/merchant"
|
|
"merchant/models/road"
|
|
"merchant/service"
|
|
"merchant/sys/enum"
|
|
"merchant/utils/mfa"
|
|
"merchant/utils/response"
|
|
"regexp"
|
|
"strings"
|
|
)
|
|
|
|
type UserInfo struct {
|
|
KeepSession
|
|
}
|
|
|
|
func (c *UserInfo) ShowModifyUserInfoUI() {
|
|
us := c.GetSession(enum.UserSession)
|
|
u := us.(merchant.MerchantInfo)
|
|
|
|
ranMd5 := encrypt.EncodeMd5([]byte(pubMethod.RandomString(46)))
|
|
c.Ctx.SetCookie(enum.UserCookie, ranMd5, enum.CookieExpireTime)
|
|
c.Ctx.SetSecureCookie(ranMd5, enum.UserCookie, ranMd5, enum.CookieExpireTime)
|
|
c.SetSession(enum.UserCookie, ranMd5)
|
|
|
|
c.Data["userName"] = u.MerchantName
|
|
c.TplName = "modify_userInfo.html"
|
|
}
|
|
|
|
func (c *UserInfo) ShowTotpUI() {
|
|
us := c.GetSession(enum.UserSession)
|
|
u := us.(merchant.MerchantInfo)
|
|
if u.MerchantUid == "" {
|
|
c.Data["json"] = datas.BaseDataJSON{
|
|
Code: -1,
|
|
Msg: "当前用户不存在",
|
|
}
|
|
_ = c.ServeJSON()
|
|
return
|
|
}
|
|
otp, err := mfa.GetOtp(u.LoginAccount, fmt.Sprintf("商户 %s", u.MerchantName))
|
|
if err != nil {
|
|
c.Data["json"] = datas.BaseDataJSON{
|
|
Code: -1,
|
|
Msg: "当前用户不存在",
|
|
}
|
|
_ = c.ServeJSON()
|
|
return
|
|
}
|
|
c.Data["showTotp"] = u.OtpSecret == ""
|
|
c.Data["totpImage"] = template.URL(otp.QrImage)
|
|
c.Data["totpSecret"] = otp.Secret
|
|
c.TplName = "totp.html"
|
|
}
|
|
|
|
// ModifyUserInfo 修改用户信息
|
|
func (c *UserInfo) ModifyUserInfo() {
|
|
or_pwd := strings.TrimSpace(c.GetString("or_pwd"))
|
|
new_pwd := strings.TrimSpace(c.GetString("new_pwd"))
|
|
confirm_pwd := strings.TrimSpace(c.GetString("confirm_pwd"))
|
|
|
|
us := c.GetSession(enum.UserSession)
|
|
u := us.(merchant.MerchantInfo)
|
|
|
|
var (
|
|
msg = enum.FailedString
|
|
flag = enum.FailedFlag
|
|
|
|
md bool
|
|
ud bool
|
|
pwdMd5 string
|
|
)
|
|
|
|
if or_pwd == "" ||
|
|
new_pwd == "" ||
|
|
confirm_pwd == "" {
|
|
msg = "密码不能为空!"
|
|
goto stopRun
|
|
}
|
|
|
|
pwdMd5 = encrypt.EncodeMd5([]byte(or_pwd))
|
|
if strings.Compare(strings.ToUpper(pwdMd5), u.LoginPassword) != 0 {
|
|
msg = "原始密码错误!"
|
|
}
|
|
|
|
md, _ = regexp.MatchString(enum.PasswordReg, new_pwd)
|
|
if !md {
|
|
msg = "密码只能输入6-20个以字母开头、可带数字、“_”、“.”的字串!"
|
|
goto stopRun
|
|
}
|
|
|
|
md, _ = regexp.MatchString(enum.PasswordReg, confirm_pwd)
|
|
if !md {
|
|
msg = "密码只能输入6-20个以字母开头、可带数字、“_”、“.”的字串!"
|
|
goto stopRun
|
|
}
|
|
|
|
if strings.Compare(new_pwd, confirm_pwd) != 0 {
|
|
msg = "两次密码不匹配!"
|
|
goto stopRun
|
|
}
|
|
|
|
u.LoginPassword = strings.ToUpper(encrypt.EncodeMd5([]byte(new_pwd)))
|
|
ud = merchant.UpdateMerchant(u)
|
|
if ud {
|
|
msg = enum.SuccessString
|
|
flag = enum.SuccessFlag
|
|
|
|
// 退出重新登录
|
|
c.DelSession(enum.UserSession)
|
|
}
|
|
|
|
stopRun:
|
|
c.Data["json"] = pubMethod.JsonFormat(flag, "", msg, "")
|
|
c.ServeJSON()
|
|
c.StopRun()
|
|
}
|
|
|
|
// ConfirmOriginPwd 验证原始密码
|
|
func (c *UserInfo) ConfirmOriginPwd() {
|
|
ori := strings.TrimSpace(c.GetString("c"))
|
|
us := c.GetSession(enum.UserSession)
|
|
u := us.(merchant.MerchantInfo)
|
|
var (
|
|
msg = enum.FailedString
|
|
flag = enum.FailedFlag
|
|
)
|
|
pwdMd5 := encrypt.EncodeMd5([]byte(ori))
|
|
if strings.Compare(strings.ToUpper(pwdMd5), u.LoginPassword) != 0 {
|
|
msg = "原始密码错误!"
|
|
} else {
|
|
flag = enum.SuccessFlag
|
|
}
|
|
c.Data["json"] = pubMethod.JsonFormat(flag, "", msg, "")
|
|
c.ServeJSON()
|
|
c.StopRun()
|
|
}
|
|
|
|
// ShowUserInfoUI 展示用户信息
|
|
func (c *UserInfo) ShowUserInfoUI() {
|
|
us := c.GetSession(enum.UserSession)
|
|
u := us.(merchant.MerchantInfo)
|
|
c.Data["userName"] = u.MerchantName
|
|
c.Data["mobile"] = u.LoginAccount
|
|
c.Data["email"] = u.LoginAccount
|
|
c.Data["riskDay"] = "1"
|
|
//c.Data["key"] = uPayConfig.PayKey
|
|
//c.Data["secret"] = uPayConfig.PaySecret
|
|
c.TplName = "show_userInfo.html"
|
|
}
|
|
|
|
func (c *UserInfo) SaveTotp() {
|
|
code := c.GetString("totpCode")
|
|
secret := c.GetString("totpSecret")
|
|
if code == "" || secret == "" {
|
|
c.Data["json"] = datas.BaseDataJSON{
|
|
Code: -1,
|
|
Msg: "未填写验证码",
|
|
}
|
|
_ = c.ServeJSON()
|
|
return
|
|
}
|
|
us := c.GetSession(enum.UserSession)
|
|
u := us.(merchant.MerchantInfo)
|
|
ok := mfa.ValidCode(code, secret)
|
|
if !ok {
|
|
c.Data["json"] = datas.KeyDataJSON{
|
|
Code: -1,
|
|
Msg: "验证码验证错误",
|
|
}
|
|
_ = c.ServeJSON()
|
|
return
|
|
}
|
|
err2 := merchant.UpdateOtpByUserID(u.MerchantUid, secret)
|
|
if err2 != nil {
|
|
c.Data["json"] = datas.BaseDataJSON{
|
|
Code: -1,
|
|
Msg: "更新二步验证失败",
|
|
}
|
|
_ = c.ServeJSON()
|
|
return
|
|
}
|
|
c.Data["json"] = datas.KeyDataJSON{
|
|
Code: 0,
|
|
Msg: "success",
|
|
}
|
|
u.OtpSecret = secret
|
|
_ = c.SetSession(enum.UserSession, u)
|
|
_ = c.ServeJSON()
|
|
}
|
|
|
|
func (c *UserInfo) ResetTotp() {
|
|
us := c.GetSession(enum.UserSession)
|
|
u := us.(merchant.MerchantInfo)
|
|
code := c.GetString("totpCode")
|
|
ok := mfa.ValidCode(code, u.OtpSecret)
|
|
if !ok {
|
|
c.Data["json"] = datas.KeyDataJSON{
|
|
Code: -1,
|
|
Msg: "验证码错误",
|
|
}
|
|
_ = c.ServeJSON()
|
|
return
|
|
}
|
|
err := merchant.UpdateOtpByUserID(u.MerchantUid, "")
|
|
if err != nil {
|
|
c.Data["json"] = datas.BaseDataJSON{
|
|
Code: -1,
|
|
Msg: "更新二步验证失败",
|
|
}
|
|
_ = c.ServeJSON()
|
|
return
|
|
}
|
|
c.Data["json"] = datas.KeyDataJSON{
|
|
Code: 0,
|
|
Msg: "success",
|
|
}
|
|
u.OtpSecret = ""
|
|
_ = c.SetSession(enum.UserSession, u)
|
|
_ = c.ServeJSON()
|
|
}
|
|
|
|
func (c *UserInfo) QueryAllowedRoad() {
|
|
us := c.GetSession(enum.UserSession)
|
|
u := us.(merchant.MerchantInfo)
|
|
if u.Id == 0 {
|
|
c.Data["json"] = response.CommonRes{
|
|
Msg: "获取用户失败",
|
|
Code: -1,
|
|
}
|
|
_ = c.ServeJSON()
|
|
return
|
|
}
|
|
result := service.QueryAllowedRoad(u.MerchantUid)
|
|
c.Data["json"] = response.CommonResWithData{
|
|
CommonRes: response.CommonRes{
|
|
Msg: "成功",
|
|
Code: 0,
|
|
},
|
|
Data: result,
|
|
}
|
|
_ = c.ServeJSON()
|
|
}
|
|
|
|
// QueryAllowedMM 获取允许的面值
|
|
func (c *UserInfo) QueryAllowedMM() {
|
|
roadCode := c.GetString("roadCode")
|
|
if roadCode == "" {
|
|
c.Data["json"] = response.CommonRes{
|
|
Msg: "请填写通道编码",
|
|
Code: -1,
|
|
}
|
|
_ = c.ServeJSON()
|
|
return
|
|
}
|
|
roadPool := road.GetRoadByProductCode(roadCode)
|
|
if roadPool.Id == 0 {
|
|
c.Data["json"] = response.CommonRes{
|
|
Msg: "当前通道不存在",
|
|
Code: -1,
|
|
}
|
|
_ = c.ServeJSON()
|
|
return
|
|
}
|
|
us := c.GetSession(enum.UserSession)
|
|
u := us.(merchant.MerchantInfo)
|
|
if u.Id == 0 {
|
|
c.Data["json"] = response.CommonRes{
|
|
Msg: "获取用户失败",
|
|
Code: -1,
|
|
}
|
|
_ = c.ServeJSON()
|
|
return
|
|
}
|
|
result := service.QueryAllowedDeployInfoMM(u.MerchantUid, roadPool.RoadUid)
|
|
returnList := make([]struct {
|
|
ShowLabel float64 `json:"showLabel"`
|
|
}, 0)
|
|
for _, margin := range result {
|
|
isInList := false
|
|
for _, s := range returnList {
|
|
if s.ShowLabel == margin.ShowLabel {
|
|
// 存在
|
|
isInList = true
|
|
}
|
|
}
|
|
if !isInList {
|
|
returnList = append(returnList, struct {
|
|
ShowLabel float64 `json:"showLabel"`
|
|
}{
|
|
ShowLabel: margin.ShowLabel,
|
|
})
|
|
}
|
|
}
|
|
c.Data["json"] = response.CommonResWithData{
|
|
CommonRes: response.CommonRes{
|
|
Msg: "成功",
|
|
Code: 0,
|
|
},
|
|
Data: returnList,
|
|
}
|
|
_ = c.ServeJSON()
|
|
}
|