UNPKG

@oceans/cli

Version:

work for oceans

80 lines (65 loc) 2.22 kB
const readline = require('readline') const utils = require('../common/utils') const { API_DOMAIN, LOGIN_TOKEN_EXPIRED } = require('../config') const { login } = require('../common/api') const Account = require('../model/account') module.exports = async (loginStr) => { const TIPS = 'userName[@http://xxx.cloudfh.com]' const logger = utils.getLogger() logger.info('login params => ' + loginStr) if (!loginStr) { // 如果没有写名字,那么拿到最后一个使用的用户信息进行操作 const account = new Account() const accountInfo = await account.findTheLastActiveAccount() const now = new Date() logger.info('login old record => ' + (accountInfo ? JSON.stringify(accountInfo) : 'null')) if (!accountInfo || now > accountInfo.expired) { logger.info('You need to login system, command -> $: oceans-cli login ' + TIPS) return false } return accountInfo } let username = '' let apiDomain = API_DOMAIN if (loginStr.indexOf('@') === -1) { username = loginStr } else { const temp = loginStr.split('@') username = temp[0] apiDomain = temp[1] if (apiDomain.indexOf('http') !== 0) { logger.info('The api domain protocol is necessary,' + TIPS) return false } } const rl = readline.createInterface({ input: process.stdin, output: process.stdout }) rl.question('password: ', (answer) => { const password = answer.trim() const errorFn = (e) => { logger.info('login fail => ' + e.message) rl.close() } logger.info('login action request => ' + username) login(username, password, apiDomain).then((rs) => { logger.info('login action response => ' + rs ? JSON.stringify(rs) : 'null') const account = new Account() // 只记录一个帐号的信息 account.refreshUser(Account.AccountKey, { username, domain: apiDomain, expired: new Date().getTime() + LOGIN_TOKEN_EXPIRED, loginTime: new Date(), token: rs.iToken }).then(() => { logger.info(`welcome ${rs.name}, login success.`) }).catch((e) => { errorFn(e) }) }).catch((e) => { errorFn(e) }) }) }