Skip to content

Commit 126d550

Browse files
yihong0618jdneo
authored andcommitted
add leetcode user -c that user can login with cookie (#31)
1 parent 07e8e7f commit 126d550

File tree

3 files changed

+40
-1
lines changed

3 files changed

+40
-1
lines changed

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
# leetcode-cli
88

99
> Note: This repository is forked from [leetcode-cli](https://github.com/skygragon/leetcode-cli) for temporary usage.
10+
> Note: Copy cookie from webbrowser and Using **leetcode user -c** can temporary fix can't [login problem](https://github.com/jdneo/vscode-leetcode/issues/478).
1011
1112
<img src="https://github.com/skygragon/leetcode-cli/raw/master/docs/logo.png" align="right">
1213

@@ -39,6 +40,7 @@ Great thanks to leetcode.com, a really awesome website!
3940

4041
Read help first $ leetcode help
4142
Login with your leetcode account $ leetcode user -l
43+
Cookie login with cookie $ leetcode user -c
4244
Browse all questions $ leetcode list
4345
Choose one question $ leetcode show 1 -g -l cpp
4446
Coding it!

lib/commands/user.js

+23-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@ const cmd = {
2121
default: false,
2222
describe: 'Login'
2323
})
24+
.option('c', {
25+
alias: 'cookie',
26+
type: 'boolean',
27+
default: false,
28+
describe: 'cookieLogin'
29+
})
2430
.option('L', {
2531
alias: 'logout',
2632
type: 'boolean',
@@ -29,6 +35,7 @@ const cmd = {
2935
})
3036
.example(chalk.yellow('leetcode user'), 'Show current user')
3137
.example(chalk.yellow('leetcode user -l'), 'User login')
38+
.example(chalk.yellow('leetcode user -c'), 'User Cookie login')
3239
.example(chalk.yellow('leetcode user -L'), 'User logout');
3340
}
3441
};
@@ -59,7 +66,22 @@ cmd.handler = function(argv) {
5966
log.info('Successfully logout as', chalk.yellow(user.name));
6067
else
6168
log.fail('You are not login yet?');
62-
} else {
69+
} else if (argv.cookie) {
70+
// session
71+
prompt.colors = false;
72+
prompt.message = '';
73+
prompt.start();
74+
prompt.get([
75+
{name: 'login', required: true},
76+
{name: 'cookie', required: true}
77+
], function(e, user) {
78+
if (e) return log.fail(e)
79+
core.cookieLogin(user, function(e, user) {
80+
if (e) return log.fail(e);
81+
log.info('Successfully cookie login as', chalk.yellow(user.name));
82+
});
83+
});
84+
} else {
6385
// show current user
6486
user = session.getUser();
6587
if (user) {

lib/plugins/leetcode.js

+15
Original file line numberDiff line numberDiff line change
@@ -538,4 +538,19 @@ plugin.login = function(user, cb) {
538538
});
539539
};
540540

541+
plugin.cookieLogin = function(user, cb) {
542+
// re pattern for cookie chrome or firefox
543+
const SessionPattern = /LEETCODE_SESSION=(.+?)(;|$)/;
544+
const csrfPattern = /csrftoken=(.+?)(;|$)/;
545+
const reSessionResult = SessionPattern.exec(user.cookie);
546+
const reCsrfResult = csrfPattern.exec(user.cookie);
547+
if (reSessionResult === null || reCsrfResult === null) {
548+
return cb('invalid cookie?')
549+
}
550+
user.sessionId = reSessionResult[1];
551+
user.sessionCSRF = reCsrfResult[1];
552+
session.saveUser(user);
553+
plugin.getUser(user, cb);
554+
}
555+
541556
module.exports = plugin;

0 commit comments

Comments
 (0)