From e2e0ed8fa7d26a23f77b378907b3f902be9e028e Mon Sep 17 00:00:00 2001 From: Philipp Tanlak Date: Wed, 21 Feb 2024 21:39:37 +0100 Subject: Use the cookie store from local browser --- modules/cookies/cookies.go | 61 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 modules/cookies/cookies.go (limited to 'modules/cookies/cookies.go') diff --git a/modules/cookies/cookies.go b/modules/cookies/cookies.go new file mode 100644 index 0000000..4be344d --- /dev/null +++ b/modules/cookies/cookies.go @@ -0,0 +1,61 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package cookies + +import ( + "net/http" + "slices" + + "github.com/browserutils/kooky" + _ "github.com/browserutils/kooky/browser/chrome" + _ "github.com/browserutils/kooky/browser/edge" + _ "github.com/browserutils/kooky/browser/firefox" + "github.com/philippta/flyscrape" +) + +var supportedBrowsers = []string{ + "chrome", + "edge", + "firefox", +} + +func init() { + flyscrape.RegisterModule(Module{}) +} + +type Module struct { + Cookies string `json:"cookies"` +} + +func (Module) ModuleInfo() flyscrape.ModuleInfo { + return flyscrape.ModuleInfo{ + ID: "cookies", + New: func() flyscrape.Module { return new(Module) }, + } +} + +func (m Module) AdaptTransport(t http.RoundTripper) http.RoundTripper { + if !slices.Contains(supportedBrowsers, m.Cookies) { + return t + } + + var stores []kooky.CookieStore + for _, store := range kooky.FindAllCookieStores() { + if store.Browser() == m.Cookies { + stores = append(stores, store) + } + } + + return flyscrape.RoundTripFunc(func(r *http.Request) (*http.Response, error) { + for _, store := range stores { + for _, cookie := range store.Cookies(r.URL) { + r.AddCookie(cookie) + } + } + return t.RoundTrip(r) + }) +} + +var _ flyscrape.TransportAdapter = Module{} -- cgit v1.2.3