Spaces:
Paused
Paused
| """ | |
| One-time OAuth authorization for Google Calendar access. | |
| Run this ONCE to authorize Maya to access Google Calendar. | |
| """ | |
| import os | |
| import sys | |
| import json | |
| from pathlib import Path | |
| SCOPES = ['https://www.googleapis.com/auth/calendar'] | |
| CREDENTIALS_FILE = Path("credentials/google_oauth_credentials.json") | |
| TOKEN_FILE = Path("credentials/google_token.json") | |
| def authorize(): | |
| print("\n[LOCK] Google Calendar Authorization for Maya") | |
| print("=" * 50) | |
| if not CREDENTIALS_FILE.exists(): | |
| print(f"\n[X] Credentials file not found: {CREDENTIALS_FILE}") | |
| sys.exit(1) | |
| from google_auth_oauthlib.flow import InstalledAppFlow | |
| from google.oauth2.credentials import Credentials | |
| from google.auth.transport.requests import Request | |
| creds = None | |
| # Check for existing valid token | |
| if TOKEN_FILE.exists(): | |
| creds = Credentials.from_authorized_user_file(str(TOKEN_FILE), SCOPES) | |
| if creds and creds.valid: | |
| print("\n[OK] Already authorized! Token is valid.") | |
| _print_calendar_info(creds) | |
| return | |
| if creds and creds.expired and creds.refresh_token: | |
| print("\n[REFRESH] Token expired -- refreshing...") | |
| creds.refresh(Request()) | |
| _save_token(creds) | |
| print("[OK] Token refreshed successfully.") | |
| return | |
| # Need fresh authorization | |
| print("\n[LIST] Starting OAuth authorization flow...") | |
| print(" This will open your browser.") | |
| print(" Log in with: rudybyte.code@gmail.com\n") | |
| flow = InstalledAppFlow.from_client_secrets_file( | |
| str(CREDENTIALS_FILE), SCOPES | |
| ) | |
| try: | |
| # Use a specific port to match our redirect URI | |
| creds = flow.run_local_server(port=8090, open_browser=True) | |
| except Exception as e: | |
| print(f"\n[X] Error: {e}") | |
| print("\n[!] Try running this command in your local terminal manually if the browser doesn't open.") | |
| creds = flow.run_local_server(port=8090, open_browser=False) | |
| _save_token(creds) | |
| print("\n[OK] Authorization successful!") | |
| print(f" Token saved to: {TOKEN_FILE}") | |
| print("\n IMPORTANT: I will now save these to your .env file.") | |
| _print_calendar_info(creds) | |
| def _save_token(creds): | |
| TOKEN_FILE.parent.mkdir(parents=True, exist_ok=True) | |
| with open(TOKEN_FILE, 'w') as f: | |
| f.write(creds.to_json()) | |
| def _print_calendar_info(creds): | |
| try: | |
| from googleapiclient.discovery import build | |
| service = build('calendar', 'v3', credentials=creds) | |
| cal = service.calendarList().get(calendarId='primary').execute() | |
| print(f"\n [CAL] Calendar authorized for: {cal.get('summary', 'Unknown')}") | |
| except Exception as e: | |
| print(f"\n (Could not fetch calendar info: {e})") | |
| if __name__ == "__main__": | |
| authorize() | |