1111import logging
1212import os
1313import time
14- from datetime import datetime , timedelta , timezone
1514from typing import Optional
1615
1716from starlette .routing import Route
@@ -45,7 +44,9 @@ def _get_session_time() -> int:
4544 return max (value , 1 )
4645
4746
48- SESSION_TIME = _get_session_time ()
47+ def get_session_time () -> int :
48+ """Return the configured session time in seconds."""
49+ return _get_session_time ()
4950
5051
5152class ExternalOAuthProvider (GoogleProvider ):
@@ -98,19 +99,18 @@ async def verify_token(self, token: str) -> Optional[AccessToken]:
9899 from auth .google_auth import get_user_info
99100
100101 # Create minimal Credentials object for userinfo API call
101- # expiry must be set so credentials.valid returns True
102102 credentials = Credentials (
103103 token = token ,
104104 token_uri = "https://oauth2.googleapis.com/token" ,
105105 client_id = self ._client_id ,
106106 client_secret = self ._client_secret ,
107- expiry = datetime .now (timezone .utc ) + timedelta (seconds = SESSION_TIME ),
108107 )
109108
110109 # Validate token by calling userinfo API
111- user_info = get_user_info (credentials )
110+ user_info = get_user_info (credentials , skip_valid_check = True )
112111
113112 if user_info and user_info .get ("email" ):
113+ session_time = get_session_time ()
114114 # Token is valid - create AccessToken object
115115 logger .info (
116116 f"Validated external access token for: { user_info ['email' ]} "
@@ -120,7 +120,7 @@ async def verify_token(self, token: str) -> Optional[AccessToken]:
120120 access_token = WorkspaceAccessToken (
121121 token = token ,
122122 scopes = scope_list ,
123- expires_at = int (time .time ()) + SESSION_TIME ,
123+ expires_at = int (time .time ()) + session_time ,
124124 claims = {
125125 "email" : user_info ["email" ],
126126 "sub" : user_info .get ("id" ),
0 commit comments