1
1
import os
2
- from typing import Any , cast
2
+ from typing import Any , assert_never , cast
3
3
from flask import Flask , session , redirect , render_template , request , url_for , jsonify
4
- import json
5
4
import workos
6
5
from flask_lucide import Lucide
7
6
12
11
lucide = Lucide (app )
13
12
14
13
# WorkOS Setup
15
-
16
- workos .api_key = os .getenv ("WORKOS_API_KEY" )
17
- workos .client_id = os .getenv ("WORKOS_CLIENT_ID" )
18
- workos .base_api_url = "http://localhost:7000/" if DEBUG else workos .base_api_url
14
+ base_api_url = "http://localhost:7000/" if DEBUG else None
15
+ workos_client = workos .WorkOSClient (
16
+ api_key = os .getenv ("WORKOS_API_KEY" ),
17
+ client_id = os .getenv ("WORKOS_CLIENT_ID" ),
18
+ base_url = base_api_url ,
19
+ )
19
20
20
21
21
22
@app .route ("/" )
@@ -45,7 +46,7 @@ def enroll_sms_factor():
45
46
if not factor_type in ("sms" , "totp" ):
46
47
return "Invalid factor type"
47
48
48
- new_factor = workos . client .mfa .enroll_factor (
49
+ new_factor = workos_client .mfa .enroll_factor (
49
50
type = factor_type , phone_number = phone_number
50
51
)
51
52
@@ -61,7 +62,7 @@ def enroll_totp_factor():
61
62
issuer = data ["issuer" ]
62
63
user = data ["user" ]
63
64
64
- new_factor = workos . client .mfa .enroll_factor (
65
+ new_factor = workos_client .mfa .enroll_factor (
65
66
type = type , totp_issuer = issuer , totp_user = user
66
67
)
67
68
@@ -95,20 +96,23 @@ def factor_detail():
95
96
96
97
@app .route ("/challenge_factor" , methods = ["POST" ])
97
98
def challenge_factor ():
98
- if session ["current_factor_type" ] == "sms" :
99
+ factor_type = session ["current_factor_type" ]
100
+
101
+ if factor_type == "sms" :
99
102
message = request .form ["sms_message" ]
100
103
session ["sms_message" ] = message
101
104
102
- challenge = workos . client .mfa .challenge_factor (
105
+ challenge = workos_client .mfa .challenge_factor (
103
106
authentication_factor_id = session ["current_factor" ],
104
107
sms_template = message ,
105
108
)
106
-
107
- if session ["current_factor_type" ] == "totp" :
109
+ elif factor_type == "totp" :
108
110
authentication_factor_id = session ["current_factor" ]
109
- challenge = workos . client .mfa .challenge_factor (
111
+ challenge = workos_client .mfa .challenge_factor (
110
112
authentication_factor_id = authentication_factor_id ,
111
113
)
114
+ else :
115
+ assert_never (factor_type )
112
116
113
117
session ["challenge_id" ] = challenge .id
114
118
session .modified = True
@@ -125,7 +129,7 @@ def buildCode(code_values):
125
129
126
130
code = buildCode (request .form )
127
131
challenge_id = session ["challenge_id" ]
128
- verify_factor = workos . client .mfa .verify_challenge (
132
+ verify_factor = workos_client .mfa .verify_challenge (
129
133
authentication_challenge_id = challenge_id ,
130
134
code = code ,
131
135
)
0 commit comments