Files

102 lines
3.0 KiB
Go
Raw Normal View History

2021-09-30 12:09:45 +08:00
package account
import (
2022-02-11 11:02:29 +08:00
"SciencesServer/app/api/enterprise/model"
model2 "SciencesServer/app/common/model"
2021-09-30 12:09:45 +08:00
"SciencesServer/app/service"
2021-12-03 11:32:26 +08:00
"SciencesServer/app/session"
2021-09-30 12:09:45 +08:00
"SciencesServer/config"
"SciencesServer/utils"
2022-02-11 11:02:29 +08:00
"errors"
2021-12-03 11:32:26 +08:00
"fmt"
"time"
2021-09-30 12:09:45 +08:00
)
type Instance struct{}
type InstanceHandle func() *Instance
type InstanceLoginCallback func(params *InstanceLoginParams) *InstanceLoginReturn
type (
InstanceLoginParams struct {
2021-12-01 14:12:23 +08:00
UID uint64
2021-12-03 11:50:57 +08:00
Avatar, Name, Mobile string
2022-02-15 17:19:23 +08:00
Vip uint64
2021-12-22 14:53:45 +08:00
VipStatus bool
VipDeadline time.Time
Currency float64
2021-09-30 12:09:45 +08:00
Identity, SelectIdentity int
2022-02-11 11:02:29 +08:00
Status model2.AccountStatusKind
2021-09-30 12:09:45 +08:00
}
InstanceLoginReturn struct {
Token string `json:"token"`
TokenEffectTime int `json:"token_effect_time"`
2021-09-30 12:09:45 +08:00
}
)
func (c *Instance) Login() InstanceLoginCallback {
return func(params *InstanceLoginParams) *InstanceLoginReturn {
2022-01-17 09:57:57 +08:00
token := utils.JWTEncrypt(utils.StringToInt(config.SystemConfig[config.SysTokenEffectTime]), map[string]interface{}{
2021-12-03 11:32:26 +08:00
config.TokenForUID: fmt.Sprintf("%d", params.UID),
2021-09-30 12:09:45 +08:00
})
2021-12-03 11:32:26 +08:00
_session := session.NewEnterprise()
_session.Token = token
_session.UID = params.UID
2021-12-03 11:50:57 +08:00
_session.Avatar = params.Avatar
2021-12-03 11:32:26 +08:00
_session.Name = params.Name
_session.Mobile = params.Mobile
2021-12-22 14:53:45 +08:00
_session.Vip = int(params.Vip)
_session.VipStatus = params.VipStatus
_session.VipDeadline = params.VipDeadline
_session.Currency = params.Currency
2021-12-03 11:32:26 +08:00
_session.Identity = params.Identity
_session.SelectIdentity = params.SelectIdentity
2022-01-27 14:50:52 +08:00
service.Publish(config.EventForRedisHashProduce, config.RedisKeyForAccountEnterprise, _session.GetStringUID(), _session)
2021-09-30 12:09:45 +08:00
2022-01-17 09:57:57 +08:00
return &InstanceLoginReturn{Token: token, TokenEffectTime: utils.StringToInt(config.SystemConfig[config.SysTokenEffectTime])}
2021-09-30 12:09:45 +08:00
}
}
2022-02-11 11:02:29 +08:00
// ResetPassword 重置密码
func (c *Instance) ResetPassword(token, password, repeatPass string) error {
tokenInfo := utils.JWTDecrypt(token)
if tokenInfo == nil || len(tokenInfo) <= 0 {
return errors.New("操作错误Token无效")
}
expTimestamp := utils.StringToInt64(fmt.Sprintf("%v", tokenInfo["exp"]))
expTime := time.Unix(expTimestamp, 0)
ok := expTime.After(time.Now())
if !ok {
return errors.New("操作错误Token过期")
}
if password != repeatPass {
return errors.New("操作错误,两次密码不一致")
}
mUserInstance := model.NewUserInstance()
isExist, err := model2.FirstField(mUserInstance.UserInstance, []string{"id", "name", "mobile", "status"},
model2.NewWhere("mobile", tokenInfo["mobile"]))
if err != nil {
return err
} else if !isExist {
return errors.New("操作错误,系统中未找到此手机用户")
}
mUserInstance.Password = password
mUserInstance.SetPasswordAttribute()
return model2.Updates(mUserInstance.UserInstance, map[string]interface{}{
"password": mUserInstance.Password, "salt": mUserInstance.Salt, "updated_at": time.Now(),
})
}
2021-09-30 12:09:45 +08:00
func NewInstance() InstanceHandle {
return func() *Instance {
return &Instance{}
}
}