aagoluoglu's picture
Update app.py
40330c2 verified
raw
history blame
2.39 kB
import requests
from flask import Flask, request, redirect, url_for, session
from google.oauth2 import id_token
from google.auth.transport import requests as grequests
app = Flask(__name__)
app.secret_key = "your_secret_key"
CLIENT_ID = "your_google_client_id"
# Google API endpoints
DISCOVERY_URL = "https://accounts.google.com/.well-known/openid-configuration"
TOKEN_ENDPOINT = "https://oauth2.googleapis.com/token"
DOCS_API_ENDPOINT = "https://docs.googleapis.com/v1/documents/{documentId}"
@app.route("/")
def index():
return "Welcome to the Google Docs Shiny app!"
@app.route("/login")
def login():
# Generate Google login URL
authorization_endpoint = requests.get(DISCOVERY_URL).json()["authorization_endpoint"]
redirect_uri = request.base_url + "/callback"
login_url = f"{authorization_endpoint}?response_type=code&client_id={CLIENT_ID}&redirect_uri={redirect_uri}&scope=email%20profile%20openid&access_type=offline"
return redirect(login_url)
@app.route("/login/callback")
def login_callback():
# Exchange authorization code for access token
code = request.args.get("code")
token_request_data = {
"code": code,
"client_id": CLIENT_ID,
"client_secret": "your_client_secret",
"redirect_uri": request.base_url,
"grant_type": "authorization_code"
}
token_response = requests.post(TOKEN_ENDPOINT, data=token_request_data)
access_token = token_response.json().get("access_token")
if access_token:
session["access_token"] = access_token
return redirect(url_for("fetch_comments"))
else:
return "Failed to obtain access token."
@app.route("/fetch_comments")
def fetch_comments():
if "access_token" in session:
# Fetch comments from Google Docs API
document_id = "your_document_id"
headers = {"Authorization": f"Bearer {session['access_token']}"}
response = requests.get(DOCS_API_ENDPOINT.format(documentId=document_id), headers=headers)
if response.status_code == 200:
# Parse comments from response
comments = response.json().get("comments", [])
return str(comments)
else:
return f"Failed to fetch comments. Status code: {response.status_code}"
else:
return "User not authenticated."
if __name__ == "__main__":
app.run(debug=True)