diff --git a/handlers/google_auth.go b/handlers/google_auth.go index 3ad2193..d496c3c 100644 --- a/handlers/google_auth.go +++ b/handlers/google_auth.go @@ -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") diff --git a/handlers/jwt.go b/handlers/jwt.go index 91db13b..e1537cf 100644 --- a/handlers/jwt.go +++ b/handlers/jwt.go @@ -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) diff --git a/helper/fetch_user_id.go b/helper/fetch_user_id.go new file mode 100644 index 0000000..9a928c8 --- /dev/null +++ b/helper/fetch_user_id.go @@ -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 +} diff --git a/models/http.go b/models/http.go index 3ce251c..12b04c6 100644 --- a/models/http.go +++ b/models/http.go @@ -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"` +} diff --git a/models/jwt.go b/models/jwt.go index 45a3567..0b5a74d 100644 --- a/models/jwt.go +++ b/models/jwt.go @@ -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