Skip to content

Commit bae425f

Browse files
committed
refac
1 parent 88542af commit bae425f

3 files changed

Lines changed: 18 additions & 11 deletions

File tree

auth/auth_info_middleware.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from fastmcp.server.dependencies import get_access_token
99
from fastmcp.server.dependencies import get_http_headers
1010

11-
from auth.external_oauth_provider import SESSION_TIME
11+
from auth.external_oauth_provider import get_session_time
1212
from auth.oauth21_session_store import ensure_session_from_access_token
1313
from auth.oauth_types import WorkspaceAccessToken
1414

@@ -134,7 +134,8 @@ async def _process_request_for_auth(self, context: MiddlewareContext):
134134
session_id=f"google_oauth_{token_str[:8]}",
135135
expires_at=verified_expires
136136
if verified_expires is not None
137-
else int(time.time()) + SESSION_TIME,
137+
else int(time.time())
138+
+ get_session_time(),
138139
claims=getattr(
139140
verified_auth, "claims", {}
140141
)

auth/external_oauth_provider.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
import logging
1212
import os
1313
import time
14-
from datetime import datetime, timedelta, timezone
1514
from typing import Optional
1615

1716
from 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

5152
class 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"),

auth/google_auth.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -759,11 +759,17 @@ def get_credentials(
759759
return None
760760

761761

762-
def get_user_info(credentials: Credentials) -> Optional[Dict[str, Any]]:
762+
def get_user_info(
763+
credentials: Credentials, *, skip_valid_check: bool = False
764+
) -> Optional[Dict[str, Any]]:
763765
"""Fetches basic user profile information (requires userinfo.email scope)."""
764-
if not credentials or not credentials.valid:
765-
logger.error("Cannot get user info: Invalid or missing credentials.")
766+
if not credentials:
767+
logger.error("Cannot get user info: Missing credentials.")
768+
return None
769+
if not skip_valid_check and not credentials.valid:
770+
logger.error("Cannot get user info: Invalid credentials.")
766771
return None
772+
service = None
767773
try:
768774
# Using googleapiclient discovery to get user info
769775
# Requires 'google-api-python-client' library

0 commit comments

Comments
 (0)