forked from baron/baron-sso
변수 이름 수정
This commit is contained in:
@@ -19,6 +19,19 @@ import (
|
|||||||
"github.com/gofiber/fiber/v2"
|
"github.com/gofiber/fiber/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// Redis Key Prefixes
|
||||||
|
prefixSession = "enchanted_session:"
|
||||||
|
prefixToken = "enchanted_token:"
|
||||||
|
|
||||||
|
// Session Statuses
|
||||||
|
statusPending = "pending"
|
||||||
|
statusSuccess = "success"
|
||||||
|
|
||||||
|
// Durations
|
||||||
|
defaultExpiration = 5 * time.Minute
|
||||||
|
)
|
||||||
|
|
||||||
type AuthHandler struct {
|
type AuthHandler struct {
|
||||||
ProjectID string
|
ProjectID string
|
||||||
SmsService domain.SmsService
|
SmsService domain.SmsService
|
||||||
@@ -124,8 +137,8 @@ func (h *AuthHandler) InitEnchantedLink(c *fiber.Ctx) error {
|
|||||||
pendingRef := generateSecureToken(4)
|
pendingRef := generateSecureToken(4)
|
||||||
|
|
||||||
// Store in Redis
|
// Store in Redis
|
||||||
h.RedisService.Set("enchanted_session:"+pendingRef, `{"status":"pending"}`, 5*time.Minute)
|
h.RedisService.Set(prefixSession+pendingRef, fmt.Sprintf(`{"status":"%s"}`, statusPending), defaultExpiration)
|
||||||
h.RedisService.Set("enchanted_token:"+token, fmt.Sprintf(`{"pendingRef":"%s","loginId":"%s"}`, pendingRef, loginID), 5*time.Minute)
|
h.RedisService.Set(prefixToken+token, fmt.Sprintf(`{"pendingRef":"%s","loginId":"%s"}`, pendingRef, loginID), defaultExpiration)
|
||||||
|
|
||||||
// Send SMS
|
// Send SMS
|
||||||
// Frontend URL should be dynamic or env based, but restoring hardcoded/env logic
|
// Frontend URL should be dynamic or env based, but restoring hardcoded/env logic
|
||||||
@@ -155,22 +168,22 @@ func (h *AuthHandler) PollEnchantedLink(c *fiber.Ctx) error {
|
|||||||
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request body"})
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request body"})
|
||||||
}
|
}
|
||||||
|
|
||||||
val, err := h.RedisService.Get("enchanted_session:" + req.PendingRef)
|
val, err := h.RedisService.Get(prefixSession + req.PendingRef)
|
||||||
if err != nil || val == "" {
|
if err != nil || val == "" {
|
||||||
return c.JSON(fiber.Map{"status": "pending"})
|
return c.JSON(fiber.Map{"status": statusPending})
|
||||||
}
|
}
|
||||||
|
|
||||||
var data map[string]string
|
var data map[string]string
|
||||||
json.Unmarshal([]byte(val), &data)
|
json.Unmarshal([]byte(val), &data)
|
||||||
|
|
||||||
if data["status"] == "success" {
|
if data["status"] == statusSuccess {
|
||||||
return c.JSON(fiber.Map{
|
return c.JSON(fiber.Map{
|
||||||
"sessionJwt": data["jwt"],
|
"sessionJwt": data["jwt"],
|
||||||
"status": "ok",
|
"status": "ok",
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.JSON(fiber.Map{"status": "pending"})
|
return c.JSON(fiber.Map{"status": statusPending})
|
||||||
}
|
}
|
||||||
|
|
||||||
// VerifyMagicLink - Validate token and login (Restored)
|
// VerifyMagicLink - Validate token and login (Restored)
|
||||||
@@ -180,14 +193,14 @@ func (h *AuthHandler) VerifyMagicLink(c *fiber.Ctx) error {
|
|||||||
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request body"})
|
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "Invalid request body"})
|
||||||
}
|
}
|
||||||
|
|
||||||
tokenKey := "enchanted_token:" + req.Token
|
tokenKey := prefixToken + req.Token
|
||||||
val, err := h.RedisService.Get(tokenKey)
|
val, err := h.RedisService.Get(tokenKey)
|
||||||
if err != nil || val == "" {
|
if err != nil || val == "" {
|
||||||
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{"error": "Invalid or expired token"})
|
return c.Status(fiber.StatusUnauthorized).JSON(fiber.Map{"error": "Invalid or expired token"})
|
||||||
}
|
}
|
||||||
|
|
||||||
var tokenData map[string]string
|
var tokenData map[string]string
|
||||||
json.Unmarshal([]byte(val), &data := tokenData)
|
json.Unmarshal([]byte(val), &tokenData)
|
||||||
pendingRef := tokenData["pendingRef"]
|
pendingRef := tokenData["pendingRef"]
|
||||||
loginID := tokenData["loginId"]
|
loginID := tokenData["loginId"]
|
||||||
|
|
||||||
@@ -247,10 +260,10 @@ func (h *AuthHandler) VerifyMagicLink(c *fiber.Ctx) error {
|
|||||||
|
|
||||||
// Update Session in Redis for the polling client
|
// Update Session in Redis for the polling client
|
||||||
sessionData, _ := json.Marshal(map[string]string{
|
sessionData, _ := json.Marshal(map[string]string{
|
||||||
"status": "success",
|
"status": statusSuccess,
|
||||||
"jwt": sessionToken,
|
"jwt": sessionToken,
|
||||||
})
|
})
|
||||||
h.RedisService.Set("enchanted_session:"+pendingRef, string(sessionData), 5*time.Minute)
|
h.RedisService.Set(prefixSession+pendingRef, string(sessionData), defaultExpiration)
|
||||||
|
|
||||||
return c.JSON(fiber.Map{
|
return c.JSON(fiber.Map{
|
||||||
"token": sessionToken,
|
"token": sessionToken,
|
||||||
|
|||||||
Reference in New Issue
Block a user