1616import java .util .HashMap ;
1717import java .util .List ;
1818import java .util .Map ;
19+ import com .fasterxml .jackson .databind .JsonNode ;
1920
2021
2122public class MfaApp {
@@ -35,7 +36,8 @@ public MfaApp() {
3536 app .get ("/" , this ::home );
3637 app .get ("/clear_session" , this ::clear_session );
3738 app .get ("/factor_detail" , this ::factor_detail );
38- app .post ("/enroll_factor" , this ::enroll_factor );
39+ app .post ("/enroll_sms_factor" , this ::enroll_sms_factor );
40+ app .post ("/enroll_totp_factor" , this ::enroll_totp_factor );
3941 app .get ("/enroll_factor_details" , this ::enroll_factor_details );
4042 app .post ("/challenge_factor" , this ::challenge_factor );
4143 app .post ("/verify_factor" , this ::verify_factor );
@@ -168,31 +170,59 @@ public void enroll_factor_details(Context ctx ) {
168170 ctx .render ("enroll_factor.jte" );
169171 }
170172
171- public void enroll_factor (Context ctx ) {
172- String phoneNumber = ctx .formParam ("phone_number" );
173- String factorType = ctx .formParam ("type" );
174- String issuer = ctx .formParam ("totp_issuer" );
175- String user = ctx .formParam ("totp_user" );
173+ public void enroll_totp_factor (Context ctx ) {
174+ JsonNode jsonNode = ctx .bodyAsClass (JsonNode .class );
175+ String issuer = jsonNode .get ("issuer" ).asText ();
176+ String user = jsonNode .get ("user" ).asText ();
176177 EnrollFactorOptions options ;
177178
178- switch (factorType ) {
179- case "sms" :
180- options = EnrollFactorOptions .builder ()
181- .type ("sms" )
182- .phoneNumber (phoneNumber )
183- .build ();
184- break ;
185- case "totp" :
186- options = EnrollFactorOptions .builder ()
187- .type ("totp" )
188- .issuer (issuer )
189- .user (user )
190- .build ();
191- break ;
192- default :
193- options = EnrollFactorOptions .builder ()
194- .build ();
179+ options = EnrollFactorOptions .builder ()
180+ .type ("totp" )
181+ .issuer (issuer )
182+ .user (user )
183+ .build ();
184+
185+ try {
186+ Factor factor = workos .mfa .enrollFactor (options );
187+ String factorId = factor .id ;
188+
189+ if (ctx .sessionAttribute ("factorList" ) != null ) {
190+ ArrayList <String > factorIdList = ctx .sessionAttribute ("factorIdList" );
191+ factorIdList .add (factorId );
192+ ctx .sessionAttribute ("factorIdList" , factorIdList );
193+ HashMap <String , Factor > factorList = ctx .sessionAttribute ("factorList" );
194+ factorList .put (factorId , factor );
195+ ctx .sessionAttribute ("factorList" , factorList );
196+ } else {
197+ ArrayList <String > factorIdList = new ArrayList <>();
198+ factorIdList .add (factorId );
199+ ctx .sessionAttribute ("factorIdList" , factorIdList );
200+ HashMap <String , Factor > factorList = new HashMap <>();
201+ factorList .put (factorId , factor );
202+ ctx .sessionAttribute ("factorList" , factorList );
203+ }
204+ HashMap <String , Factor > factorList = ctx .sessionAttribute ("factorList" );
205+ ArrayList <Object > list = new ArrayList <Object >(factorList .values ());
206+ ctx .sessionAttribute ("arrayFactorList" , list );
207+ ctx .status (200 ).json (factor );
208+ } catch (Exception e ) {
209+ if (e .equals (null )) {
210+ ctx .render ("error.jte" );
211+ }
212+ Map <String , Object > jteParams = new HashMap <>();
213+ jteParams .put ("error" , e .getMessage ());
214+ ctx .render ("error.jte" , jteParams );
195215 }
216+ }
217+
218+ public void enroll_sms_factor (Context ctx ) {
219+ String phoneNumber = ctx .formParam ("phone_number" );
220+ EnrollFactorOptions options ;
221+
222+ options = EnrollFactorOptions .builder ()
223+ .type ("sms" )
224+ .phoneNumber (phoneNumber )
225+ .build ();
196226
197227 try {
198228 Factor factor = workos .mfa .enrollFactor (options );
0 commit comments