Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8eae48f

Browse files
author
Sandy
authored
Merge pull request #16 from openset/develop
Add: AccountsLogin
2 parents d3826f1 + cd6f1f5 commit 8eae48f

File tree

5 files changed

+97
-2
lines changed

5 files changed

+97
-2
lines changed

‎internal/leetcode/base.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package leetcode
2+
3+
import (
4+
"encoding/json"
5+
"io/ioutil"
6+
"net/http"
7+
"os"
8+
"os/user"
9+
"path"
10+
)
11+
12+
func checkErr(err error) {
13+
if err != nil {
14+
panic(err)
15+
}
16+
}
17+
18+
func getCsrfToken(cookies []*http.Cookie) string {
19+
for _, cookie := range cookies {
20+
if cookie.Name == "csrftoken" {
21+
return cookie.Value
22+
}
23+
}
24+
return ""
25+
}
26+
27+
func getPath(f string) string {
28+
dir := os.TempDir()
29+
u, err := user.Current()
30+
if err == nil && u.HomeDir != "" {
31+
dir = path.Join(u.HomeDir, ".leetcode")
32+
}
33+
err = os.MkdirAll(dir, 0755)
34+
checkErr(err)
35+
return path.Join(dir, f)
36+
}
37+
38+
func saveCookies(cookies []*http.Cookie) {
39+
data, err := json.Marshal(cookies)
40+
checkErr(err)
41+
err = ioutil.WriteFile(getPath(cookiesFile), data, 0755)
42+
checkErr(err)
43+
}
44+
45+
func getCookies() (cookies []*http.Cookie) {
46+
b, err := ioutil.ReadFile(getPath(cookiesFile))
47+
checkErr(err)
48+
err = json.Unmarshal(b, &cookies)
49+
checkErr(err)
50+
return
51+
}

‎internal/leetcode/config.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package leetcode
2+
3+
const (
4+
AccountsLoginUrl = "https://leetcode.com/accounts/login/"
5+
ProblemsetAllUrl = "https://leetcode.com/problemset/all/"
6+
ApiProblemsAllUrl = "https://leetcode.com/api/problems/all/"
7+
GraphqlUrl = "https://leetcode.com/graphql"
8+
ApiProgressAllUrl = "https://leetcode.com/api/progress/all/"
9+
SubmissionsLatestUrl = "https://leetcode.com/submissions/latest/"
10+
)
11+
12+
const cookiesFile = "cookies"
13+
14+
const credentialsFile = "credentials"

‎internal/leetcode/login.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package leetcode
2+
3+
import (
4+
"net/http"
5+
"net/url"
6+
"strings"
7+
)
8+
9+
func AccountsLogin(user string, pwd string) (*http.Response, error) {
10+
resp, err := http.Head(AccountsLoginUrl)
11+
checkErr(err)
12+
cookies := resp.Cookies()
13+
saveCookies(cookies)
14+
csrftoken := getCsrfToken(cookies)
15+
data := url.Values{
16+
"login": {user},
17+
"password": {pwd},
18+
"csrfmiddlewaretoken": {csrftoken},
19+
}
20+
req, err := http.NewRequest("POST", AccountsLoginUrl, strings.NewReader(data.Encode()))
21+
checkErr(err)
22+
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
23+
req.Header.Set("Referer", AccountsLoginUrl)
24+
for _, cookie := range cookies {
25+
req.AddCookie(cookie)
26+
}
27+
resp, err = http.DefaultClient.Do(req)
28+
checkErr(err)
29+
saveCookies(resp.Cookies())
30+
return resp, err
31+
}

‎internal/login/login.go

Lines changed: 0 additions & 1 deletion
This file was deleted.

‎solution/roman-to-integer/roman_to_integer.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ func romanToInt(s string) int {
1515
p := 0
1616
l := len(s)
1717
for i := 0; i < l; i++ {
18-
k := s[i:i+1]
18+
k := s[i : i+1]
1919
if v, ok := m[k]; ok {
2020
if v > p {
2121
r -= p * 2

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /