mirror of
https://github.com/XShengTech/MEGREZ.git
synced 2026-05-03 13:02:38 +00:00
[Feat] ✨ Reset Email API & Pages #15
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package users
|
||||
|
||||
import (
|
||||
"megrez/libs/utils"
|
||||
"megrez/models"
|
||||
"megrez/routers/api/v1/middleware"
|
||||
"megrez/services/database"
|
||||
@@ -9,6 +10,7 @@ import (
|
||||
)
|
||||
|
||||
type modifyReqStruct struct {
|
||||
Email *string `json:"email"`
|
||||
Password *string `json:"password"`
|
||||
Role *int `json:"role"`
|
||||
Verify *bool `json:"verify"`
|
||||
@@ -46,6 +48,12 @@ func modifyHandler(ctx iris.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
if req.Email != nil {
|
||||
if *req.Email != "" && utils.EmailFormat(*req.Email) {
|
||||
user.Email = *req.Email
|
||||
}
|
||||
}
|
||||
|
||||
if req.Password != nil {
|
||||
if *req.Password != "" {
|
||||
user.Password = user.PasswordHash(*req.Password)
|
||||
|
||||
@@ -14,6 +14,11 @@ const (
|
||||
CodeUserNotExist ResCode = 1002
|
||||
CodeRegisterRequestError ResCode = 1003
|
||||
CodeRegisterError ResCode = 1004
|
||||
CodeEmailFormatError ResCode = 1005
|
||||
CodeUserAlreadyVerified ResCode = 1006
|
||||
CodeUserVerifyInvalid ResCode = 1007
|
||||
CodePasswordNotMatch ResCode = 1008
|
||||
|
||||
CodeInternalCreateError ResCode = 1010
|
||||
CodeInstanceDeleteError ResCode = 1011
|
||||
CodeInstanceQueryError ResCode = 1012
|
||||
@@ -42,10 +47,6 @@ const (
|
||||
CodeAdminUserDeleteError ResCode = 2013
|
||||
CodeAdminUserInstanceNoEmpty ResCode = 2014
|
||||
CodeAdminUserModifyError ResCode = 2015
|
||||
|
||||
CodeUserAlreadyVerified ResCode = 3001
|
||||
CodeUserVerifyInvalid ResCode = 3002
|
||||
CodePasswordNotMatch ResCode = 3003
|
||||
)
|
||||
|
||||
var codeMsgMap = map[ResCode]string{
|
||||
@@ -60,6 +61,11 @@ var codeMsgMap = map[ResCode]string{
|
||||
CodeUserNotExist: "user not exist",
|
||||
CodeRegisterRequestError: "register request error",
|
||||
CodeRegisterError: "username or email exist",
|
||||
CodeEmailFormatError: "email format error",
|
||||
CodeUserAlreadyVerified: "user already verified",
|
||||
CodeUserVerifyInvalid: "email verify error",
|
||||
CodePasswordNotMatch: "password not match",
|
||||
|
||||
CodeInternalCreateError: "create error",
|
||||
CodeInstanceDeleteError: "delete instance error",
|
||||
CodeInstanceStatusError: "instance status error",
|
||||
@@ -88,8 +94,4 @@ var codeMsgMap = map[ResCode]string{
|
||||
CodeAdminUserDeleteError: "delete user error",
|
||||
CodeAdminUserModifyError: "modify user error",
|
||||
CodeAdminUserInstanceNoEmpty: "user instances not empty",
|
||||
|
||||
CodeUserAlreadyVerified: "user already verified",
|
||||
CodeUserVerifyInvalid: "email verify error",
|
||||
CodePasswordNotMatch: "password not match",
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package user
|
||||
|
||||
import (
|
||||
"megrez/libs/utils"
|
||||
"megrez/models"
|
||||
"megrez/routers/api/v1/middleware"
|
||||
"megrez/services/config"
|
||||
@@ -29,6 +30,11 @@ func registerHandler(ctx iris.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
if !utils.EmailFormat(userReq.Email) {
|
||||
middleware.Error(ctx, middleware.CodeEmailFormatError, iris.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
user := models.Users{
|
||||
Username: userReq.Username,
|
||||
Email: userReq.Email,
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
package user
|
||||
|
||||
import (
|
||||
"megrez/libs/utils"
|
||||
"megrez/models"
|
||||
"megrez/routers/api/v1/middleware"
|
||||
"megrez/services/database"
|
||||
|
||||
"github.com/kataras/iris/v12"
|
||||
)
|
||||
|
||||
type resetEmailStruct struct {
|
||||
Email string `json:"email"`
|
||||
}
|
||||
|
||||
func resetEmailHandler(ctx iris.Context) {
|
||||
l.SetFunction("resetEmailHandler")
|
||||
|
||||
userId, err := ctx.Values().GetInt("userId")
|
||||
if err != nil {
|
||||
middleware.Error(ctx, middleware.CodeBadRequest, iris.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
var req resetEmailStruct
|
||||
if err := ctx.ReadJSON(&req); err != nil {
|
||||
middleware.Error(ctx, middleware.CodeBadRequest, iris.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
if req.Email == "" {
|
||||
middleware.Error(ctx, middleware.CodeBadRequest, iris.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
if !utils.EmailFormat(req.Email) {
|
||||
middleware.Error(ctx, middleware.CodeEmailFormatError, iris.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
user := models.Users{
|
||||
ID: uint(userId),
|
||||
}
|
||||
result := database.DB.First(&user)
|
||||
if result.Error != nil {
|
||||
l.Error("get user error: %v", result.Error)
|
||||
middleware.Error(ctx, middleware.CodeUserNotExist, iris.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
result = database.DB.Model(&user).Update("email", req.Email).Update("verify", false)
|
||||
if result.Error != nil {
|
||||
l.Error("save user error: %v", result.Error)
|
||||
middleware.Error(ctx, middleware.CodeInternalPatchError, iris.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
middleware.Success(ctx)
|
||||
}
|
||||
@@ -25,6 +25,7 @@ func InitUser(party router.Party) {
|
||||
party.Post("/register", registerHandler)
|
||||
party.Get("/profile", middleware.AuthCheck, profileHandler)
|
||||
party.Post("/password", middleware.AuthCheck, resetPasswordHandler)
|
||||
party.Post("/email", middleware.AuthCheck, resetEmailHandler)
|
||||
party.Get("/verify/{code:string}", verifyHandler)
|
||||
party.Post("/verify", middleware.AuthCheck, verifySendHandler)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user