test / flask_app.py
Vinayak221's picture
create flask_app.py
fb240df verified
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)