1
1
import os
2
+ from typing import Any , cast
2
3
from flask import Flask , session , redirect , render_template , request , url_for , jsonify
3
4
import json
4
5
import workos
13
14
# WorkOS Setup
14
15
15
16
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" )
17
18
workos .base_api_url = "http://localhost:7000/" if DEBUG else workos .base_api_url
18
19
19
20
@@ -41,19 +42,21 @@ def enroll_factor_details():
41
42
def enroll_sms_factor ():
42
43
factor_type = request .form .get ("type" )
43
44
phone_number = request .form .get ("phone_number" )
45
+ if not factor_type in ("sms" , "totp" ):
46
+ return "Invalid factor type"
44
47
45
48
new_factor = workos .client .mfa .enroll_factor (
46
49
type = factor_type , phone_number = phone_number
47
50
)
48
51
49
- session ["factor_list" ].append (new_factor )
52
+ session ["factor_list" ].append (new_factor . dict () )
50
53
session .modified = True
51
54
return redirect ("/" )
52
55
53
56
54
57
@app .route ("/enroll_totp_factor" , methods = ["POST" ])
55
58
def enroll_totp_factor ():
56
- data = request .get_json ()
59
+ data = cast ( Any , request .get_json () )
57
60
type = data ["type" ]
58
61
issuer = data ["issuer" ]
59
62
user = data ["user" ]
@@ -62,9 +65,11 @@ def enroll_totp_factor():
62
65
type = type , totp_issuer = issuer , totp_user = user
63
66
)
64
67
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 ())
66
71
session .modified = True
67
- return jsonify (new_factor [ "totp" ][ "qr_code" ] )
72
+ return jsonify (new_factor . dict () )
68
73
69
74
70
75
@app .route ("/factor_detail" )
@@ -105,7 +110,7 @@ def challenge_factor():
105
110
authentication_factor_id = authentication_factor_id ,
106
111
)
107
112
108
- session ["challenge_id" ] = challenge [ "id" ]
113
+ session ["challenge_id" ] = challenge . id
109
114
session .modified = True
110
115
return render_template ("challenge_factor.html" )
111
116
@@ -120,15 +125,15 @@ def buildCode(code_values):
120
125
121
126
code = buildCode (request .form )
122
127
challenge_id = session ["challenge_id" ]
123
- verify_factor = workos .client .mfa .verify_factor (
128
+ verify_factor = workos .client .mfa .verify_challenge (
124
129
authentication_challenge_id = challenge_id ,
125
130
code = code ,
126
131
)
127
132
128
133
return render_template (
129
134
"challenge_success.html" ,
130
- challenge = verify_factor [ " challenge" ] ,
131
- valid = verify_factor [ " valid" ] ,
135
+ challenge = verify_factor . challenge ,
136
+ valid = verify_factor . valid ,
132
137
type = session ["current_factor_type" ],
133
138
)
134
139
0 commit comments