78 lines
2.0 KiB
Go
78 lines
2.0 KiB
Go
package auth
|
|
|
|
import (
|
|
"cargo-erp-backend/internal/handlers/dto"
|
|
"cargo-erp-backend/internal/middleware"
|
|
"cargo-erp-backend/internal/usecases"
|
|
"cargo-erp-backend/pkg/helpers"
|
|
"cargo-erp-backend/pkg/response"
|
|
"context"
|
|
"fmt"
|
|
"net/http"
|
|
"strconv"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
type AuthHandlerInterface interface {
|
|
Router()
|
|
}
|
|
type AuthHandler struct {
|
|
Helper helpers.HelperInterface
|
|
Engine *gin.Engine
|
|
}
|
|
|
|
func NewAuthHandler(helper helpers.HelperInterface, e *gin.Engine) AuthHandlerInterface {
|
|
return &AuthHandler{
|
|
Helper: helper,
|
|
Engine: e,
|
|
}
|
|
}
|
|
func (h *AuthHandler) Router() {
|
|
h.Engine.POST("login", h.Login)
|
|
h.Engine.POST("logout", middleware.NewAuthMiddleware(h.Helper).Check(), h.Logout)
|
|
}
|
|
func (h *AuthHandler) Login(c *gin.Context) {
|
|
u := usecases.NewAuthUsecase(h.Helper)
|
|
var parameter dto.AuthRequest
|
|
if err := c.BindJSON(¶meter); err != nil {
|
|
response.Error(c, http.StatusBadRequest, err.Error())
|
|
return
|
|
}
|
|
token, err := u.Login(parameter.Email, parameter.Password)
|
|
if err != nil {
|
|
response.Error(c, http.StatusUnauthorized, err.Error())
|
|
return
|
|
}
|
|
cookieName := fmt.Sprintf("%v", h.Helper.Config().Get("cookie.name"))
|
|
exp_time := fmt.Sprintf("%v", h.Helper.Config().Get("cookie.expiry_time"))
|
|
t, _ := strconv.Atoi(exp_time)
|
|
c.SetCookie(
|
|
cookieName, // name
|
|
token, // value
|
|
t, // max age: 30 menit
|
|
"/", // path
|
|
"", // domain
|
|
false, // secure
|
|
true, // httpOnly
|
|
)
|
|
|
|
response.Success(c, map[string]interface{}{"token": token})
|
|
}
|
|
func (h *AuthHandler) Logout(c *gin.Context) {
|
|
auth_key := c.MustGet("auth_key")
|
|
ctx := context.Background()
|
|
h.Helper.GetRedis("master").Del(ctx, fmt.Sprintf("%v", auth_key))
|
|
cookieName := fmt.Sprintf("%v", h.Helper.Config().Get("cookie.name"))
|
|
c.SetCookie(
|
|
cookieName, // name
|
|
"", // value
|
|
-3600, // max age: 30 menit
|
|
"/", // path
|
|
"", // domain
|
|
false, // secure
|
|
true, // httpOnly
|
|
)
|
|
response.Success(c, map[string]interface{}{"message": "You are logged out"})
|
|
}
|