Skip to content

Commit 635152e

Browse files
committed
Update mfa app for 5.0
1 parent a93126f commit 635152e

File tree

2 files changed

+17
-11
lines changed

2 files changed

+17
-11
lines changed

python-flask-mfa-example/app.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import os
2+
from typing import Any, cast
23
from flask import Flask, session, redirect, render_template, request, url_for, jsonify
34
import json
45
import workos
@@ -13,7 +14,7 @@
1314
# WorkOS Setup
1415

1516
workos.api_key = os.getenv("WORKOS_API_KEY")
16-
workos.project_id = os.getenv("WORKOS_CLIENT_ID")
17+
workos.client_id = os.getenv("WORKOS_CLIENT_ID")
1718
workos.base_api_url = "http://localhost:7000/" if DEBUG else workos.base_api_url
1819

1920

@@ -41,19 +42,21 @@ def enroll_factor_details():
4142
def enroll_sms_factor():
4243
factor_type = request.form.get("type")
4344
phone_number = request.form.get("phone_number")
45+
if not factor_type in ("sms", "totp"):
46+
return "Invalid factor type"
4447

4548
new_factor = workos.client.mfa.enroll_factor(
4649
type=factor_type, phone_number=phone_number
4750
)
4851

49-
session["factor_list"].append(new_factor)
52+
session["factor_list"].append(new_factor.dict())
5053
session.modified = True
5154
return redirect("/")
5255

5356

5457
@app.route("/enroll_totp_factor", methods=["POST"])
5558
def enroll_totp_factor():
56-
data = request.get_json()
59+
data = cast(Any, request.get_json())
5760
type = data["type"]
5861
issuer = data["issuer"]
5962
user = data["user"]
@@ -62,9 +65,11 @@ def enroll_totp_factor():
6265
type=type, totp_issuer=issuer, totp_user=user
6366
)
6467

65-
session["factor_list"].append(new_factor)
68+
if new_factor.type == "totp":
69+
session["current_factor_qr"] = new_factor.totp.qr_code
70+
session["factor_list"].append(new_factor.dict())
6671
session.modified = True
67-
return jsonify(new_factor["totp"]["qr_code"])
72+
return jsonify(new_factor.dict())
6873

6974

7075
@app.route("/factor_detail")
@@ -105,7 +110,7 @@ def challenge_factor():
105110
authentication_factor_id=authentication_factor_id,
106111
)
107112

108-
session["challenge_id"] = challenge["id"]
113+
session["challenge_id"] = challenge.id
109114
session.modified = True
110115
return render_template("challenge_factor.html")
111116

@@ -120,15 +125,15 @@ def buildCode(code_values):
120125

121126
code = buildCode(request.form)
122127
challenge_id = session["challenge_id"]
123-
verify_factor = workos.client.mfa.verify_factor(
128+
verify_factor = workos.client.mfa.verify_challenge(
124129
authentication_challenge_id=challenge_id,
125130
code=code,
126131
)
127132

128133
return render_template(
129134
"challenge_success.html",
130-
challenge=verify_factor["challenge"],
131-
valid=verify_factor["valid"],
135+
challenge=verify_factor.challenge,
136+
valid=verify_factor.valid,
132137
type=session["current_factor_type"],
133138
)
134139

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
Flask==2.0.0
2-
workos>=1.23.3
1+
Flask==2.0.3
2+
workos>=5.0.0
33
urllib3==1.26.7
4+
Werkzeug==2.0.1
45
python-dotenv
56
flask-lucide==0.2.0

0 commit comments

Comments
 (0)