@@ -35,7 +35,8 @@ module.exports = {
3535 return path
3636 } ,
3737
38- async login ( email , password , region ) {
38+ async login ( content ) {
39+ const { email, password, region } = content
3940 try {
4041 const response = await axios . post ( `${ this . apiSwitcher ( region ) } users/login` , {
4142 email : email ,
@@ -68,10 +69,10 @@ module.exports = {
6869 otp_attempt : code
6970 } )
7071
71- return this . persistCredentials ( email , newResponse . data || { } , region )
72+ return this . persistCredentials ( email , newResponse . data . access_token || { } , region )
7273 }
7374
74- return this . persistCredentials ( email , data , region )
75+ return this . persistCredentials ( email , data . access_token , region )
7576 } catch ( e ) {
7677 return Promise . reject ( e )
7778 }
@@ -92,27 +93,37 @@ module.exports = {
9293 }
9394 } ,
9495
95- persistCredentials ( email , data , region = 'eu' ) {
96- const token = this . extractToken ( data )
96+ persistCredentials ( email , token = null , region = 'eu' ) {
9797 if ( token ) {
9898 this . oauthToken = token
9999 creds . set ( email , token , region )
100100
101- return Promise . resolve ( data )
101+ return Promise . resolve ( token )
102102 }
103103 return Promise . reject ( new Error ( 'The code could not be authenticated.' ) )
104104 } ,
105105
106106 async processLogin ( ) {
107107 try {
108- const questions = getQuestions ( 'login' )
109- const { email, password, region } = await inquirer . prompt ( questions )
108+ let content = { }
109+ await inquirer
110+ . prompt ( getQuestions ( 'login-strategy' ) )
111+ . then ( async ( { strategy } ) => {
112+ content = await inquirer . prompt ( getQuestions ( strategy ) )
113+ } )
114+ . catch ( ( error ) => {
115+ console . log ( error )
116+ } )
110117
111- const data = await this . login ( email , password , region )
118+ if ( ! content . token ) {
119+ await this . login ( content )
120+ } else {
121+ await this . loginWithToken ( content )
122+ }
112123
113124 console . log ( chalk . green ( '✓' ) + ' Log in successfully! Token has been added to .netrc file.' )
114125
115- return Promise . resolve ( data )
126+ return Promise . resolve ( content )
116127 } catch ( e ) {
117128 if ( e . response && e . response . data && e . response . data . error ) {
118129 console . error ( chalk . red ( 'X' ) + ' An error ocurred when login the user: ' + e . response . data . error )
@@ -125,8 +136,20 @@ module.exports = {
125136 }
126137 } ,
127138
128- extractToken ( data ) {
129- return data . access_token
139+ async loginWithToken ( content ) {
140+ const { token, region } = content
141+ try {
142+ const { data } = await axios . get ( `${ this . apiSwitcher ( region ) } users/me` , {
143+ headers : {
144+ Authorization : token
145+ }
146+ } )
147+
148+ this . persistCredentials ( data . user . email , token , region )
149+ return data . user
150+ } catch ( e ) {
151+ return Promise . reject ( e )
152+ }
130153 } ,
131154
132155 logout ( unauthorized ) {
0 commit comments