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']}! Logout"
return "Login with Google"
@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)