Files
login-api/app/services/session_info.go
2026-01-15 20:25:17 +01:00

50 lines
1.4 KiB
Go

package services
import (
"errors"
"fmt"
"git.secnex.io/secnex/auth-api/config"
"git.secnex.io/secnex/auth-api/repositories"
"git.secnex.io/secnex/masterlog"
"github.com/golang-jwt/jwt/v5"
"github.com/google/uuid"
)
func SessionInfo(token string) (*repositories.SessionDetails, error) {
claims, err := jwt.ParseWithClaims(token, &jwt.MapClaims{}, func(token *jwt.Token) (interface{}, error) {
return []byte(config.CONFIG.JwtSecret), nil
})
if err != nil {
return nil, err
}
if !claims.Valid {
return nil, errors.New("invalid token")
}
mapClaims := claims.Claims.(*jwt.MapClaims)
subValue, ok := (*mapClaims)["sub"]
if !ok {
return nil, errors.New("sub claim not found")
}
var sessionID string
switch v := subValue.(type) {
case string:
sessionID = v
case uuid.UUID:
sessionID = v.String()
default:
sessionID = fmt.Sprintf("%v", v)
}
masterlog.Debug("Session ID extracted from token", map[string]interface{}{"session_id": sessionID, "sub_type": fmt.Sprintf("%T", subValue)})
sessionDetails := repositories.GetSessionCache(sessionID)
if sessionDetails == nil {
masterlog.Debug("Session not found in cache", map[string]interface{}{"session_id": sessionID})
return nil, errors.New("session not found")
}
masterlog.Debug("Session details retrieved successfully", map[string]interface{}{"session_id": sessionID, "user_id": sessionDetails.UserID})
return sessionDetails, nil
}