123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- package controller
- import (
- "github.com/gin-gonic/gin"
- setting "icloudapp.cn/tools/config"
- "icloudapp.cn/tools/entity"
- tError "icloudapp.cn/tools/errors"
- "icloudapp.cn/tools/model"
- "icloudapp.cn/tools/service"
- "icloudapp.cn/tools/util"
- "time"
- )
- // Info 获取用户信息
- func Info(ctx *gin.Context) {
- uid := ctx.GetInt64("uid")
- if uid < 1 {
- entity.ResponseError(ctx, entity.CodeInvalidParam)
- return
- }
- mUser := model.NewUser(ctx)
- userInfo, err := mUser.Info(uid)
- if err != nil {
- entity.ResponseNormal(ctx, userInfo.Code, userInfo.Msg, nil)
- return
- }
- token := service.GetJWTTokenFromRedis(userInfo.Body.Uid)
- responseAPIData := entity.UserInfoAPIData{
- Uid: userInfo.Body.Uid,
- Username: userInfo.Body.Username,
- Type: 1,
- Status: userInfo.Body.Status,
- Token: token,
- Avatar: userInfo.Body.Avatar,
- }
- entity.ResponseSuccess(ctx, responseAPIData)
- }
- // Login 登录
- func Login(ctx *gin.Context) {
- var request entity.LoginRequest
- if err := ctx.ShouldBind(&request); err != nil {
- entity.ResponseError(ctx, entity.CodeInvalidParam)
- return
- }
- mUser := model.NewUser(ctx)
- loginInfo, err := mUser.Login(request.UserName, request.Password)
- if err != nil {
- entity.ResponseNormal(ctx, entity.CodeServerBusy, err.Error(), nil)
- return
- }
- if loginInfo.Uid < 1 {
- entity.ResponseNormal(ctx, entity.CodeDenied, "登录失败", []interface{}{})
- return
- }
- //设置cookie
- util.NewPosterCookie(ctx).SetCookie("poster_sid", loginInfo.Token, int(setting.Conf.JWTConfig.ExpireAt))
- entity.ResponseSuccess(ctx, loginInfo)
- }
- // Register 注册
- func Register(ctx *gin.Context) {
- var request entity.RegisterRequest
- if err := ctx.ShouldBind(&request); err != nil {
- entity.ResponseError(ctx, entity.CodeInvalidParam)
- return
- }
- mUser := model.NewUser(ctx)
- userInfo, err := mUser.Register(request.UserName, request.Password, request.Email)
- if err != nil {
- entity.ResponseNormal(ctx, userInfo.Code, err.Error(), entity.EmptyBodyObject())
- return
- }
- if userInfo.Code > 0 {
- entity.ResponseNormal(ctx, userInfo.Code, userInfo.Msg, entity.EmptyBodyObject())
- return
- }
- entity.ResponseSuccess(ctx, userInfo)
- }
- func ChangePassword(ctx *gin.Context) {
- var request entity.ChangePasswordRequest
- if err := ctx.ShouldBind(&request); err != nil {
- entity.ResponseError(ctx, entity.CodeInvalidParam)
- return
- }
- /*cookie, err := ctx.Cookie("poster_sid")
- if err != nil {
- entity.ResponseNormal(ctx, entity.CodeNotAllowed, err.Error(), entity.EmptyBodyObject())
- return
- }
- claims, err := service.ParseJWTToken(cookie)
- if err != nil {
- entity.ResponseNormal(ctx, entity.CodeNotAllowed, err.Error(), entity.EmptyBodyObject())
- return
- }*/
- uid := GetUID(ctx)
- mUser := model.NewUser(ctx)
- if uid == 0 {
- entity.ResponseNormal(ctx, entity.CodeDenied, "请先登录后再试", entity.EmptyBodyObject())
- return
- }
- userInfo, err := mUser.ChangePassword(uid, request.Password)
- if err != nil {
- entity.ResponseNormal(ctx, entity.CodeSystemError, err.Error(), entity.EmptyBodyObject())
- return
- }
- entity.ResponseSuccess(ctx, userInfo.Body)
- }
- func RefreshToken(ctx *gin.Context) {
- uid := GetUID(ctx)
- username := ctx.GetString("username")
- token, err := service.GenJWTToken(uid, username)
- if err != nil {
- entity.ResponseNormal(ctx, entity.CodeSystemError, err.Error(), entity.EmptyBodyObject())
- return
- }
- expire := time.Now().Add(service.JWTExpireDuration()).Unix()
- refresh := map[string]interface{}{
- "token": token,
- "expire": expire,
- "expire_at": time.Unix(expire, 0),
- }
- util.NewPosterCookie(ctx).SetCookie("poster_sid", token, int(setting.Conf.JWTConfig.ExpireAt))
- entity.ResponseSuccess(ctx, refresh)
- }
- func Logout(ctx *gin.Context) {
- //移除用户登录信息
- uid := GetUID(ctx)
- err := service.RemoveJWTToken(uid)
- if err != nil {
- entity.ResponseNormal(ctx, entity.CodeSystemError, err.Error(), entity.EmptyBodyObject())
- return
- }
- util.NewPosterCookie(ctx).SetCookie("poster_sid", "", int(setting.Conf.EncryptConfig.ExpireAt))
- }
- func ChangeEmail(ctx *gin.Context) {
- var request entity.ChangeEmailRequest
- if err := ctx.ShouldBind(&request); err != nil {
- if !HandleNext(ctx, tError.NewTError(entity.CodeInvalidParam.Code(), "参数不正确")) {
- return
- }
- }
- uid := GetUID(ctx)
- if uid == 0 {
- if !HandleNext(ctx, tError.NewTError(entity.CodeDenied.Code(), "请登录后重试")) {
- return
- }
- }
- userInfo, err := model.NewUser(ctx).ChangeEmail(uid, request.Email)
- if err != nil {
- if !HandleNext(ctx, tError.NewTError(entity.CodeSystemError.Code(), err.Error())) {
- return
- }
- }
- entity.ResponseSuccess(ctx, userInfo.Body)
- }
|