@@ -5,109 +5,17 @@ import Conf from 'conf';
55import ora from 'ora' ;
66import fetch from 'node-fetch' ;
77import { PROJECT_NAME , API_BASE , getHeaders , BASE_URL } from '../commons.js'
8+ import { ProfileAPI } from '../modules/ProfileModule.js' ;
9+ import { get_context } from '../temporary/context_helpers.js' ;
810const config = new Conf ( { projectName : PROJECT_NAME } ) ;
911
1012/**
1113 * Login user
1214 * @returns void
1315 */
14- export async function login ( args = { } ) {
15- const answers = await inquirer . prompt ( [
16- {
17- type : 'input' ,
18- name : 'username' ,
19- message : 'Username:' ,
20- validate : input => input . length >= 1 || 'Username is required'
21- } ,
22- {
23- type : 'password' ,
24- name : 'password' ,
25- message : 'Password:' ,
26- mask : '*' ,
27- validate : input => input . length >= 1 || 'Password is required'
28- }
29- ] ) ;
30-
31- let spinner ;
32- try {
33- spinner = ora ( 'Logging in to Puter...' ) . start ( ) ;
34-
35- const response = await fetch ( `${ BASE_URL } /login` , {
36- method : 'POST' ,
37- headers : getHeaders ( ) ,
38- body : JSON . stringify ( {
39- username : answers . username ,
40- password : answers . password
41- } )
42- } ) ;
43-
44- let data = await response . json ( ) ;
45-
46- while ( data . proceed && data . next_step ) {
47- if ( data . next_step === 'otp' ) {
48- spinner . succeed ( chalk . green ( '2FA is enabled' ) ) ;
49- const answers = await inquirer . prompt ( [
50- {
51- type : 'input' ,
52- name : 'otp' ,
53- message : 'Authenticator Code:' ,
54- validate : input => input . length === 6 || 'OTP must be 6 digits'
55- }
56- ] ) ;
57- spinner = ora ( 'Logging in to Puter...' ) . start ( ) ;
58- const response = await fetch ( `${ BASE_URL } /login/otp` , {
59- method : 'POST' ,
60- headers : getHeaders ( ) ,
61- body : JSON . stringify ( {
62- token : data . otp_jwt_token ,
63- code : answers . otp ,
64- } ) ,
65- } ) ;
66- data = await response . json ( ) ;
67- continue ;
68- }
69-
70- if ( data . next_step === 'complete' ) break ;
71-
72- spinner . fail ( chalk . red ( `Unrecognized login step "${ data . next_step } "; you might need to update puter-cli.` ) ) ;
73- return ;
74- }
75-
76- if ( data . proceed && data . token ) {
77- config . set ( 'auth_token' , data . token ) ;
78- config . set ( 'username' , answers . username ) ;
79- config . set ( 'cwd' , `/${ answers . username } ` ) ;
80- if ( spinner ) {
81- spinner . succeed ( chalk . green ( 'Successfully logged in to Puter!' ) ) ;
82- }
83- console . log ( chalk . dim ( `Token: ${ data . token . slice ( 0 , 5 ) } ...${ data . token . slice ( - 5 ) } ` ) ) ;
84- // Save token
85- if ( args . save ) {
86- const localEnvFile = '.env' ;
87- try {
88- // Check if the file exists, if so then delete it before writing.
89- if ( fs . existsSync ( localEnvFile ) ) {
90- console . log ( chalk . yellow ( `File "${ localEnvFile } " already exists... Adding token.` ) ) ;
91- fs . appendFileSync ( localEnvFile , `\nPUTER_API_KEY="${ data . token } "` , 'utf8' ) ;
92- } else {
93- console . log ( chalk . cyan ( `Saving token to ${ chalk . green ( localEnvFile ) } file.` ) ) ;
94- fs . writeFileSync ( localEnvFile , `PUTER_API_KEY="${ data . token } "` , 'utf8' ) ;
95- }
96- } catch ( error ) {
97- console . error ( chalk . red ( `Cannot save token to .env file. Error: ${ error . message } ` ) ) ;
98- console . log ( chalk . cyan ( `PUTER_API_KEY="${ data . token } "` ) ) ;
99- }
100- }
101- } else {
102- spinner . fail ( chalk . red ( 'Login failed. Please check your credentials.' ) ) ;
103- }
104- } catch ( error ) {
105- if ( spinner ) {
106- spinner . fail ( chalk . red ( 'Failed to login' ) ) ;
107- } else {
108- console . error ( chalk . red ( `Failed to login: ${ error . message } ` ) ) ;
109- }
110- }
16+ export async function login ( args = { } , context ) {
17+ const profileAPI = context [ ProfileAPI ] ;
18+ await profileAPI . switchProfileWizard ( ) ;
11119}
11220
11321/**
@@ -164,14 +72,17 @@ export async function getUserInfo() {
16472 }
16573 } catch ( error ) {
16674 console . error ( chalk . red ( `Failed to get user info.\nError: ${ error . message } ` ) ) ;
75+ console . log ( error ) ;
16776 }
16877}
16978export function isAuthenticated ( ) {
17079 return ! ! config . get ( 'auth_token' ) ;
17180}
17281
17382export function getAuthToken ( ) {
174- return config . get ( 'auth_token' ) ;
83+ const context = get_context ( ) ;
84+ const profileAPI = context [ ProfileAPI ] ;
85+ return profileAPI . getAuthToken ( ) ;
17586}
17687
17788export function getCurrentUserName ( ) {
0 commit comments