lirony's picture
v1
960a64d
import datetime
import os
from google.oauth2 import service_account
import google.auth.transport.requests
import json
def create_credentials() -> service_account.Credentials:
secret_key_json = os.environ.get("SERVICE_ACC_KEY")
if not secret_key_json:
raise ValueError("Environment variable 'SERVICE_ACC_KEY' is not set or is empty.")
try:
service_account_info = json.loads(secret_key_json)
except (SyntaxError, ValueError) as e:
raise ValueError("Invalid service account key JSON format.") from e
return service_account.Credentials.from_service_account_info(
service_account_info,
scopes=['https://www.googleapis.com/auth/cloud-platform']
)
def refresh_credentials(credentials: service_account.Credentials) -> service_account.Credentials:
if credentials.expiry:
expiry_time = credentials.expiry.replace(tzinfo=datetime.timezone.utc)
# Calculate the time remaining until expiration
time_remaining = expiry_time - datetime.datetime.now(datetime.timezone.utc)
# Check if the token is about to expire (e.g., within 5 minutes)
if time_remaining < datetime.timedelta(minutes=5):
request = google.auth.transport.requests.Request()
credentials.refresh(request)
else:
request = google.auth.transport.requests.Request()
credentials.refresh(request)
return credentials
def get_access_token_refresh_if_needed(credentials: service_account.Credentials) -> str:
credentials = refresh_credentials(credentials)
return credentials.token