From 99c4108c0355eb178c4fc2c379e6a7d7f4c31d51 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Sun, 12 Jan 2020 14:14:35 +0800 Subject: [PATCH 1/2] Refine the result parsing logic --- package-lock.json | 18 +++++++++--------- package.json | 2 +- src/leetCodeManager.ts | 23 ++++++++++++----------- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/package-lock.json b/package-lock.json index 029e6498..4c5bf850 100644 --- a/package-lock.json +++ b/package-lock.json @@ -518,9 +518,9 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escodegen": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz", - "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.1.tgz", + "integrity": "sha512-Q8t2YZ+0e0pc7NRVj3B4tSQ9rim1oi4Fh46k2xhJ2qOiEwhQfdjyEQddWdj7ZFaKmU+5104vn1qrcjEPWq+bgQ==", "optional": true, "requires": { "esprima": "^3.1.3", @@ -1284,9 +1284,9 @@ "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" }, "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", "requires": { "p-try": "^2.0.0" } @@ -1797,9 +1797,9 @@ } }, "vsc-leetcode-cli": { - "version": "2.6.19", - "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.19.tgz", - "integrity": "sha512-xvfdNe98N/mPR7VLCg1z0J5pn6QBVfI9kPqxFt6tZEIQNMeHrPlG6L5JA0LDJNVSCDWOyDsT77w3spA533XFPg==", + "version": "2.6.22", + "resolved": "https://registry.npmjs.org/vsc-leetcode-cli/-/vsc-leetcode-cli-2.6.22.tgz", + "integrity": "sha512-/mKAQtwabtzZfbQlJO9k9qotx7qgtDFZnZ6TkO3NrfUyne2jTXLzDBN+/66fcXUyX5fpxKYBx81icChGRnT7CQ==", "requires": { "ansi-styles": "3.2.1", "cheerio": "0.20.0", diff --git a/package.json b/package.json index 743b2803..315f86eb 100644 --- a/package.json +++ b/package.json @@ -683,6 +683,6 @@ "markdown-it": "^8.4.2", "require-from-string": "^2.0.2", "unescape-js": "^1.1.1", - "vsc-leetcode-cli": "2.6.20" + "vsc-leetcode-cli": "2.6.22" } } diff --git a/src/leetCodeManager.ts b/src/leetCodeManager.ts index 25439048..5ee1c433 100644 --- a/src/leetCodeManager.ts +++ b/src/leetCodeManager.ts @@ -14,6 +14,8 @@ import * as wsl from "./utils/wslUtils"; class LeetCodeManager extends EventEmitter { private currentUser: string | undefined; private userStatus: UserStatus; + private readonly successRegex: RegExp = /(?:.*)Successfully .*login as (.*)/i; + private readonly failRegex: RegExp = /.*\[ERROR\].*/i; constructor() { super(); @@ -87,6 +89,7 @@ class LeetCodeManager extends EventEmitter { if (data.includes("twoFactorCode")) { const twoFactor: string | undefined = await vscode.window.showInputBox({ prompt: "Enter two-factor code.", + ignoreFocusOut: true, validateInput: (s: string): string | undefined => s && s.trim() ? undefined : "The input must not be empty", }); if (!twoFactor) { @@ -94,13 +97,14 @@ class LeetCodeManager extends EventEmitter { return resolve(undefined); } childProc.stdin.write(`${twoFactor}\n`); + } + const successMatch: RegExpMatchArray | null = data.match(this.successRegex); + if (successMatch && successMatch[1]) { childProc.stdin.end(); - } else { - const match: RegExpMatchArray | null = data.match(/(?:.*)Successfully .*login as (.*)/i); - if (match && match[1]) { - childProc.stdin.end(); - return resolve(match[1]); - } + return resolve(successMatch[1]); + } else if (data.match(this.failRegex)) { + childProc.stdin.end(); + return reject(new Error("Faile to login")); } }); @@ -109,6 +113,7 @@ class LeetCodeManager extends EventEmitter { childProc.on("error", reject); const name: string | undefined = await vscode.window.showInputBox({ prompt: "Enter username or E-mail.", + ignoreFocusOut: true, validateInput: (s: string): string | undefined => s && s.trim() ? undefined : "The input must not be empty", }); if (!name) { @@ -119,6 +124,7 @@ class LeetCodeManager extends EventEmitter { const pwd: string | undefined = await vscode.window.showInputBox({ prompt: isByCookie ? "Enter cookie" : "Enter password.", password: true, + ignoreFocusOut: true, validateInput: (s: string): string | undefined => s ? undefined : isByCookie ? "Cookie must not be empty" : "Password must not be empty", }); if (!pwd) { @@ -126,11 +132,6 @@ class LeetCodeManager extends EventEmitter { return resolve(undefined); } childProc.stdin.write(`${pwd}\n`); - childProc.on("close", (code: number) => { - if (code !== 0) { - reject(new Error("Failed to login.")); - } - }); }); if (userName) { vscode.window.showInformationMessage(`Successfully ${inMessage}.`); From beda7adcc4e2b3df797ff29bc1cf34421d5bd581 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Sun, 12 Jan 2020 14:21:17 +0800 Subject: [PATCH 2/2] Change login option order --- src/leetCodeManager.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/leetCodeManager.ts b/src/leetCodeManager.ts index 5ee1c433..27a17103 100644 --- a/src/leetCodeManager.ts +++ b/src/leetCodeManager.ts @@ -44,11 +44,6 @@ class LeetCodeManager extends EventEmitter { detail: "Use LeetCode account to login", value: "LeetCode", }, - { - label: "LeetCode Cookie", - detail: "Use LeetCode cookie copied from browser to login", - value: "Cookie", - }, { label: "Third-Party: GitHub", detail: "Use GitHub account to login", @@ -59,6 +54,11 @@ class LeetCodeManager extends EventEmitter { detail: "Use LinkedIn account to login", value: "LinkedIn", }, + { + label: "LeetCode Cookie", + detail: "Use LeetCode cookie copied from browser to login", + value: "Cookie", + }, ); const choice: IQuickItemEx | undefined = await vscode.window.showQuickPick(picks); if (!choice) {