@@ -3,6 +3,8 @@ package leetcode
3
3
import (
4
4
"bytes"
5
5
"encoding/json"
6
+ "errors"
7
+ "fmt"
6
8
"io/ioutil"
7
9
"net/http"
8
10
"net/http/cookiejar"
@@ -12,18 +14,24 @@ import (
12
14
"path"
13
15
)
14
16
15
- func checkErr (err error ) {
16
- if err != nil {
17
- panic (err )
17
+ var err error
18
+
19
+ func init () {
20
+ http .DefaultClient .Jar , err = cookiejar .New (nil )
21
+ checkErr (err )
22
+ http .DefaultClient .CheckRedirect = func (req * http.Request , via []* http.Request ) error {
23
+ req .Header .Set ("Referer" , req .URL .String ())
24
+ fmt .Println (req .URL .String ())
25
+ if len (via ) >= 3 {
26
+ return errors .New ("stopped after 3 redirects" )
27
+ }
28
+ return nil
18
29
}
19
30
}
20
31
21
- func client () * http.Client {
22
- jar , err := cookiejar .New (nil )
23
- // jar.SetCookies()
24
- checkErr (err )
25
- return & http.Client {
26
- Jar : jar ,
32
+ func checkErr (err error ) {
33
+ if err != nil {
34
+ panic (err )
27
35
}
28
36
}
29
37
@@ -36,37 +44,59 @@ func getCsrfToken(cookies []*http.Cookie) string {
36
44
return ""
37
45
}
38
46
39
- func getPath (f string ) string {
40
- dir := os .TempDir ()
47
+ func getCachePath (f string ) string {
48
+ dir , err := os .UserCacheDir ()
49
+ checkErr (err )
41
50
u , err := user .Current ()
42
51
if err == nil && u .HomeDir != "" {
43
52
dir = path .Join (u .HomeDir , ".leetcode" )
44
53
}
45
- err = os .MkdirAll (dir , 0755 )
46
- checkErr (err )
47
54
return path .Join (dir , f )
48
55
}
49
56
50
- func saveCookies (cookies []* http.Cookie ) {
51
- data , err := json .Marshal (cookies )
57
+ func getFilePath (filename string ) string {
58
+ if dir := path .Dir (filename ); dir != "" {
59
+ if err := os .MkdirAll (dir , 0755 ); err != nil {
60
+ checkErr (err )
61
+ }
62
+ }
63
+ return filename
64
+ }
65
+
66
+ func filePutContents (filename string , data []byte ) {
67
+ filename = getFilePath (filename )
68
+ err = ioutil .WriteFile (filename , data , 0644 )
69
+ checkErr (err )
70
+ }
71
+
72
+ func jsonEncode (v interface {}) []byte {
73
+ data , err := json .Marshal (v )
52
74
checkErr (err )
53
75
dst := bytes.Buffer {}
54
76
err = json .Indent (& dst , data , "" , "\t " )
55
77
checkErr (err )
56
- err = ioutil .WriteFile (getPath (cookiesFile ), dst .Bytes (), 0755 )
57
- checkErr (err )
78
+ return dst .Bytes ()
79
+ }
80
+ func saveCookies (cookies []* http.Cookie ) {
81
+ filePutContents (getCachePath (cookiesFile ), jsonEncode (cookies ))
58
82
}
59
83
60
84
func getCookies () (cookies []* http.Cookie ) {
61
- b , err := ioutil .ReadFile (getPath (cookiesFile ))
85
+ b , err := ioutil .ReadFile (getCachePath (cookiesFile ))
62
86
checkErr (err )
63
87
err = json .Unmarshal (b , & cookies )
64
88
checkErr (err )
65
89
return
66
90
}
67
91
68
92
func saveCredential (data url.Values ) {
69
- u := url .UserPassword (data .Get ("login" ), data .Get ("password" ))
70
- err := ioutil .WriteFile (getPath (credentialsFile ), []byte (u .String ()), 0755 )
93
+ filePutContents (getCachePath (credentialsFile ), jsonEncode (data ))
94
+ }
95
+
96
+ func getCredential () (data url.Values ) {
97
+ b , err := ioutil .ReadFile (getCachePath (credentialsFile ))
98
+ checkErr (err )
99
+ err = json .Unmarshal (b , & data )
71
100
checkErr (err )
101
+ return
72
102
}
0 commit comments