This commit is contained in:
2025-12-15 10:39:13 +08:00
parent adb0f59b23
commit 44f7ddc1e3
5 changed files with 43 additions and 9 deletions
+1 -5
View File
@@ -127,11 +127,7 @@ func checkUserAuthorization(userID, accessToken string) (bool, string, error) {
defer resp.Body.Close()
// Parse response
var authResp struct {
Allowed bool `json:"allowed"`
RedirectRoute string `json:"redirect_route,omitempty"`
Message string `json:"message,omitempty"`
}
var authResp models.AuthorizationResponse
if err := json.NewDecoder(resp.Body).Decode(&authResp); err != nil {
helper.LogError(err, "Failed to decode authorization response")
+23 -4
View File
@@ -107,7 +107,7 @@ func GenerateTokens(email, userAgent, ipAddress string) (string, string, error)
}
}
accessToken, err := generateAccessToken(email, sessionID)
accessToken, err := generateAccessToken(email, sessionID, userID)
if err != nil {
return "", "", fmt.Errorf(errFormatWithContext, errMsgFailedToGenerateAccessToken, err)
}
@@ -116,11 +116,18 @@ func GenerateTokens(email, userAgent, ipAddress string) (string, string, error)
return accessToken, refreshToken, nil
}
func generateAccessToken(email, sessionID string) (string, error) {
func generateAccessToken(email, sessionID, userID string) (string, error) {
AccessTokenExpiration := os.Getenv("AccessTokenExpiration")
if AccessTokenExpiration == "" {
log.Println("AccessTokenExpiration not set, defaulting to 45 minutes")
AccessTokenExpiration = "45"
}
expirationTime := time.Now().Add(45 * time.Minute).Unix()
claims := &models.AccessToken{
Email: email,
UserID: userID,
SessionID: sessionID,
Exp: expirationTime,
RegisteredClaims: jwt.RegisteredClaims{
@@ -256,7 +263,13 @@ func RefreshAccessToken(refreshTokenString, userAgent, ipAddress string) (string
helper.LogInfo(fmt.Sprintf("Generating new access token for email: %s, session: %s", email, session.ID))
accessToken, err := generateAccessToken(email, session.ID)
userID, err := helper.FetchUserIDFromDB(email)
if err != nil {
helper.LogError(err, fmt.Sprintf("Failed to fetch user ID for email %s during refresh", email))
userID = session.UserID // Fallback to session's user ID
}
accessToken, err := generateAccessToken(email, session.ID, userID)
if err != nil {
helper.LogError(err, "Failed to generate access token during refresh")
return "", fmt.Errorf("failed to generate access token: %w", err)
@@ -395,7 +408,13 @@ func RefreshAccessTokenWithEmailFallback(refreshTokenString, userAgent, ipAddres
helper.LogInfo(fmt.Sprintf("Generating new access token for email: %s, session: %s", email, session.ID))
accessToken, err := generateAccessToken(email, session.ID)
userID, err := helper.FetchUserIDFromDB(email)
if err != nil {
helper.LogError(err, fmt.Sprintf("Failed to fetch user ID for email %s during refresh", email))
userID = session.UserID // Fallback to session's user ID
}
accessToken, err := generateAccessToken(email, session.ID, userID)
if err != nil {
helper.LogError(err, "Failed to generate access token during refresh")
return "", fmt.Errorf("failed to generate access token: %w", err)
+11
View File
@@ -0,0 +1,11 @@
package helper
import "authentication/services"
func FetchUserIDFromDB(email string) (string, error) {
UserID, err := services.GetUserID(email)
if err != nil {
return "", err
}
return UserID, nil
}
+7
View File
@@ -24,3 +24,10 @@ func (rw *ResponseWriter) Write(b []byte) (int, error) {
rw.Size += size
return size, err
}
// AuthorizationResponse represents the response from the authorization microservice
type AuthorizationResponse struct {
Allowed bool `json:"allowed"`
RedirectRoute string `json:"redirect_route,omitempty"`
Message string `json:"message,omitempty"`
}
+1
View File
@@ -8,6 +8,7 @@ import (
type AccessToken struct {
Email string `json:"email"`
UserID string `json:"user_id"`
SessionID string `json:"session_id"`
Exp int64 `json:"exp"`
jwt.RegisteredClaims