Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 94ac8a4

Browse files
committed
support GitHub and LinkedIn login for leetcode-cn.com
1 parent 294dbe2 commit 94ac8a4

File tree

2 files changed

+37
-15
lines changed

2 files changed

+37
-15
lines changed

lib/plugins/leetcode.cn.js

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,24 @@ var plugin = new Plugin(15, 'leetcode.cn', '2018.11.25',
1717

1818
plugin.init = function() {
1919
config.app = 'leetcode.cn';
20-
config.sys.urls.base = 'https://leetcode-cn.com';
21-
config.sys.urls.login = 'https://leetcode-cn.com/accounts/login/';
22-
config.sys.urls.problems = 'https://leetcode-cn.com/api/problems/$category/';
23-
config.sys.urls.problem = 'https://leetcode-cn.com/problems/$slug/description/';
24-
config.sys.urls.graphql = 'https://leetcode-cn.com/graphql';
25-
config.sys.urls.problem_detail = 'https://leetcode-cn.com/graphql';
26-
config.sys.urls.test = 'https://leetcode-cn.com/problems/$slug/interpret_solution/';
27-
config.sys.urls.session = 'https://leetcode-cn.com/session/';
28-
config.sys.urls.submit = 'https://leetcode-cn.com/problems/$slug/submit/';
29-
config.sys.urls.submissions = 'https://leetcode-cn.com/api/submissions/$slug';
30-
config.sys.urls.submission = 'https://leetcode-cn.com/submissions/detail/$id/';
31-
config.sys.urls.verify = 'https://leetcode-cn.com/submissions/detail/$id/check/';
32-
config.sys.urls.favorites = 'https://leetcode-cn.com/list/api/questions';
33-
config.sys.urls.favorite_delete = 'https://leetcode-cn.com/list/api/questions/$hash/$id';
20+
config.sys.urls.base = 'https://leetcode-cn.com';
21+
config.sys.urls.login = 'https://leetcode-cn.com/accounts/login/';
22+
config.sys.urls.problems = 'https://leetcode-cn.com/api/problems/$category/';
23+
config.sys.urls.problem = 'https://leetcode-cn.com/problems/$slug/description/';
24+
config.sys.urls.graphql = 'https://leetcode-cn.com/graphql';
25+
config.sys.urls.problem_detail = 'https://leetcode-cn.com/graphql';
26+
config.sys.urls.test = 'https://leetcode-cn.com/problems/$slug/interpret_solution/';
27+
config.sys.urls.session = 'https://leetcode-cn.com/session/';
28+
config.sys.urls.submit = 'https://leetcode-cn.com/problems/$slug/submit/';
29+
config.sys.urls.submissions = 'https://leetcode-cn.com/api/submissions/$slug';
30+
config.sys.urls.submission = 'https://leetcode-cn.com/submissions/detail/$id/';
31+
config.sys.urls.verify = 'https://leetcode-cn.com/submissions/detail/$id/check/';
32+
config.sys.urls.favorites = 'https://leetcode-cn.com/list/api/questions';
33+
config.sys.urls.favorite_delete = 'https://leetcode-cn.com/list/api/questions/$hash/$id';
34+
// third parties
35+
config.sys.urls.github_login = 'https://leetcode-cn.com/accounts/github/login/?next=%2F';
36+
config.sys.urls.linkedin_login = 'https://leetcode-cn.com/accounts/linkedin_oauth2/login/?next=%2F';
37+
config.sys.urls.leetcode_redirect = 'https://leetcode-cn.com/';
3438
};
3539

3640
// FIXME: refactor those

lib/plugins/leetcode.js

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -552,13 +552,31 @@ function parseCookie(cookie, cb) {
552552
};
553553
}
554554

555+
// leetcode-cn.com Cookie is not the same as leetcode.com in third parties
556+
function parseCNCookie(cookie, body, cb) {
557+
const SessionPattern = /LEETCODE_SESSION=(.+?)(;|$)/;
558+
const csrfPattern = /name="csrfmiddlewaretoken" value="(.*?)"/;
559+
const reSessionResult = SessionPattern.exec(cookie);
560+
const reCsrfResult = csrfPattern.exec(body);
561+
if (reSessionResult === null || reCsrfResult === null) {
562+
return cb('invalid cookie?');
563+
}
564+
return {
565+
sessionId: reSessionResult[1],
566+
sessionCSRF: reCsrfResult[1],
567+
};
568+
}
569+
555570
function requestLeetcodeAndSave(request, leetcodeUrl, user, cb, party) {
556571
request.get({url: leetcodeUrl}, function(e, resp, body) {
557572
const redirectUri = resp.request.uri.href;
558573
if (redirectUri !== config.sys.urls.leetcode_redirect) {
559574
return cb(`${party} login failed or ${party} did not connect to LeetCode`);
560575
}
561-
const cookieData = parseCookie(resp.request.headers.cookie, cb);
576+
let cookieData = {}
577+
if (leetcodeUrl.includes('cn')) {
578+
cookieData = parseCNCookie(resp.request.headers.cookie, body, cb);
579+
} else cookieData = parseCookie(resp.request.headers.cookie, cb)
562580
user.sessionId = cookieData.sessionId;
563581
user.sessionCSRF = cookieData.sessionCSRF;
564582
session.saveUser(user);

0 commit comments

Comments
 (0)