Spaces:
Sleeping
Sleeping
File size: 1,861 Bytes
83d593e a680519 83d593e d055e06 83d593e 53e454c 4a31ace 83d593e a680519 83d593e 43d6abd 9c492e9 a680519 83d593e a680519 83d593e a680519 |
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 |
from flask import Flask, redirect, url_for, session, jsonify
from authlib.integrations.flask_client import OAuth
import os
app = Flask(__name__)
app.secret_key = os.getenv("SECRET_KEY", "supersecret")
# OAuth config
GOOGLE_CLIENT_ID = os.getenv("GOOGLE_CLIENT_ID").strip()
GOOGLE_CLIENT_SECRET = os.getenv("GOOGLE_CLIENT_SECRET").strip()
REDIRECT_URI = "https://adastra144-google-oauth.hf.space/google/auth/callback"
# Setup Authlib
oauth = OAuth(app)
google = oauth.register(
name="google",
client_id=os.getenv("GOOGLE_CLIENT_ID"),
client_secret=os.getenv("GOOGLE_CLIENT_SECRET"),
server_metadata_url="https://accounts.google.com/.well-known/openid-configuration",
client_kwargs={
"scope": "openid email profile"
},
userinfo_endpoint="https://www.googleapis.com/oauth2/v3/userinfo"
)
@app.route("/")
def index():
user = session.get("user")
if user:
return f"Hello {user['email']}! <a href='/logout'>Logout</a>"
return "<a href='/login'>Login with Google</a>"
@app.route("/login")
def login():
redirect_uri = REDIRECT_URI
return google.authorize_redirect(redirect_uri)
@app.route("/google/auth/callback")
def callback():
try:
token = google.authorize_access_token()
print("Token:", token)
user = google.get("userinfo").json()
print("User info:", user)
return f"Hello {user.get('email', 'Unknown')}!"
except Exception as e:
import traceback
traceback.print_exc()
return f"Error: {str(e)}", 500
@app.route("/logout")
def logout():
session.pop("user", None)
return redirect("/")
@app.route("/api/user")
def api_user():
user = session.get("user")
if user:
return jsonify(user)
return jsonify({"error": "Not logged in"}), 401
if __name__ == "__main__":
app.run(host="0.0.0.0", port=7860)
|