Files
kami_merchant/controllers/user_info.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()
}