Skip to content

Commit 124fc38

Browse files
committed
Refactor server.py
1 parent 22ea1af commit 124fc38

File tree

1 file changed

+41
-50
lines changed

1 file changed

+41
-50
lines changed

01-Login/server.py

Lines changed: 41 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,21 @@
11
"""Python Flask WebApp Auth0 integration example
22
"""
3-
from functools import wraps
3+
44
import json
55
from os import environ as env
6-
from werkzeug.exceptions import HTTPException
6+
from urllib.parse import quote_plus, urlencode
77

8-
from dotenv import load_dotenv, find_dotenv
9-
from flask import Flask
10-
from flask import jsonify
11-
from flask import redirect
12-
from flask import render_template
13-
from flask import session
14-
from flask import url_for
158
from authlib.integrations.flask_client import OAuth
16-
from six.moves.urllib.parse import urlencode
17-
18-
import constants
9+
from dotenv import find_dotenv, load_dotenv
10+
from flask import Flask, jsonify, redirect, render_template, session, url_for
11+
from werkzeug.exceptions import HTTPException
1912

2013
ENV_FILE = find_dotenv()
2114
if ENV_FILE:
2215
load_dotenv(ENV_FILE)
2316

24-
AUTH0_CALLBACK_URL = env.get(constants.AUTH0_CALLBACK_URL)
25-
AUTH0_CLIENT_ID = env.get(constants.AUTH0_CLIENT_ID)
26-
AUTH0_CLIENT_SECRET = env.get(constants.AUTH0_CLIENT_SECRET)
27-
AUTH0_DOMAIN = env.get(constants.AUTH0_DOMAIN)
28-
AUTH0_BASE_URL = "https://" + AUTH0_DOMAIN
29-
AUTH0_AUDIENCE = env.get(constants.AUTH0_AUDIENCE)
30-
3117
app = Flask(__name__, static_url_path="/public", static_folder="./public")
32-
app.secret_key = constants.SECRET_KEY
18+
app.secret_key = env.get("APP_SECRET_KEY")
3319
app.debug = True
3420

3521

@@ -40,34 +26,40 @@ def handle_auth_error(ex):
4026
return response
4127

4228

29+
def fetch_token(name, request):
30+
token = OAuth2Token.find(name=name, user=request.user)
31+
return token.to_token()
32+
33+
4334
oauth = OAuth(app)
4435

4536
auth0 = oauth.register(
4637
"auth0",
47-
client_id=AUTH0_CLIENT_ID,
48-
client_secret=AUTH0_CLIENT_SECRET,
49-
api_base_url=AUTH0_BASE_URL,
50-
access_token_url=AUTH0_BASE_URL + "/oauth/token",
51-
authorize_url=AUTH0_BASE_URL + "/authorize",
38+
client_id=env.get("AUTH0_CLIENT_ID"),
39+
client_secret=env.get("AUTH0_CLIENT_SECRET"),
40+
api_base_url="https://" + env.get("AUTH0_DOMAIN"),
41+
access_token_url="https://" + env.get("AUTH0_DOMAIN") + "/oauth/token",
42+
authorize_url="https://" + env.get("AUTH0_DOMAIN") + "/authorize",
5243
client_kwargs={
5344
"scope": "openid profile email",
5445
},
46+
server_metadata_url="https://"
47+
+ env.get("AUTH0_DOMAIN")
48+
+ "/.well-known/openid-configuration",
49+
fetch_token=fetch_token,
5550
)
5651

5752

58-
def requires_auth(f):
59-
@wraps(f)
60-
def decorated(*args, **kwargs):
61-
if constants.PROFILE_KEY not in session:
62-
return redirect("/login")
63-
return f(*args, **kwargs)
64-
65-
return decorated
66-
67-
6853
# Controllers API
6954
@app.route("/")
7055
def home():
56+
if "profile" in session:
57+
return render_template(
58+
"dashboard.html",
59+
userinfo=session["profile"],
60+
userinfo_pretty=json.dumps(session["jwt_payload"], indent=4),
61+
)
62+
7163
return render_template("home.html")
7264

7365

@@ -77,36 +69,35 @@ def callback_handling():
7769
resp = auth0.get("userinfo")
7870
userinfo = resp.json()
7971

80-
session[constants.JWT_PAYLOAD] = userinfo
81-
session[constants.PROFILE_KEY] = {
72+
session["jwt_payload"] = userinfo
73+
session["profile"] = {
8274
"user_id": userinfo["sub"],
8375
"name": userinfo["name"],
8476
"picture": userinfo["picture"],
8577
}
86-
return redirect("/dashboard")
78+
return redirect("/")
8779

8880

8981
@app.route("/login")
9082
def login():
9183
return auth0.authorize_redirect(
92-
redirect_uri=AUTH0_CALLBACK_URL, audience=AUTH0_AUDIENCE
84+
redirect_uri=env.get("AUTH0_CALLBACK_URL"), audience=env.get("AUTH0_AUDIENCE")
9385
)
9486

9587

9688
@app.route("/logout")
9789
def logout():
9890
session.clear()
99-
params = {"returnTo": url_for("home", _external=True), "client_id": AUTH0_CLIENT_ID}
100-
return redirect(auth0.api_base_url + "/v2/logout?" + urlencode(params))
101-
102-
103-
@app.route("/dashboard")
104-
@requires_auth
105-
def dashboard():
106-
return render_template(
107-
"dashboard.html",
108-
userinfo=session[constants.PROFILE_KEY],
109-
userinfo_pretty=json.dumps(session[constants.JWT_PAYLOAD], indent=4),
91+
return redirect(
92+
auth0.api_base_url
93+
+ "/v2/logout?"
94+
+ urlencode(
95+
{
96+
"returnTo": url_for("home", _external=True),
97+
"client_id": env.get("AUTH0_CLIENT_ID"),
98+
},
99+
quote_via=quote_plus,
100+
)
110101
)
111102

112103

0 commit comments

Comments
 (0)