diff --git a/cmd/backend/server/handlers/user_change_password.go b/cmd/backend/server/handlers/user_change_password.go new file mode 100644 index 0000000..87179a9 --- /dev/null +++ b/cmd/backend/server/handlers/user_change_password.go @@ -0,0 +1,36 @@ +package handlers + +import ( + "backend/cmd/backend/server/middleware" + "backend/internal/core/services" + httpserver "backend/internal/http_server" + "backend/pkg/logger" + "context" + "fmt" + + "github.com/gin-gonic/gin" +) + +type inputChangePassword struct { + OldPassword string `json:"oldPassword"` + NewPassword string `json:"newPassword"` +} + +func NewUserChangePasswordHandler(log logger.Logger, userService services.UserService) gin.HandlerFunc { + return httpserver.WrapGin(log, + func(ctx context.Context, input inputChangePassword) (interface{}, error) { + ginCtx, ok := ctx.(*gin.Context) + if !ok { + return nil, fmt.Errorf("can not cast context") + } + user := middleware.GetUserFromRequest(ginCtx) + + err := userService.ChangePassword(ctx, user.Id, input.OldPassword, input.NewPassword) + if err != nil { + return nil, err + } + + return nil, nil + }, + ) +} diff --git a/cmd/backend/server/middleware/auth.go b/cmd/backend/server/middleware/auth.go index a2f6a6b..b5b94d2 100644 --- a/cmd/backend/server/middleware/auth.go +++ b/cmd/backend/server/middleware/auth.go @@ -1,12 +1,20 @@ package middleware import ( + "backend/internal/core/models" "backend/internal/core/services" "fmt" "github.com/gin-gonic/gin" ) +func GetUserFromRequest(c *gin.Context) *models.UserDTO { + if user, ok := c.Get("user"); ok { + return user.(*models.UserDTO) + } + return nil +} + func NewAuthMiddleware(userService services.UserService) gin.HandlerFunc { return func(ctx *gin.Context) { token := ctx.GetHeader("X-Auth") diff --git a/cmd/backend/server/server.go b/cmd/backend/server/server.go index b4c6ee8..d5071a9 100644 --- a/cmd/backend/server/server.go +++ b/cmd/backend/server/server.go @@ -3,7 +3,6 @@ package server import ( "backend/cmd/backend/server/handlers" "backend/cmd/backend/server/middleware" - "backend/cmd/backend/server/utils" "backend/internal/core/services" httpserver "backend/internal/http_server" "backend/internal/integrations" @@ -49,17 +48,11 @@ func NewServer(opts NewServerOpts) *httpserver.Server { userGroup.POST("/create", handlers.NewUserCreateHandler(opts.Logger, opts.UserService)) userGroup.POST("/login", handlers.NewUserLoginHandler(opts.Logger, opts.UserService)) userGroup.POST("/send-verify", handlers.NewUserSendVerifyEmailHandler(opts.Logger, opts.UserService)) + userGroup.POST("/send-restore-password", handlers.NewUserSendRestorePasswordHandler(opts.Logger, opts.UserService)) + userGroup.POST("/restore-password", handlers.NewUserRestorePasswordHandler(opts.Logger, opts.UserService)) - } - - dummyGroup := v1.Group("/dummy") - dummyGroup.Use(middleware.NewAuthMiddleware(opts.UserService)) - { - dummyGroup.GET("", handlers.NewDummyHandler()) - dummyGroup.POST("/forgot-password", func(c *gin.Context) { - user := utils.GetUserFromRequest(c) - opts.UserService.SendEmailForgotPassword(c, user.Id) - }) + userGroup.Use(middleware.NewAuthMiddleware(opts.UserService)) + userGroup.POST("/change-password", handlers.NewUserChangePasswordHandler(opts.Logger, opts.UserService)) } return httpserver.New( diff --git a/cmd/backend/server/utils/user.go b/cmd/backend/server/utils/user.go deleted file mode 100644 index ebc8db3..0000000 --- a/cmd/backend/server/utils/user.go +++ /dev/null @@ -1,14 +0,0 @@ -package utils - -import ( - "backend/internal/core/models" - - "github.com/gin-gonic/gin" -) - -func GetUserFromRequest(c *gin.Context) *models.UserDTO { - if user, ok := c.Get("user"); ok { - return user.(*models.UserDTO) - } - return nil -}