116 lines
3.5 KiB
Go
116 lines
3.5 KiB
Go
package restricted
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
"git.ma-al.com/goc_daniel/b2b/app/service/authService"
|
|
"git.ma-al.com/goc_daniel/b2b/app/service/jwtService"
|
|
"git.ma-al.com/goc_daniel/b2b/app/utils/i18n"
|
|
"git.ma-al.com/goc_daniel/b2b/app/utils/nullable"
|
|
"git.ma-al.com/goc_daniel/b2b/app/utils/response"
|
|
"git.ma-al.com/goc_daniel/b2b/app/utils/responseErrors"
|
|
"github.com/gofiber/fiber/v3"
|
|
)
|
|
|
|
// JWTCookiesHandler for updating JWT cookies.
|
|
type JWTCookiesHandler struct {
|
|
jwtService *jwtService.JWTService
|
|
authService *authService.AuthService
|
|
}
|
|
|
|
// NewJWTCookiesHandler creates a new JWTCookiesHandler instance
|
|
func NewJWTCookiesHandler() *JWTCookiesHandler {
|
|
jwtService := jwtService.New()
|
|
authSvc := authService.NewAuthService()
|
|
return &JWTCookiesHandler{
|
|
jwtService: jwtService,
|
|
authService: authSvc,
|
|
}
|
|
}
|
|
|
|
func JWTCookiesHandlerRoutes(r fiber.Router) fiber.Router {
|
|
handler := NewJWTCookiesHandler()
|
|
|
|
r.Get("/get-languages", handler.GetLanguages)
|
|
r.Get("/get-countries", handler.GetCountries)
|
|
r.Get("/update-choice", handler.UpdateChoice)
|
|
|
|
return r
|
|
}
|
|
|
|
func (h *JWTCookiesHandler) GetLanguages(c fiber.Ctx) error {
|
|
languages, err := h.jwtService.GetLanguages()
|
|
if err != nil {
|
|
return c.Status(responseErrors.GetErrorStatus(err)).
|
|
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
|
|
}
|
|
|
|
return c.JSON(response.Make(&languages, 0, i18n.T_(c, response.Message_OK)))
|
|
}
|
|
|
|
func (h *JWTCookiesHandler) GetCountries(c fiber.Ctx) error {
|
|
countries, err := h.jwtService.GetCountriesAndCurrencies()
|
|
if err != nil {
|
|
return c.Status(responseErrors.GetErrorStatus(err)).
|
|
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
|
|
}
|
|
|
|
return c.JSON(response.Make(&countries, 0, i18n.T_(c, response.Message_OK)))
|
|
}
|
|
|
|
func (h *JWTCookiesHandler) UpdateChoice(c fiber.Ctx) error {
|
|
// Get user ID from JWT claims in context (set by auth middleware)
|
|
claims, ok := c.Locals("jwt_claims").(*authService.JWTClaims)
|
|
if !ok || claims == nil {
|
|
return c.Status(fiber.StatusUnauthorized).
|
|
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrNotAuthenticated)))
|
|
}
|
|
|
|
// Parse language and country_id from query params
|
|
langIDStr := c.Query("lang_id")
|
|
countryIDStr := c.Query("country_id")
|
|
|
|
var langID uint
|
|
if langIDStr != "" {
|
|
parsedID, err := strconv.ParseUint(langIDStr, 10, 32)
|
|
if err != nil {
|
|
return c.Status(fiber.StatusBadRequest).
|
|
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadLangID)))
|
|
}
|
|
langID = uint(parsedID)
|
|
} else {
|
|
langID = 0
|
|
}
|
|
|
|
var countryID uint
|
|
if countryIDStr != "" {
|
|
parsedID, err := strconv.ParseUint(countryIDStr, 10, 32)
|
|
if err != nil {
|
|
return c.Status(fiber.StatusBadRequest).
|
|
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, responseErrors.ErrBadCountryID)))
|
|
}
|
|
countryID = uint(parsedID)
|
|
} else {
|
|
countryID = 0
|
|
}
|
|
|
|
// Update choice and get new token using AuthService
|
|
newToken, err := h.authService.UpdateChoice(claims.UserID, langID, countryID)
|
|
if err != nil {
|
|
return c.Status(responseErrors.GetErrorStatus(err)).
|
|
JSON(response.Make(nullable.GetNil(""), 0, responseErrors.GetErrorCode(c, err)))
|
|
}
|
|
|
|
// Set the new JWT cookie
|
|
cookie := new(fiber.Cookie)
|
|
cookie.Name = "jwt_token"
|
|
cookie.Value = newToken
|
|
cookie.HTTPOnly = true
|
|
cookie.Secure = true
|
|
cookie.SameSite = fiber.CookieSameSiteLaxMode
|
|
|
|
c.Cookie(cookie)
|
|
|
|
return c.JSON(response.Make(&fiber.Map{"token": newToken}, 0, i18n.T_(c, response.Message_OK)))
|
|
}
|