@@ -4,7 +4,7 @@ import ora from 'ora';
44import { login } from './actions/auth.js' ;
55
66import { updateConfig } from './config.js' ;
7- import { log , error , informUpdate } from './helpers.js' ;
7+ import { log , error , informUpdate , requiresMfa } from './helpers.js' ;
88
99export async function doLogin ( message ) {
1010 if ( message ) log ( message , 'white' ) ;
@@ -35,37 +35,52 @@ export async function doLogin(message) {
3535 ...credentials ,
3636 requestAdminToken : true ,
3737 } ) ;
38- if ( loginBody . data . requiresOtp ) {
39- loginLoader . info ( 'Your account requires 2 factor authentication.' ) ;
40- const response = await inquirer . prompt ( [
41- {
42- type : 'input' ,
43- message : 'Please provide your one time password' ,
44- name : 'otp' ,
45- validate : ( value ) =>
46- value . length
47- ? true
48- : 'Please enter a one time password' ,
49- } ,
50- ] ) ;
38+ return loginSucceed ( loginLoader , loginBody ) ;
39+ } catch ( e ) {
40+ if ( requiresMfa ( e ) ) {
41+ return await loginWith2FA ( loginLoader , credentials ) ;
42+ } else {
43+ error ( e , loginLoader ) ;
44+ return false ;
45+ }
46+ }
47+ }
5148
52- loginLoader = ora ( 'Logging you in...' ) . start ( ) ;
49+ async function loginWith2FA ( loginLoader , credentials ) {
50+ loginLoader . info ( 'Your account requires 2 factor authentication.' ) ;
51+ try {
52+ const response = await inquirer . prompt ( [
53+ {
54+ type : 'input' ,
55+ message : 'Please provide your one time password' ,
56+ name : 'otp' ,
57+ validate : ( value ) =>
58+ value . length
59+ ? true
60+ : 'Please enter a one time password' ,
61+ } ,
62+ ] ) ;
5363
54- loginBody = await login ( {
55- ...credentials ,
56- otp : response . otp ,
57- requestAdminToken : true ,
58- } ) ;
59- }
60- const { token, data : user } = loginBody ;
61- loginLoader . succeed ( ) ;
62- return { user, token } ;
64+ loginLoader . info ( 'Logging you in...' ) ;
65+
66+ const loginBody = await login ( {
67+ ...credentials ,
68+ otp : response . otp ,
69+ requestAdminToken : true ,
70+ } ) ;
71+ return loginSucceed ( loginLoader , loginBody ) ;
6372 } catch ( e ) {
6473 error ( e , loginLoader ) ;
6574 return false ;
6675 }
6776}
6877
78+ async function loginSucceed ( loginLoader , loginBody ) {
79+ const { token, data : user } = loginBody ;
80+ loginLoader . succeed ( ) ;
81+ return { user, token } ;
82+ }
83+
6984export default async function loginAction ( ) {
7085 const result = await doLogin ( ) ;
7186 if ( ! result ) return ;
0 commit comments