Skip to content
This repository was archived by the owner on May 6, 2025. It is now read-only.

Commit 4f4f474

Browse files
committed
support add multi login config
1 parent dace477 commit 4f4f474

10 files changed

Lines changed: 271 additions & 116 deletions

File tree

.gitignore

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,5 +66,6 @@ example/**/tcb.json
6666

6767
node_modules
6868

69-
.vscode
70-
.idea
69+
.idea
70+
.vscode/*
71+
!.vscode/launch.json

.vscode/launch.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{
2+
// 使用 IntelliSense 了解相关属性。
3+
// 悬停以查看现有属性的描述。
4+
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
5+
"version": "0.2.0",
6+
"configurations": [
7+
{
8+
"type": "node",
9+
"request": "launch",
10+
"name": "Debug: cloudbase logout",
11+
"program": "${workspaceFolder}/bin/cloudbase.js",
12+
"args": [
13+
"logout"
14+
],
15+
"outFiles": [
16+
"${workspaceFolder}/lib/**/*.js"
17+
]
18+
}
19+
]
20+
}

bin/cloudbase.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ require('../lib')
4040

4141
const store = require('../lib/utils/store')
4242

43-
// 设置用户的 uin
43+
// 设置 Sentry 上报的用户 uin
4444
Sentry.configureScope(scope => {
4545
try {
4646
const credential = store.authStore.get('credential') || {}

lib/commands/env/index.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,25 @@ commander_1.default
2525
return __awaiter(this, void 0, void 0, function* () {
2626
const data = yield env_1.listEnvs();
2727
const head = [
28-
'EnvId',
2928
'Alias',
29+
'EnvId',
3030
'PackageName',
3131
'Source',
3232
'CreateTime',
3333
'Status'
3434
];
35-
const tableData = data.map(item => [
36-
item.EnvId,
35+
const sortData = data.sort((prev, next) => {
36+
if (prev.Alias > next.Alias) {
37+
return 1;
38+
}
39+
if (prev.Alias < next.Alias) {
40+
return -1;
41+
}
42+
return 0;
43+
});
44+
const tableData = sortData.map(item => [
3745
item.Alias,
46+
item.EnvId,
3847
item.PackageName,
3948
item.Source === 'miniapp' ? '小程序' : '云开发',
4049
item.CreateTime,

lib/commands/env/login.js

Lines changed: 102 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ const inquirer_1 = __importDefault(require("inquirer"));
1616
const utils_1 = require("../../utils");
1717
const logger_1 = require("../../logger");
1818
const env_1 = require("../../env");
19+
const error_1 = require("../../error");
20+
const platformMap = {
21+
'WECHAT-OPEN': '微信开放平台',
22+
'WECHAT-PUBLIC': '微信公众平台'
23+
};
1924
commander_1.default
2025
.command('env:login:list [envId]')
2126
.description('列出环境登录配置')
@@ -26,64 +31,120 @@ commander_1.default
2631
const configList = yield env_1.getLoginConfigList({
2732
envId: assignEnvId
2833
});
29-
const platformMap = {
30-
'WECHAT-OPEN': '微信开放平台',
31-
'WECHAT-PUBLIC': '微信公众平台'
32-
};
33-
const head = ['Id', 'Platform', 'CreateTime', 'Status'];
34+
const head = ['平台', '平台 Id', '创建时间', '状态'];
3435
const tableData = configList.map(item => [
35-
item.Id,
3636
platformMap[item.Platform]
3737
? platformMap[item.Platform]
3838
: item.Platform,
39+
item.PlatformId,
3940
item.CreateTime,
40-
item.Status === 'ENABLE' ? '启用' : '禁用中'
41+
item.Status === 'ENABLE' ? '启用' : '禁用'
4142
]);
4243
utils_1.printCliTable(head, tableData);
4344
});
4445
});
4546
commander_1.default
46-
.command('env:login:config [envId]')
47-
.description('配置环境登录方式')
47+
.command('env:login:create [envId]')
48+
.description('创建环境登录配置')
4849
.action(function (envId, options) {
4950
return __awaiter(this, void 0, void 0, function* () {
5051
const { configFile } = options.parent;
5152
const assignEnvId = yield utils_1.getEnvId(envId, configFile);
52-
const configList = yield env_1.getLoginConfigList({
53-
envId: assignEnvId
54-
});
55-
const { type, status } = yield inquirer_1.default.prompt([
53+
const { platform, status, appId, appSecret } = yield inquirer_1.default.prompt([
5654
{
5755
type: 'list',
58-
name: 'type',
59-
choices: ['微信公众平台', '微信开放平台'],
56+
name: 'platform',
57+
choices: [
58+
{
59+
name: '微信公众平台',
60+
value: 'WECHAT-PUBLIC'
61+
},
62+
{
63+
name: '微信开放平台',
64+
value: 'WECHAT-OPEN'
65+
}
66+
],
6067
message: '请选择登录方式:',
61-
default: '微信公众平台'
68+
default: 'WECHAT-PUBLIC'
6269
},
6370
{
6471
type: 'list',
6572
name: 'status',
66-
choices: ['启用', '禁用'],
73+
choices: [
74+
{
75+
name: '启用',
76+
value: 'ENABLE'
77+
},
78+
{
79+
name: '禁用',
80+
value: 'DISABLE'
81+
}
82+
],
6783
message: '请选择登录方式状态:',
68-
default: '启用'
84+
default: 'ENABLE'
85+
},
86+
{
87+
type: 'input',
88+
name: 'appId',
89+
message: '请输入 AppId:'
90+
},
91+
{
92+
type: 'input',
93+
name: 'appSecret',
94+
message: '请输入 AppSecret:'
6995
}
7096
]);
71-
const platformMap = {
72-
微信开放平台: 'WECHAT-OPEN',
73-
微信公众平台: 'WECHAT-PUBLIC'
74-
};
75-
const platform = platformMap[type];
76-
const item = configList.find(item => item.Platform === platform);
77-
if (status === '禁用' && item) {
78-
yield env_1.updateLoginConfig({
79-
status: status === '启用' ? 'ENABLE' : 'DISABLE',
80-
configId: item.Id,
81-
envId: assignEnvId
82-
});
83-
logger_1.successLog(`${type} 登录方式禁用成功!`);
84-
return;
97+
if (!appId || !appSecret) {
98+
throw new error_1.CloudBaseError('appId 和 appSecret 不能为空!');
8599
}
86-
const { appId, appSecret } = yield inquirer_1.default.prompt([
100+
yield env_1.createLoginConfig({
101+
envId: assignEnvId,
102+
appId,
103+
appSecret,
104+
platform,
105+
status
106+
});
107+
logger_1.successLog('创建登录方式成功!');
108+
});
109+
});
110+
commander_1.default
111+
.command('env:login:update [envId]')
112+
.description('更新环境登录方式配置')
113+
.action(function (envId, options) {
114+
return __awaiter(this, void 0, void 0, function* () {
115+
const { configFile } = options.parent;
116+
const assignEnvId = yield utils_1.getEnvId(envId, configFile);
117+
const configList = yield env_1.getLoginConfigList({
118+
envId: assignEnvId
119+
});
120+
const configChoices = configList.map(item => ({
121+
name: `${platformMap[item.Platform]}${item.PlatformId} [${item.Status === 'ENABLE' ? '启用' : '禁用'}]`,
122+
value: item.Id,
123+
short: `${platformMap[item.Platform]}${item.PlatformId}`
124+
}));
125+
const { configId, status, appId, appSecret } = yield inquirer_1.default.prompt([
126+
{
127+
type: 'list',
128+
name: 'configId',
129+
choices: configChoices,
130+
message: '请选择需要配置的条目:'
131+
},
132+
{
133+
type: 'list',
134+
name: 'status',
135+
choices: [
136+
{
137+
name: '启用',
138+
value: 'ENABLE'
139+
},
140+
{
141+
name: '禁用',
142+
value: 'DISABLE'
143+
}
144+
],
145+
message: '请选择登录方式状态:',
146+
default: '启用'
147+
},
87148
{
88149
type: 'input',
89150
name: 'appId',
@@ -95,22 +156,13 @@ commander_1.default
95156
message: '请输入 AppSecret(配置状态时可不填):'
96157
}
97158
]);
98-
if (item && item.Id) {
99-
yield env_1.updateLoginConfig({
100-
envId: assignEnvId,
101-
configId: item.Id,
102-
appId,
103-
appSecret
104-
});
105-
}
106-
else {
107-
yield env_1.createLoginConfig({
108-
envId: assignEnvId,
109-
appId,
110-
appSecret,
111-
platform
112-
});
113-
}
114-
logger_1.successLog('配置环境登录方式成功!');
159+
yield env_1.updateLoginConfig({
160+
envId: assignEnvId,
161+
configId,
162+
appId,
163+
appSecret,
164+
status
165+
});
166+
logger_1.successLog('更新登录方式成功!');
115167
});
116168
});

lib/env/login.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ function getLoginConfigList({ envId }) {
4040
});
4141
}
4242
exports.getLoginConfigList = getLoginConfigList;
43-
function createLoginConfig({ envId, platform, appId, appSecret }) {
43+
function createLoginConfig({ envId, platform, appId, appSecret, status }) {
4444
return __awaiter(this, void 0, void 0, function* () {
4545
const validPlatform = ['WECHAT-OPEN', 'WECHAT-PUBLIC'];
4646
if (!validPlatform.includes(platform)) {
@@ -51,7 +51,7 @@ function createLoginConfig({ envId, platform, appId, appSecret }) {
5151
Platform: platform,
5252
PlatformId: appId,
5353
PlatformSecret: rsaEncrypt(appSecret),
54-
Status: 'ENABLE'
54+
Status: status
5555
});
5656
});
5757
}

src/commands/env/index.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,27 @@ program
1313
.action(async function() {
1414
const data = await listEnvs()
1515
const head = [
16-
'EnvId',
1716
'Alias',
17+
'EnvId',
1818
'PackageName',
1919
'Source',
2020
'CreateTime',
2121
'Status'
2222
]
23-
const tableData = data.map(item => [
24-
item.EnvId,
23+
24+
const sortData = data.sort((prev, next) => {
25+
if (prev.Alias > next.Alias) {
26+
return 1
27+
}
28+
if (prev.Alias < next.Alias) {
29+
return -1
30+
}
31+
return 0
32+
})
33+
34+
const tableData = sortData.map(item => [
2535
item.Alias,
36+
item.EnvId,
2637
item.PackageName,
2738
item.Source === 'miniapp' ? '小程序' : '云开发',
2839
item.CreateTime,
@@ -70,7 +81,7 @@ program
7081
throw new CloudBaseError('环境名称不能为空!')
7182
}
7283

73-
const loading = loadingFactory()
84+
const loading = loadingFactory()
7485

7586
loading.start('创建环境中')
7687

0 commit comments

Comments
 (0)