Skip to content

Commit a21df89

Browse files
committed
refactor: logout.
1 parent 479bca2 commit a21df89

File tree

6 files changed

+73
-21
lines changed

6 files changed

+73
-21
lines changed

package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@
3232
"command": "codingPlugin.login",
3333
"title": "Login coding.net",
3434
"category": "Coding plugin"
35+
},
36+
{
37+
"command": "codingPlugin.logout",
38+
"title": "Logout coding.net",
39+
"category": "Coding plugin"
3540
}
3641
],
3742
"viewsWelcome": [

src/coding.ts

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,10 @@ export class CodingAuthenticationProvider {
6262
return null;
6363
}
6464

65-
public async getSessionData(accessToken: TokenType.AccessToken, refreshToken: TokenType.RefreshToken): Promise<SessionData | null> {
65+
public async getSessionData(accessToken: TokenType.AccessToken, refreshToken: TokenType.RefreshToken): Promise<SessionData> {
6666
try {
67-
const { data: userInfo } = await this._codingServer.getUserInfo(this._repo.team, accessToken);
67+
const result = await this._codingServer.getUserInfo(this._repo.team, accessToken);
68+
const { data: userInfo } = result;
6869
const ret: SessionData = {
6970
id: nanoid(),
7071
user: userInfo,
@@ -75,24 +76,41 @@ export class CodingAuthenticationProvider {
7576
vscode.window.showInformationMessage(`USER ${userInfo.name} @ TEAM ${userInfo.team}`);
7677
return ret;
7778
} catch (err) {
78-
return null;
79+
console.error(err);
80+
throw new Error(err);
7981
}
8082
}
8183

8284
public async login(team: string, scopes: string = SCOPES): Promise<SessionData | null> {
8385
const { access_token: accessToken, refresh_token: refreshToken } = await this._codingServer.login(team, scopes);
8486
if (accessToken && refreshToken) {
85-
const session = await this.getSessionData(accessToken, refreshToken);
86-
await Promise.all([
87-
keychain.setToken(accessToken, TokenType.AccessToken),
88-
keychain.setToken(refreshToken, TokenType.RefreshToken),
89-
]);
90-
return session;
87+
try {
88+
const session = await this.getSessionData(accessToken, refreshToken);
89+
await Promise.all([
90+
keychain.setToken(accessToken, TokenType.AccessToken),
91+
keychain.setToken(refreshToken, TokenType.RefreshToken),
92+
]);
93+
return session;
94+
} catch (e) {
95+
throw new Error(e);
96+
}
9197
}
9298

9399
return null;
94100
}
95101

102+
public async logout() {
103+
try {
104+
await Promise.all([
105+
keychain.deleteToken(TokenType.AccessToken),
106+
keychain.deleteToken(TokenType.RefreshToken),
107+
]);
108+
return true;
109+
} catch (e) {
110+
throw Error(e)
111+
}
112+
}
113+
96114
get session() {
97115
return this._session;
98116
}

src/codingServer.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import * as vscode from 'vscode';
22
import { nanoid } from 'nanoid';
33
import got from 'got';
44

5-
import { AuthFailResult, AuthSuccessResult, UserResponse } from './typings/respResult';
5+
import gotInstance from './common/request';
6+
import { AuthFailResult, AuthSuccessResult, CodingResponse, UserResponse } from './typings/respResult';
67
import { PromiseAdapter, promiseFromEvent, parseQuery, parseCloneUrl } from './common/utils';
78
import { GitService } from './common/gitService';
89
import { RepoInfo, SessionData } from './typings/commonTypes';
@@ -105,14 +106,20 @@ export class CodingServer {
105106

106107
public async getUserInfo(team: string, token: string = this._session?.accessToken) {
107108
try {
108-
const result: UserResponse = await got.get(`https://${team}.coding.net/api/current_user`, {
109+
const result: CodingResponse = await gotInstance.get(`https://${team}.coding.net/api/current_user`, {
109110
searchParams: {
110111
access_token: token,
111112
},
112113
}).json();
114+
115+
if (result.code) {
116+
console.error(result.msg);
117+
return Promise.reject(result.msg);
118+
}
119+
113120
return result;
114121
} catch (err) {
115-
return err;
122+
throw Error(err);
116123
}
117124
}
118125

src/common/request.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import got from 'got';
2+
3+
const instance = got.extend({
4+
resolveBodyOnly: true,
5+
});
6+
7+
export default instance;

src/extension.ts

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,42 +7,51 @@ import { Panel } from './panel';
77
import { ListProvider } from './tree';
88

99
export async function activate(context: vscode.ExtensionContext) {
10-
console.log(`activated`);
1110
const repoInfo = await CodingServer.getRepoParams();
12-
console.log(`repo `, repoInfo);
1311
const codingAuth = new CodingAuthenticationProvider(repoInfo);
1412
await codingAuth.initialize(context);
13+
14+
if (!codingAuth.session?.user) {
15+
vscode.window.showWarningMessage(`Please login first.`);
16+
}
17+
1518
const service = new CodingServer(codingAuth.session, repoInfo);
1619

1720
context.subscriptions.push(vscode.window.registerUriHandler(uriHandler));
18-
1921
context.subscriptions.push(
2022
vscode.commands.registerCommand('codingPlugin.show', () => {
2123
Panel.createOrShow(context);
2224
}),
2325
);
24-
2526
context.subscriptions.push(
2627
vscode.commands.registerCommand('codingPlugin.openConvertPage', k => {
2728
Panel.createOrShow(context);
2829
Panel.currentPanel?.broadcast(`UPDATE_CURRENCY`, k);
2930
}),
3031
);
31-
3232
context.subscriptions.push(
3333
vscode.commands.registerCommand('codingPlugin.login', async () => {
3434
const session = await codingAuth.login(repoInfo?.team || ``);
3535
if (!session?.accessToken) {
3636
console.error(`No token provided.`);
3737
}
38-
39-
console.log(`session: `, session);
38+
}),
39+
);
40+
context.subscriptions.push(
41+
vscode.commands.registerCommand('codingPlugin.logout', async () => {
42+
try {
43+
await codingAuth.logout();
44+
vscode.window.showInformationMessage(`Logout successfully.`);
45+
} catch {
46+
}
4047
}),
4148
);
4249

43-
vscode.window.registerTreeDataProvider(
50+
vscode.window.createTreeView(
4451
`treeviewSample`,
45-
new ListProvider(context, service, repoInfo),
52+
{
53+
treeDataProvider: new ListProvider(context, service, repoInfo),
54+
},
4655
);
4756

4857
if (vscode.window.registerWebviewPanelSerializer) {

src/typings/respResult.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,9 @@ export interface MRData {
2828
iid: number;
2929
title: string;
3030
}
31+
32+
export interface CodingResponse {
33+
code: number,
34+
data?: any,
35+
msg?: string
36+
}

0 commit comments

Comments
 (0)