|
1 | 1 | "use strict"; |
2 | | -var __importDefault = (this && this.__importDefault) || function (mod) { |
3 | | - return (mod && mod.__esModule) ? mod : { "default": mod }; |
4 | | -}; |
5 | 2 | Object.defineProperty(exports, "__esModule", { value: true }); |
6 | | -const ora_1 = __importDefault(require("ora")); |
7 | | -const logger_1 = __importDefault(require("../logger")); |
8 | 3 | const auth_1 = require("./auth"); |
9 | 4 | const utils_1 = require("../utils"); |
10 | 5 | const constant_1 = require("../constant"); |
11 | 6 | const configstore_1 = require("../utils/configstore"); |
12 | | -const error_1 = require("../error"); |
13 | 7 | const tcbService = new utils_1.CloudService('tcb', '2018-06-08'); |
14 | | -const logger = new logger_1.default('Login'); |
15 | 8 | async function checkAuth(credential) { |
16 | 9 | const { tmpSecretId, tmpSecretKey, tmpToken } = credential; |
17 | 10 | tcbService.setCredential(tmpSecretId, tmpSecretKey, tmpToken); |
18 | 11 | return await tcbService.request('DescribeEnvs'); |
19 | 12 | } |
20 | | -async function authLogin() { |
| 13 | +const LoginRes = { |
| 14 | + SUCCESS: { |
| 15 | + code: 'SUCCESS', |
| 16 | + msg: '登录成功!' |
| 17 | + }, |
| 18 | + INVALID_TOKEN: { |
| 19 | + code: 'INVALID_TOKEN', |
| 20 | + msg: '无效的身份信息!' |
| 21 | + }, |
| 22 | + CHECK_LOGIN_FAILED: { |
| 23 | + code: 'CHECK_LOGIN_FAILED', |
| 24 | + msg: '检查登录态失败' |
| 25 | + }, |
| 26 | + INVALID_PARAM(msg) { |
| 27 | + return { |
| 28 | + code: 'INVALID_PARAM', |
| 29 | + msg: `参数无效:${msg}` |
| 30 | + }; |
| 31 | + }, |
| 32 | + UNKNOWN_ERROR(msg) { |
| 33 | + return { |
| 34 | + code: 'UNKNOWN_ERROR', |
| 35 | + msg: `未知错误:${msg}` |
| 36 | + }; |
| 37 | + } |
| 38 | +}; |
| 39 | +async function loginWithToken() { |
21 | 40 | const tcbrc = utils_1.getCredentialConfig(); |
22 | 41 | if (tcbrc.secretId && tcbrc.secretKey) { |
23 | | - logger.log('您已登录,无需再次登录!'); |
24 | | - return; |
| 42 | + return LoginRes.SUCCESS; |
25 | 43 | } |
26 | 44 | const tmpExpired = Number(tcbrc.tmpExpired) || 0; |
27 | 45 | let refreshExpired = Number(tcbrc.expired) || 0; |
28 | 46 | const now = Date.now(); |
29 | 47 | if (now < tmpExpired) { |
30 | | - logger.log('您已登录,无需再次登录!'); |
31 | | - return; |
| 48 | + return LoginRes.SUCCESS; |
32 | 49 | } |
33 | 50 | let credential; |
34 | | - const authSpinner = ora_1.default('获取授权中'); |
35 | 51 | try { |
36 | 52 | if (now < refreshExpired) { |
37 | | - authSpinner.start(); |
38 | 53 | credential = await auth_1.refreshTmpToken(tcbrc); |
39 | 54 | } |
40 | 55 | else { |
41 | | - authSpinner.start(); |
42 | 56 | credential = await auth_1.getAuthTokenFromWeb(); |
43 | 57 | } |
44 | | - authSpinner.succeed('获取授权成功'); |
45 | 58 | } |
46 | | - catch (error) { |
47 | | - authSpinner.fail(`获取授权失败 ${error}`); |
48 | | - throw new error_1.TcbError(error); |
| 59 | + catch (e) { |
| 60 | + return LoginRes.UNKNOWN_ERROR(e.message); |
49 | 61 | } |
50 | 62 | if (!credential.refreshToken || !credential.uin) { |
51 | | - logger.error('授权信息无效'); |
52 | | - return; |
| 63 | + return LoginRes.INVALID_TOKEN; |
53 | 64 | } |
54 | | - const scfCheckSpinner = ora_1.default('验证密匙权限').start(); |
55 | 65 | try { |
56 | 66 | await checkAuth(credential); |
57 | | - scfCheckSpinner.succeed('密钥权限验证成功'); |
58 | 67 | } |
59 | 68 | catch (e) { |
60 | | - throw new error_1.TcbError(e.message); |
| 69 | + return LoginRes.UNKNOWN_ERROR(e.message); |
61 | 70 | } |
62 | 71 | configstore_1.configStore.set(constant_1.ConfigItems.credentail, credential); |
63 | | - logger.success('登录成功!'); |
| 72 | + return LoginRes.SUCCESS; |
64 | 73 | } |
65 | | -exports.authLogin = authLogin; |
66 | | -async function login() { |
| 74 | +exports.loginWithToken = loginWithToken; |
| 75 | +async function loginWithKey(secretId, secretKey) { |
67 | 76 | const tcbrc = await utils_1.getCredentialConfig(); |
68 | 77 | if (tcbrc.secretId && tcbrc.secretKey) { |
69 | | - logger.log('您已登录,无需再次登录!'); |
70 | | - return; |
| 78 | + return LoginRes.SUCCESS; |
71 | 79 | } |
72 | | - const secretId = (await utils_1.askForInput('请输入腾讯云 SecretID:')); |
73 | | - const secretKey = (await utils_1.askForInput('请输入腾讯云 SecretKey:')); |
74 | | - const skey = (await utils_1.askForInput('请输入腾讯云 SKey:')); |
75 | 80 | if (!secretId || !secretKey) { |
76 | | - logger.error('SecretID 或 SecretKey 不能为空'); |
77 | | - return; |
| 81 | + return LoginRes.INVALID_PARAM('SecretID 或 SecretKey 不能为空'); |
78 | 82 | } |
79 | | - const cloudSpinner = ora_1.default('正在验证腾讯云密钥...').start(); |
80 | 83 | try { |
81 | 84 | await checkAuth({ tmpSecretId: secretId, tmpSecretKey: secretKey }); |
82 | | - cloudSpinner.succeed('腾讯云密钥验证成功'); |
83 | 85 | } |
84 | 86 | catch (e) { |
85 | | - cloudSpinner.fail('腾讯云密钥验证失败,请检查密钥是否正确或本机网络代理有问题'); |
86 | | - return; |
| 87 | + return LoginRes.CHECK_LOGIN_FAILED; |
87 | 88 | } |
88 | 89 | configstore_1.configStore.set(constant_1.ConfigItems.credentail, { secretId, secretKey }); |
89 | | - logger.success('登录成功!'); |
90 | | - return skey; |
| 90 | + return LoginRes.SUCCESS; |
| 91 | +} |
| 92 | +exports.loginWithKey = loginWithKey; |
| 93 | +async function login(options) { |
| 94 | + if (options && options.key) { |
| 95 | + const { secretId, secretKey } = options; |
| 96 | + return await loginWithKey(secretId, secretKey); |
| 97 | + } |
| 98 | + else { |
| 99 | + return await loginWithToken(); |
| 100 | + } |
91 | 101 | } |
92 | 102 | exports.login = login; |
0 commit comments