Skip to content

Commit 177edeb

Browse files
committed
1.adjust log out logic. 2.support input region
1 parent 70e5322 commit 177edeb

File tree

10 files changed

+175
-110
lines changed

10 files changed

+175
-110
lines changed

package.json

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -112,14 +112,9 @@
112112
}
113113
],
114114
"commands": [
115-
{
116-
"command": "tcTerraform.login.status",
117-
"title": "login.status",
118-
"category": "tiat internel category"
119-
},
120115
{
121116
"command": "tcTerraform.login",
122-
"title": "Login: %TcTerraform.view.login.welcome%",
117+
"title": "Login",
123118
"category": "TencentCloud Terraform"
124119
},
125120
{
@@ -211,14 +206,17 @@
211206
},
212207
"tcTerraform.properties.secretId": {
213208
"type": "string",
214-
"default": "your_secretid",
215209
"description": "Input your Tencent Cloud secret Id."
216210
},
217211
"tcTerraform.properties.secretKey": {
218212
"type": "string",
219-
"default": "your_secretkey",
220213
"description": "Input your Tencent Cloud secret key."
221214
},
215+
"tcTerraform.properties.region": {
216+
"type": "string",
217+
"default": "ap-guangzhou",
218+
"description": "Input your region."
219+
},
222220
"tcTerraform.checkTerraformCmd": {
223221
"type": "boolean",
224222
"default": "true",

package.nls.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,15 @@
1515
"TcTerraform.view.help.doc": "Documentation",
1616
"TcTerraform.view.help.repo": "GitHub Repository",
1717
"TcTerraform.pickup.aksk": "Sign in with [Secret Id/Secret Key]",
18+
"TcTerraform.pickup.region": "Sign in with your [Region]",
1819
"TcTerraform.pickup.oauth": "Sign in with [Tencent Cloud authoritication] (Coming Soon...)",
19-
"TcTerraform.pickup.aksk.placeholder": "Please input your API {0}",
20+
"TcTerraform.pickup.aksk.placeholder": "Tencent Cloud {0}",
2021
"TcTerraform.pickup.aksk.verify.empty": "{0} can not be empty",
2122
"TcTerraform.welcome": "Welcome to use Tencent Cloud Terraform extension, please wait for the page loading...",
2223
"TcTerraform.msg.aksk.notfound": "Cannot find TENCENTCLOUD_SECRET_ID and TENCENTCLOUD_SECRET_KEY, please sign in first!",
2324
"TcTerraform.login": "Login Tencent Cloud...",
2425
"TcTerraform.login.msg.success": "Logged into Tencent Cloud successfully.",
25-
"TcTerraform.login.msg.failed": "Logged failed, please try angin.",
26+
"TcTerraform.login.msg.need.login": "Please log in Tencent Cloud first.",
2627
"TcTerraform.common.yes": "Yes",
2728
"TcTerraform.common.no": "No"
2829
}

src/client/runner/terraformRunner.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ export class TerraformRunner extends BaseRunner {
130130
}
131131

132132
private setAKSK(runner?: any) {
133-
const [ak, sk] = settingUtils.getAKSK();
133+
const [ak, sk, region] = settingUtils.getAKSKandRegion();
134134
terraformShellManager.getIntegratedShell(runner).runNormalCmd("export TENCENTCLOUD_SECRET_ID=" + ak);
135135
terraformShellManager.getIntegratedShell(runner).runNormalCmd("export TENCENTCLOUD_SECRET_KEY=" + sk);
136136
}

src/commons/tencent/user/auth/credentail.ts

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,27 @@ import MultiStepInput from "../../../multiStepInput";
22
import { Credential } from "tencentcloud-sdk-nodejs/tencentcloud/common/interface";
33
import { localize } from "vscode-nls-i18n";
44
import constant from "../index";
5+
import * as vscode from "vscode";
56

67
export async function getCredentailByInput() {
8+
const defaultRegion = "ap-guangzhou";
79
const title = localize(constant.AKSK_TITLE);
10+
const regionTitle = localize("TcTerraform.pickup.region");
811
async function collectInputs() {
9-
const state = {} as Partial<Credential>;
12+
const state = {} as Partial<Credential> & { region: string };
1013
await MultiStepInput.run((input) => inputSecretId(input, state));
11-
return state as Required<Omit<Credential, "token">>;
14+
// return state as Required<Omit<Credential, "token">>;
15+
return state as Required<Omit<Credential, "token">> & { region: string };
1216
}
1317

1418
async function inputSecretId(
1519
input: MultiStepInput,
16-
state: Partial<Credential>
20+
state: Partial<Credential> & { region: string }
1721
) {
1822
state.secretId = await input.showInputBox({
1923
title,
2024
step: 1,
21-
totalSteps: 2,
25+
totalSteps: 3,
2226
value: state.secretId || "",
2327
placeholder: localize(constant.AKSK_PLACEHOLD, "SecretId"),
2428
validate: validateInput.bind({ key: "SecretId " }),
@@ -28,16 +32,34 @@ export async function getCredentailByInput() {
2832

2933
async function inpuSecretKey(
3034
input: MultiStepInput,
31-
state: Partial<Credential>
35+
state: Partial<Credential> & { region: string }
3236
) {
3337
state.secretKey = await input.showInputBox({
3438
title,
3539
step: 2,
36-
totalSteps: 2,
40+
totalSteps: 3,
3741
value: state.secretKey || "",
3842
placeholder: localize(constant.AKSK_PLACEHOLD, "SecretKey"),
3943
validate: validateInput.bind({ key: "SecretKey " }),
4044
});
45+
return (input: MultiStepInput) => inpuRegion(input, state);
46+
}
47+
48+
async function inpuRegion(
49+
input: MultiStepInput,
50+
state: Partial<Credential> & { region: string }
51+
) {
52+
53+
state.region = await input.showInputBox({
54+
title: regionTitle,
55+
step: 3,
56+
totalSteps: 3,
57+
value: state.region || "",
58+
placeholder: defaultRegion,
59+
prompt: "Input Region",
60+
validate: validateInput.bind({ key: "Region " }),
61+
});
62+
4163
}
4264

4365
async function validateInput(this: { key: string }, value: string) {

src/commons/tencent/user/index.ts

Lines changed: 61 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ import { AbstractClient } from "tencentcloud-sdk-nodejs/tencentcloud/common/abst
99
import { Credential } from "tencentcloud-sdk-nodejs/tencentcloud/common/interface";
1010
import { getCamClient, getStsClient } from "@/connectivity/client";
1111
import * as loginMgt from "../../../views/login/loginMgt";
12+
import * as settingUtils from "../../../utils/settingUtils";
1213

1314
export namespace user {
14-
interface UserInfo {
15+
export interface UserInfo {
1516
secretId: string;
1617
secretKey: string;
1718
token?: string;
@@ -40,71 +41,81 @@ export namespace user {
4041
const credential = await getCredentailByInput();
4142
const accessKey = credential.secretId;
4243
const secretKey = credential.secretKey;
44+
const region = credential.region;
4345

4446
// get configuration
4547
const config = workspace.getConfiguration();
48+
4649
// set in vscode configuration(setting.json)
47-
config.update('tcTerraform.properties.secretId', accessKey, ConfigurationTarget.Global)
50+
await config.update('tcTerraform.properties.secretId', accessKey, ConfigurationTarget.Global)
51+
.then(() => {
52+
}, (error) => {
53+
window.showErrorMessage('set secretId failed: ' + error);
54+
});
55+
await config.update('tcTerraform.properties.secretKey', secretKey, ConfigurationTarget.Global)
4856
.then(() => {
4957
}, (error) => {
50-
window.showErrorMessage('设置secretId失败: ' + error);
58+
window.showErrorMessage('set secretKey failed: ' + error);
5159
});
52-
config.update('tcTerraform.properties.secretKey', secretKey, ConfigurationTarget.Global)
60+
await config.update('tcTerraform.properties.region', region, ConfigurationTarget.Global)
5361
.then(() => {
5462
}, (error) => {
55-
window.showErrorMessage('设置secretKey失败: ' + error);
63+
window.showErrorMessage('set region failed: ' + error);
5664
});
5765

5866
// set in system environment
5967
process.env.TENCENTCLOUD_SECRET_ID = accessKey;
6068
process.env.TENCENTCLOUD_SECRET_KEY = secretKey;
69+
process.env.TENCENTCLOUD_REGION = region;
6170

62-
// query user info
63-
const stsResp = await (await getStsClient()).GetCallerIdentity().
64-
then(
65-
(result) => {
66-
console.debug('[DEBUG]--------------------------------result:', result);
67-
if (!result) {
68-
throw new Error('[Warn] GetCallerIdentity result.TotalCount is 0.');
71+
try {
72+
// query user info
73+
const stsClient = await getStsClient();
74+
const stsResp = await stsClient?.GetCallerIdentity().
75+
then(
76+
(result) => {
77+
console.debug('[DEBUG]--------------------------------result:', result);
78+
if (!result) {
79+
throw new Error('[Warn] GetCallerIdentity result.TotalCount is 0.');
80+
}
81+
return result;
82+
},
83+
(err) => {
84+
throw new Error(err);
6985
}
70-
return result;
71-
},
72-
(err) => {
73-
console.error('[TencentCloudSDKError] GetCallerIdentity got a error from SDK.', err.message);
74-
window.showErrorMessage('Login Failed. Reason:' + err.message);
75-
return err;
76-
}
77-
);
78-
79-
const camResp = await (await getCamClient()).GetUserAppId().
80-
then(
81-
(result) => {
82-
console.debug('[DEBUG]--------------------------------result:', result);
83-
if (!result) {
84-
throw new Error('[Warn] GetUserAppId result.TotalCount is 0.');
86+
);
87+
88+
const camClient = await getCamClient();
89+
const camResp = await camClient?.GetUserAppId().
90+
then(
91+
(result) => {
92+
console.debug('[DEBUG]--------------------------------result:', result);
93+
if (!result) {
94+
throw new Error('[Warn] GetUserAppId result.TotalCount is 0.');
95+
}
96+
return result;
97+
},
98+
(err) => {
99+
throw new Error(err);
85100
}
86-
return result;
87-
},
88-
(err) => {
89-
console.error('[TencentCloudSDKError] GetUserAppId got a error from SDK.', err.message);
90-
window.showErrorMessage('Login Failed. Reason:' + err.message);
91-
return err;
92-
}
93-
);
94-
95-
// set user info
96-
let userinfo: UserInfo = {
97-
secretId: accessKey,
98-
secretKey: secretKey,
99-
uin: stsResp.PrincipalId ?? stsResp.UserId ?? "-",
100-
type: stsResp.Type ?? "unknow",
101-
appid: camResp.AppId ?? "-",
102-
arn: stsResp.Arn,
103-
region: process.env.TENCENTCLOUD_REGION ?? "unknow",
104-
};
105-
setInfo(userinfo);
106-
107-
// tree.refreshTreeData();
101+
);
102+
103+
// set user info
104+
let userinfo: UserInfo = {
105+
secretId: accessKey,
106+
secretKey: secretKey,
107+
uin: stsResp.PrincipalId ?? stsResp.UserId ?? "-",
108+
type: stsResp.Type ?? "unknow",
109+
appid: String(camResp.AppId) ?? "-",
110+
arn: stsResp.Arn,
111+
region: region ?? "unknow",
112+
};
113+
setInfo(userinfo);
114+
115+
} catch (err) {
116+
console.error('[TencentCloudSDKError]', err.message);
117+
window.showErrorMessage('Login Failed. Reason:' + err.message);
118+
}
108119
}
109120
if (oauth === pick) {
110121
// to do
@@ -127,6 +138,7 @@ export namespace user {
127138

128139
await clearInfo();
129140
loginMgt.clearStatusBar();
141+
settingUtils.clearAKSKandRegion();
130142

131143
tree.refreshTreeData();
132144
}

0 commit comments

Comments
 (0)