Spaces:
Runtime error
Runtime error
from fastapi import FastAPI, Request | |
from fastapi.responses import RedirectResponse | |
from fastapi.responses import HTMLResponse | |
from fastapi.staticfiles import StaticFiles | |
from google_manager.constants import SCOPES | |
from pages.auth_page import html_content | |
import google_auth_oauthlib.flow | |
from starlette.middleware.sessions import SessionMiddleware | |
import gradio as gr | |
from gpt_summary import Ui | |
app = FastAPI() | |
app.add_middleware(SessionMiddleware, secret_key="mysecret") | |
app.mount("/assets", StaticFiles(directory="assets"), name="assets") | |
async def home(request: Request): | |
print("request session") | |
print(request.session) | |
state = request.session.get("state", None) | |
print("state") | |
print(state) | |
if state: | |
return RedirectResponse("/gradio") | |
else: | |
return HTMLResponse(content=html_content, status_code=200) | |
async def integreate_google(request: Request): | |
flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file( | |
"credentials.json", scopes=SCOPES | |
) | |
flow.redirect_uri = "http://127.0.0.1:8000/auth_callback" | |
authorization_url, state = flow.authorization_url( | |
access_type="offline", | |
include_granted_scopes="true", | |
) | |
request.session["state"] = state | |
return RedirectResponse(url=authorization_url) | |
async def auth_callback(request: Request): | |
state = request.session["state"] | |
flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file( | |
"credentials.json", scopes=SCOPES, state=state | |
) | |
flow.redirect_uri = "http://127.0.0.1:8000/auth_callback" | |
# Use the authorization server's response to fetch the OAuth 2.0 tokens. | |
authorization_response = str(request.url) | |
flow.fetch_token(authorization_response=authorization_response) | |
credentials = flow.credentials | |
request.session["credentials"] = credentials_to_dict(credentials) | |
return RedirectResponse("/gradio") | |
app = gr.mount_gradio_app(app, Ui, path="/gradio") | |
def credentials_to_dict(credentials): | |
return { | |
"token": credentials.token, | |
"refresh_token": credentials.refresh_token, | |
"token_uri": credentials.token_uri, | |
"client_id": credentials.client_id, | |
"client_secret": credentials.client_secret, | |
"scopes": credentials.scopes, | |
} | |