1+ #!/usr/bin/env node
2+
3+ import fs from 'node:fs' ;
4+ import path from 'node:path' ;
5+ import { fileURLToPath } from 'node:url' ;
6+
7+ import { loadYaml } from './module-helper.js' ;
8+ import Argv from './module-argv.js' ;
9+
10+ import TeraBoxApp from 'terabox-api' ;
11+ import input from '@inquirer/input' ;
12+ import password from '@inquirer/password' ;
13+
14+ // init app
15+ let app = { } ;
16+ const __dirname = path . dirname ( fileURLToPath ( import . meta. url ) ) ;
17+ const meta = loadYaml ( path . resolve ( __dirname , '../package.json' ) ) ;
18+
19+ console . log ( `[INFO] ${ meta . name_ext } v${ meta . version } (Login)` ) ;
20+
21+ const yargs = new Argv ( { } , [ ] ) ;
22+ if ( yargs . getArgv ( 'help' ) ) {
23+ yargs . showHelp ( ) ;
24+ process . exit ( ) ;
25+ }
26+
27+ ( async ( ) => {
28+ app = new TeraBoxApp ( ) ;
29+
30+ const preLogin = await tryPreLogin ( ) ;
31+ const doLogin = await tryLogin ( preLogin ) ;
32+
33+ console . log ( `[AUTH] ${ doLogin . displayName } : ${ doLogin . ndus } ` ) ;
34+ } ) ( ) ;
35+
36+ async function tryPreLogin ( ) {
37+ try {
38+ const email = await input ( { message : 'EMail:' } ) ;
39+ const preLoginData = await app . preLogin ( email ) ;
40+ if ( preLoginData . code === 0 ) {
41+ preLoginData . data . email = email ;
42+ return preLoginData . data ;
43+ }
44+ console . log ( 'ERROR:' , preLoginData ) ;
45+ throw new Error ( 'Bad Response' ) ;
46+ }
47+ catch ( err ) {
48+ return await tryPreLogin ( ) ;
49+ }
50+ }
51+
52+ async function tryLogin ( preLogin ) {
53+ try {
54+ const pass = await password ( { message : 'Password:' } ) ;
55+ const authData = await app . doAuth ( preLogin , preLogin . email , pass ) ;
56+ if ( authData . code === 0 ) {
57+ return authData . data ;
58+ }
59+ console . log ( 'ERROR:' , authData ) ;
60+ throw new Error ( 'Bad Response' ) ;
61+ }
62+ catch ( err ) {
63+ return await tryLogin ( preLogin ) ;
64+ }
65+ }
0 commit comments