Merge branch 'main' of ssh://git.ma-al.com:8822/goc_daniel/b2b into translate
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"git.ma-al.com/goc_daniel/b2b/app/config"
|
||||
@@ -60,10 +61,53 @@ func AuthMiddleware() fiber.Handler {
|
||||
})
|
||||
}
|
||||
|
||||
// Set user in context
|
||||
c.Locals(constdata.USER_LOCALES_NAME, user.ToSession())
|
||||
c.Locals(constdata.USER_LOCALES_ID, user.ID)
|
||||
c.Locals(constdata.LANG_LOCALES_ID, user.LangID)
|
||||
// Create locale. LangID is overwritten by auth Token
|
||||
var userLocale model.UserLocale
|
||||
userLocale.OriginalUser = user
|
||||
|
||||
// Check if target user is present
|
||||
targetUserIDAttribute := c.Query("target_user_id")
|
||||
|
||||
if targetUserIDAttribute == "" {
|
||||
userLocale.User = user
|
||||
c.Locals(constdata.USER_LOCALE, &userLocale)
|
||||
|
||||
return c.Next()
|
||||
}
|
||||
|
||||
// We now populate the target user
|
||||
if user.Role != model.RoleAdmin {
|
||||
return c.Status(fiber.StatusForbidden).JSON(fiber.Map{
|
||||
"error": "admin access required",
|
||||
})
|
||||
}
|
||||
|
||||
targetUserID, err := strconv.Atoi(targetUserIDAttribute)
|
||||
if err != nil {
|
||||
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
||||
"error": "invalid target user id attribute",
|
||||
})
|
||||
}
|
||||
|
||||
// to verify target user, we use the same functionality as for verifying original user
|
||||
// Get target user from database
|
||||
user, err = authService.GetUserByID(uint(targetUserID))
|
||||
if err != nil {
|
||||
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{
|
||||
"error": "target user not found",
|
||||
})
|
||||
}
|
||||
|
||||
// Check if target user is active
|
||||
if !user.IsActive {
|
||||
return c.Status(fiber.StatusForbidden).JSON(fiber.Map{
|
||||
"error": "target user account is inactive",
|
||||
})
|
||||
}
|
||||
|
||||
userLocale.User = user
|
||||
c.Locals(constdata.USER_LOCALE, &userLocale)
|
||||
|
||||
return c.Next()
|
||||
}
|
||||
}
|
||||
@@ -95,24 +139,6 @@ func RequireAdmin() fiber.Handler {
|
||||
}
|
||||
}
|
||||
|
||||
// GetUserID extracts user ID from context
|
||||
func GetUserID(c fiber.Ctx) uint {
|
||||
userID, ok := c.Locals("userID").(uint)
|
||||
if !ok {
|
||||
return 0
|
||||
}
|
||||
return userID
|
||||
}
|
||||
|
||||
// GetUser extracts user from context
|
||||
func GetUser(c fiber.Ctx) *model.UserSession {
|
||||
user, ok := c.Locals("user").(*model.UserSession)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
return user
|
||||
}
|
||||
|
||||
// GetConfig returns the app config
|
||||
func GetConfig() *config.Config {
|
||||
return config.Get()
|
||||
|
||||
@@ -4,7 +4,9 @@ import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"git.ma-al.com/goc_daniel/b2b/app/model"
|
||||
"git.ma-al.com/goc_daniel/b2b/app/service/langsService"
|
||||
constdata "git.ma-al.com/goc_daniel/b2b/app/utils/const_data"
|
||||
"github.com/gofiber/fiber/v3"
|
||||
)
|
||||
|
||||
@@ -22,12 +24,8 @@ func LanguageMiddleware() fiber.Handler {
|
||||
if id, err := strconv.ParseUint(langIDStr, 10, 32); err == nil {
|
||||
langID = uint(id)
|
||||
if langID > 0 {
|
||||
lang, err := langService.GetLanguageById(langID)
|
||||
if err == nil {
|
||||
c.Locals("langID", langID)
|
||||
c.Locals("lang", lang)
|
||||
return c.Next()
|
||||
}
|
||||
c.Locals(constdata.USER_LOCALE, returnNewLocale(langID))
|
||||
return c.Next()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -38,12 +36,8 @@ func LanguageMiddleware() fiber.Handler {
|
||||
if id, err := strconv.ParseUint(cookieLang, 10, 32); err == nil {
|
||||
langID = uint(id)
|
||||
if langID > 0 {
|
||||
lang, err := langService.GetLanguageById(langID)
|
||||
if err == nil {
|
||||
c.Locals("langID", langID)
|
||||
c.Locals("lang", lang)
|
||||
return c.Next()
|
||||
}
|
||||
c.Locals(constdata.USER_LOCALE, returnNewLocale(langID))
|
||||
return c.Next()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -57,8 +51,7 @@ func LanguageMiddleware() fiber.Handler {
|
||||
lang, err := langService.GetLanguageByISOCode(isoCode)
|
||||
if err == nil && lang != nil {
|
||||
langID = uint(lang.ID)
|
||||
c.Locals("langID", langID)
|
||||
c.Locals("lang", lang)
|
||||
c.Locals(constdata.USER_LOCALE, returnNewLocale(langID))
|
||||
return c.Next()
|
||||
}
|
||||
}
|
||||
@@ -68,8 +61,7 @@ func LanguageMiddleware() fiber.Handler {
|
||||
defaultLang, err := langService.GetDefaultLanguage()
|
||||
if err == nil && defaultLang != nil {
|
||||
langID = uint(defaultLang.ID)
|
||||
c.Locals("langID", langID)
|
||||
c.Locals("lang", defaultLang)
|
||||
c.Locals(constdata.USER_LOCALE, returnNewLocale(langID))
|
||||
}
|
||||
|
||||
return c.Next()
|
||||
@@ -104,11 +96,9 @@ func parseAcceptLanguage(header string) string {
|
||||
return strings.ToLower(first)
|
||||
}
|
||||
|
||||
// GetLanguageID extracts language ID from context
|
||||
func GetLanguageID(c fiber.Ctx) uint {
|
||||
langID, ok := c.Locals("langID").(uint)
|
||||
if !ok {
|
||||
return 0
|
||||
}
|
||||
return langID
|
||||
func returnNewLocale(lang_id uint) *model.UserLocale {
|
||||
newLocale := model.UserLocale{}
|
||||
newLocale.OriginalUser = &model.Customer{}
|
||||
newLocale.OriginalUser.LangID = lang_id
|
||||
return &newLocale
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user