summaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/cookies/cookies.go61
1 files changed, 61 insertions, 0 deletions
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{}