Spaces:
Runtime error
Runtime error
| from flask import Flask, redirect, request, session, jsonify | |
| from google_auth_oauthlib.flow import Flow | |
| from google.oauth2 import id_token | |
| from google.auth.transport import requests | |
| import os | |
| app = Flask(__name__) | |
| app.secret_key = 'YOUR_FLASK_SECRET_KEY' | |
| # Google OAuth Configuration | |
| CLIENT_ID = '931024815427-72meiq3uivuuolfukb3jvikvhhqlr574.apps.googleusercontent.com' | |
| CLIENT_SECRET = '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' | |
| REDIRECT_URI = 'http://localhost:5001/oauth2callback' | |
| SCOPES = ['openid', 'https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/userinfo.profile'] | |
| def login(): | |
| flow = Flow.from_client_config( | |
| client_config={ | |
| "web": { | |
| "client_id": CLIENT_ID, | |
| "client_secret": CLIENT_SECRET, | |
| "auth_uri": "https://accounts.google.com/o/oauth2/auth", | |
| "token_uri": "https://oauth2.googleapis.com/token" | |
| } | |
| }, | |
| scopes=SCOPES, | |
| redirect_uri=REDIRECT_URI | |
| ) | |
| authorization_url, state = flow.authorization_url(access_type='offline', include_granted_scopes='true') | |
| session['state'] = state | |
| return redirect(authorization_url) | |
| def oauth2callback(): | |
| state = session['state'] | |
| flow = Flow.from_client_config( | |
| client_config={ | |
| "web": { | |
| "client_id": CLIENT_ID, | |
| "client_secret": CLIENT_SECRET, | |
| "auth_uri": "https://accounts.google.com/o/oauth2/auth", | |
| "token_uri": "https://oauth2.googleapis.com/token" | |
| } | |
| }, | |
| scopes=SCOPES, | |
| state=state, | |
| redirect_uri=REDIRECT_URI | |
| ) | |
| flow.fetch_token(authorization_response=request.url) | |
| credentials = flow.credentials | |
| session['credentials'] = credentials.to_json() | |
| idinfo = id_token.verify_oauth2_token( | |
| id_token=credentials.id_token, | |
| request=requests.Request(), | |
| audience=CLIENT_ID | |
| ) | |
| session['user_info'] = {"name": idinfo.get("name")} | |
| return redirect("http://localhost:7860") # Redirect back to the Shiny app | |
| def user_info(): | |
| return jsonify(session.get('user_info', {})) | |
| if __name__ == '__main__': | |
| app.run(port=5001) |