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'] @app.route('/login') 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) @app.route('/oauth2callback') 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 @app.route('/user_info') def user_info(): return jsonify(session.get('user_info', {})) if __name__ == '__main__': app.run(port=5001)