wip
This commit is contained in:
123
mangezmieux-backend/internal/users/handler.go
Normal file
123
mangezmieux-backend/internal/users/handler.go
Normal file
@@ -0,0 +1,123 @@
|
||||
package users
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/go-playground/validator/v10"
|
||||
"mangezmieux-backend/internal/logger"
|
||||
"mangezmieux-backend/internal/middleware"
|
||||
"mangezmieux-backend/internal/responses"
|
||||
"mangezmieux-backend/internal/users/model"
|
||||
"mangezmieux-backend/internal/users/service"
|
||||
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
coreValidator "mangezmieux-backend/internal/validator"
|
||||
)
|
||||
|
||||
type Handler struct {
|
||||
Service *service.Service
|
||||
Validator *validator.Validate
|
||||
}
|
||||
|
||||
func NewHandler(service *service.Service, validator *validator.Validate) *Handler {
|
||||
return &Handler{
|
||||
Service: service,
|
||||
Validator: validator,
|
||||
}
|
||||
}
|
||||
|
||||
func (h Handler) CreateUser(context *gin.Context) {
|
||||
userEditable := model.UserEditable{}
|
||||
if err := context.BindJSON(&userEditable); err != nil {
|
||||
responses.JSONError(context.Writer, coreValidator.NewDataValidationAPIError(err))
|
||||
return
|
||||
}
|
||||
user, err := h.Service.CreateUser(&userEditable)
|
||||
if err != nil {
|
||||
logger.GetLogger().Error(err)
|
||||
var apiError *responses.APIError
|
||||
if errors.As(err, &apiError) {
|
||||
responses.JSONError(context.Writer, *apiError)
|
||||
return
|
||||
}
|
||||
responses.JSONErrorWithMessage(context.Writer, responses.ErrInternalServer, err.Error())
|
||||
return
|
||||
}
|
||||
responses.JSON(context.Writer, http.StatusCreated, user)
|
||||
}
|
||||
|
||||
func (h Handler) Login(context *gin.Context) {
|
||||
userLoginRequest := model.UserLoginRequest{}
|
||||
if err := context.BindJSON(&userLoginRequest); err != nil {
|
||||
responses.JSONError(context.Writer, coreValidator.NewDataValidationAPIError(err))
|
||||
return
|
||||
}
|
||||
token, err := h.Service.Login(userLoginRequest)
|
||||
if err != nil {
|
||||
logger.GetLogger().Error(err)
|
||||
var apiError *responses.APIError
|
||||
if errors.As(err, &apiError) {
|
||||
responses.JSONError(context.Writer, *apiError)
|
||||
return
|
||||
}
|
||||
responses.JSONErrorWithMessage(context.Writer, responses.ErrInternalServer, err.Error())
|
||||
return
|
||||
}
|
||||
context.SetCookie("token", token, 10, "/", "localhost", true, false)
|
||||
userLoginResponse := model.UserLoginResponse{
|
||||
AccessToken: token,
|
||||
TokenType: "Bearer",
|
||||
}
|
||||
responses.JSON(context.Writer, http.StatusOK, userLoginResponse)
|
||||
}
|
||||
|
||||
func (h Handler) IntrospectToken(context *gin.Context) {
|
||||
authorization := context.Request.Header.Get("Authorization")
|
||||
splitToken := strings.Split(authorization, "Bearer ")
|
||||
reqToken := splitToken[1]
|
||||
user, err := h.Service.Introspect(reqToken)
|
||||
if err != nil {
|
||||
logger.GetLogger().Error(err)
|
||||
var apiError *responses.APIError
|
||||
if errors.As(err, &apiError) {
|
||||
responses.JSONError(context.Writer, *apiError)
|
||||
return
|
||||
}
|
||||
responses.JSONErrorWithMessage(context.Writer, responses.ErrInternalServer, err.Error())
|
||||
return
|
||||
|
||||
}
|
||||
responses.JSON(context.Writer, http.StatusOK, user)
|
||||
}
|
||||
|
||||
func (h Handler) RefreshToken(context *gin.Context) {
|
||||
authorization := context.Request.Header.Get("Authorization")
|
||||
splitToken := strings.Split(authorization, "Bearer ")
|
||||
reqToken := splitToken[1]
|
||||
|
||||
refreshedToken, err := h.Service.Refresh(reqToken)
|
||||
if err != nil {
|
||||
logger.GetLogger().Error(err)
|
||||
var apiError *responses.APIError
|
||||
if errors.As(err, &apiError) {
|
||||
responses.JSONError(context.Writer, *apiError)
|
||||
return
|
||||
}
|
||||
responses.JSONErrorWithMessage(context.Writer, responses.ErrInternalServer, err.Error())
|
||||
return
|
||||
|
||||
}
|
||||
context.SetCookie("token", refreshedToken, 10, "/", "localhost", true, false)
|
||||
}
|
||||
|
||||
func (h Handler) GetMe(context *gin.Context) {
|
||||
usr, exists := context.Get(middleware.CtxUser)
|
||||
if !exists {
|
||||
responses.JSONErrorWithMessage(context.Writer, responses.ErrInternalServer, "User not found in context")
|
||||
return
|
||||
}
|
||||
responses.JSON(context.Writer, http.StatusOK, usr)
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user