Spaces:
Runtime error
Runtime error
File size: 2,292 Bytes
fb240df | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | 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) |