#!/usr/bin/env python3 """ Simple token generation with automatic port selection """ import os import json from google.oauth2.credentials import Credentials from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request def get_token(): """Get refresh token with automatic port selection""" print("šŸ” Getting Google Drive Token...") try: SCOPES = ['https://www.googleapis.com/auth/drive.file'] creds = None # Check if token.json exists if os.path.exists('token.json'): print("šŸ“ Found existing token.json") creds = Credentials.from_authorized_user_file('token.json', SCOPES) # If no valid credentials, request authorization if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: print("šŸ”„ Refreshing expired token...") creds.refresh(Request()) else: print("🌐 Starting OAuth flow...") flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', SCOPES) # Let it choose an available port automatically creds = flow.run_local_server(port=0, open_browser=True) # Save credentials with open('token.json', 'w') as token: token.write(creds.to_json()) print("šŸ’¾ Token saved!") # Get refresh token refresh_token = creds.refresh_token if refresh_token: print("\nāœ… SUCCESS!") print(f"šŸ”‘ Refresh Token: {refresh_token}") # Show all credentials with open('credentials.json', 'r') as f: creds_data = json.load(f) if 'web' in creds_data: client_id = creds_data['web']['client_id'] client_secret = creds_data['web']['client_secret'] print("\nšŸ“‹ Add these to your HF Space secrets:") print(f"GOOGLE_CLIENT_ID = {client_id}") print(f"GOOGLE_CLIENT_SECRET = {client_secret}") print(f"GOOGLE_REFRESH_TOKEN = {refresh_token}") return True else: print("āŒ No refresh token found") return False except Exception as e: print(f"āŒ Error: {e}") return False if __name__ == "__main__": get_token()