@oceans/cli
Version:
work for oceans
80 lines (65 loc) • 2.22 kB
JavaScript
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)
})
})
}