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 := GetUID(ctx) 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) }