whung99
feat: deploy Oppy with Google API integration
0d37119
"""CLI script to authenticate Google account (manual code paste)."""
import json
from pathlib import Path
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import Flow
SCOPES = [
"https://www.googleapis.com/auth/gmail.readonly",
"https://www.googleapis.com/auth/calendar.readonly",
"https://www.googleapis.com/auth/documents.readonly",
"https://www.googleapis.com/auth/drive.metadata.readonly",
]
CLIENT_SECRET_PATH = Path(__file__).parent / "client_secret.json"
TOKEN_PATH = Path(__file__).parent / "token.json"
REDIRECT_URI = "urn:ietf:wg:oauth:2.0:oob"
def main():
with open(CLIENT_SECRET_PATH) as f:
client_config = json.load(f)
if "web" in client_config:
web = client_config["web"]
config = {
"installed": {
"client_id": web["client_id"],
"client_secret": web["client_secret"],
"auth_uri": web["auth_uri"],
"token_uri": web["token_uri"],
"redirect_uris": ["urn:ietf:wg:oauth:2.0:oob", "http://localhost"],
}
}
else:
config = client_config
flow = Flow.from_client_config(config, scopes=SCOPES, redirect_uri="http://localhost:8091/")
auth_url, _ = flow.authorization_url(access_type="offline", prompt="consent")
print("\n=== Google OAuth ===")
print(f"\nOpen this URL in your browser:\n\n{auth_url}\n")
print("After granting permissions, you'll be redirected to localhost.")
print("Copy the FULL URL from your browser address bar and paste it here.\n")
redirect_url = input("Paste the redirect URL here: ").strip()
flow.fetch_token(authorization_response=redirect_url)
creds = flow.credentials
TOKEN_PATH.write_text(creds.to_json())
print(f"\nToken saved to {TOKEN_PATH}")
print("You're authenticated! All Google API tools are now live.")
if __name__ == "__main__":
main()