From 9ef615431c19ef976e76cc8c7fa98e9583c9e1d0 Mon Sep 17 00:00:00 2001 From: Koushik Dutta Date: Thu, 23 Sep 2021 14:31:47 -0700 Subject: [PATCH] cli: login --- cli/package-lock.json | 4 +-- cli/package.json | 2 +- cli/src/main.ts | 84 ++++++++++++++++++++++++++----------------- 3 files changed, 54 insertions(+), 36 deletions(-) diff --git a/cli/package-lock.json b/cli/package-lock.json index cd4ce75c2..a545db432 100644 --- a/cli/package-lock.json +++ b/cli/package-lock.json @@ -1,12 +1,12 @@ { "name": "scrypted", - "version": "1.0.14", + "version": "1.0.17", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "scrypted", - "version": "1.0.14", + "version": "1.0.17", "license": "ISC", "dependencies": { "@scrypted/sdk": "^0.0.79", diff --git a/cli/package.json b/cli/package.json index 54a4ea108..10e75c2cb 100644 --- a/cli/package.json +++ b/cli/package.json @@ -1,6 +1,6 @@ { "name": "scrypted", - "version": "1.0.14", + "version": "1.0.17", "description": "", "main": "dist/main.js", "bin": { diff --git a/cli/src/main.ts b/cli/src/main.ts index 140e30fc6..706ddf6dd 100644 --- a/cli/src/main.ts +++ b/cli/src/main.ts @@ -15,6 +15,42 @@ function getUserHome() { return ret; } +const scryptedHome = path.join(getUserHome(), '.scrypted'); +const loginPath = path.join(scryptedHome, 'login.json'); + +async function doLogin(ip: string) { + const username = readline.question('username: '); + const password = readline.question('password: ', { + hideEchoBack: true, + }); + + const url = `https://${ip}:9443/login`; + const response = await axios(Object.assign({ + method: 'GET', + auth: { + username, + password, + }, + url, + }, axiosConfig)); + + mkdirp.sync(scryptedHome); + let login: any; + try { + login = JSON.parse(fs.readFileSync(loginPath).toString()); + } + catch (e) { + login = {}; + } + if (typeof login !== 'object') + login = {}; + login = login || {}; + + login[ip] = response.data; + fs.writeFileSync(loginPath, JSON.stringify(login)); + return login; +} + const axiosConfig: AxiosRequestConfig = { httpsAgent: new https.Agent({ rejectUnauthorized: false @@ -22,7 +58,12 @@ const axiosConfig: AxiosRequestConfig = { } async function main() { - if (process.argv[2] === 'install') { + if (process.argv[2] === 'login') { + const ip = process.argv[4] || '127.0.0.1'; + await doLogin(ip); + console.log('login successful.') + } + else if (process.argv[2] === 'install') { const ip = process.argv[4] || '127.0.0.1'; const pkg = process.argv[3]; @@ -31,47 +72,22 @@ async function main() { process.exit(1); } - const scryptedHome = path.join(getUserHome(), '.scrypted'); - const loginPath = path.join(scryptedHome, 'login.json'); - let username: string; - let password: string; let login: any; try { login = JSON.parse(fs.readFileSync(loginPath).toString()); if (typeof login !== 'object') login = {}; - + if (!login[ip].username || !login[ip].token) throw new Error(); - username = login[ip].username; - password = login[ip].token; } catch (e) { - username = readline.question('username: '); - password = readline.question('password: ', { - hideEchoBack: true, - }); - - const url = `https://${ip}:9443/login`; - const authedConfig = Object.assign({ - method: 'GET', - auth: { - username, - password, - }, - url, - }, axiosConfig); - const response = await axios(authedConfig); - - mkdirp.sync(scryptedHome); - login = login || {}; - login[ip] = response.data; - fs.writeFileSync(loginPath, JSON.stringify(login)); + login = await doLogin(ip); } const url = `https://${ip}:9443/web/component/script/install/${pkg}`; - const response = await axios.post(url, undefined, Object.assign({ - method: 'GET', + const response = await axios(Object.assign({ + method: 'POST', auth: { username: login[ip].username, password: login[ip].token, @@ -79,10 +95,12 @@ async function main() { url, }, axiosConfig)); - console.log('install successful. id:',response.data.id); - } + console.log('install successful. id:', response.data.id); + } else { - console.log('usage: npx scrypted install npm-package-name'); + console.log('usage:'); + console.log(' npx scrypted install npm-package-name [ip]'); + console.log(' npx scrypted login [ip]'); process.exit(1); } }