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)