From c7ccfc65bf013d31075ef18afc861a9f7667c67e Mon Sep 17 00:00:00 2001 From: y a t s <65122-yats@users.noreply.gitgud.io> Date: Fri, 19 Jun 2026 10:42:39 -0400 Subject: [PATCH] refactoring --- auth.go | 34 +++++++++++++--------------------- cookies.go | 18 ++++++++++-------- libkiwi.go | 6 ++---- 3 files changed, 25 insertions(+), 33 deletions(-) diff --git a/auth.go b/auth.go index de4ac36..158ff6a 100644 --- a/auth.go +++ b/auth.go @@ -29,6 +29,16 @@ func loginForm(xfToken string, creds Credentials) url.Values { } } +func newFormRequest(ctx context.Context, reqURL string, form url.Values) (*http.Request, error) { + req, err := http.NewRequestWithContext(ctx, "POST", reqURL, strings.NewReader(form.Encode())) + if err != nil { + return nil, err + } + req.Header.Set("Content-Type", "application/x-www-form-urlencoded") + + return req, nil +} + func (kf *KF) newLoginRequest(ctx context.Context, creds Credentials) (*http.Request, error) { u := kf.urlFromPath("login") @@ -43,17 +53,8 @@ func (kf *KF) newLoginRequest(ctx context.Context, creds Credentials) (*http.Req return nil, err } - form := loginForm(xfToken, creds) - - // i.e. https://kiwifarms.net/login/login - reqURL := fmt.Sprintf("%s/login", u.String()) - req, err := http.NewRequestWithContext(ctx, "POST", reqURL, strings.NewReader(form.Encode())) - if err != nil { - return nil, err - } - req.Header.Set("Content-Type", "application/x-www-form-urlencoded") - - return req, nil + // e.g. https://kiwifarms.net/login/login + return newFormRequest(ctx, fmt.Sprintf("%s/login", u.String()), loginForm(xfToken, creds)) } func (kf *KF) Login(ctx context.Context, creds Credentials) (*http.Response, error) { @@ -101,16 +102,7 @@ func (kf *KF) newTwoFactorRequest(ctx context.Context, resp *http.Response, code return nil, err } - form := twoFactorForm(xfToken, code, u) - reqURL := fmt.Sprintf("https://%s/login/two-step", u.Hostname()) - - req, err := http.NewRequestWithContext(ctx, "POST", reqURL, strings.NewReader(form.Encode())) - if err != nil { - return nil, err - } - req.Header.Set("Content-Type", "application/x-www-form-urlencoded") - - return req, nil + return newFormRequest(ctx, fmt.Sprintf("https://%s/login/two-step", u.Hostname()), twoFactorForm(xfToken, code, u)) } func (kf *KF) TwoFactorAuth(ctx context.Context, resp *http.Response, code uint32) (*http.Response, error) { diff --git a/cookies.go b/cookies.go index ead8e21..111388c 100644 --- a/cookies.go +++ b/cookies.go @@ -6,12 +6,13 @@ import ( ) // http.CookieJar interface wrapper to add convenience functions. -type jar struct { - http.CookieJar +type cookieJar struct { + jar *http.CookieJar } -func (j *jar) GetCookie(u *url.URL, name string) *http.Cookie { - cookies := j.Cookies(u) +func (j *cookieJar) GetCookie(u *url.URL, name string) *http.Cookie { + jar := (*j.jar) + cookies := jar.Cookies(u) for _, c := range cookies { if c.Name == name { return c @@ -21,18 +22,19 @@ func (j *jar) GetCookie(u *url.URL, name string) *http.Cookie { return nil } -func (j *jar) SetCookie(u *url.URL, newCookie *http.Cookie) { - cookies := j.Cookies(u) +func (j *cookieJar) SetCookie(u *url.URL, newCookie *http.Cookie) { + jar := (*j.jar) + cookies := jar.Cookies(u) for i, c := range cookies { if c.Name == newCookie.Name { cookies[i] = newCookie - j.SetCookies(u, cookies) + jar.SetCookies(u, cookies) return } } // Append if not already existing. cookies = append(cookies, newCookie) - j.SetCookies(u, cookies) + jar.SetCookies(u, cookies) } diff --git a/libkiwi.go b/libkiwi.go index 1445f35..a23ea98 100644 --- a/libkiwi.go +++ b/libkiwi.go @@ -13,13 +13,11 @@ import ( gq "github.com/PuerkitoBio/goquery" ) -const _USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; rv:60.0) Gecko/20100101 Firefox/60.0" - type KF struct { client http.Client domain *url.URL - Cookies jar + Cookies cookieJar } // Supply your own http.Client to route through any proxies. @@ -41,7 +39,7 @@ func NewKF(hc http.Client, host *url.URL) (KF, error) { return KF{ client: hc, domain: u, - Cookies: jar{hc.Jar}, + Cookies: cookieJar{&hc.Jar}, }, nil }