From a0c3b4925b728885649ada99bff2e9bbcaf96a88 Mon Sep 17 00:00:00 2001 From: YNDmitry Date: Sun, 22 Mar 2026 22:58:50 +0500 Subject: [PATCH] Add Dia browser support on macOS --- browser/all/import.go | 1 + browser/dia/dia.go | 31 +++++++++++++++++++++++++ browser/dia/find.go | 47 ++++++++++++++++++++++++++++++++++++++ browser/dia/find_darwin.go | 17 ++++++++++++++ internal/chrome/README.md | 1 + 5 files changed, 97 insertions(+) create mode 100644 browser/dia/dia.go create mode 100644 browser/dia/find.go create mode 100644 browser/dia/find_darwin.go diff --git a/browser/all/import.go b/browser/all/import.go index 9d7498b..7a9558e 100644 --- a/browser/all/import.go +++ b/browser/all/import.go @@ -7,6 +7,7 @@ import ( _ "github.com/browserutils/kooky/browser/browsh" _ "github.com/browserutils/kooky/browser/chrome" _ "github.com/browserutils/kooky/browser/chromium" + _ "github.com/browserutils/kooky/browser/dia" _ "github.com/browserutils/kooky/browser/dillo" _ "github.com/browserutils/kooky/browser/edge" _ "github.com/browserutils/kooky/browser/elinks" diff --git a/browser/dia/dia.go b/browser/dia/dia.go new file mode 100644 index 0000000..75ffc65 --- /dev/null +++ b/browser/dia/dia.go @@ -0,0 +1,31 @@ +package dia + +import ( + "context" + + "github.com/browserutils/kooky" + "github.com/browserutils/kooky/internal/chrome" + "github.com/browserutils/kooky/internal/cookies" +) + +func ReadCookies(ctx context.Context, filename string, filters ...kooky.Filter) ([]*kooky.Cookie, error) { + return cookies.SingleRead(cookieStore, filename, filters...).ReadAllCookies(ctx) +} + +func TraverseCookies(filename string, filters ...kooky.Filter) kooky.CookieSeq { + return cookies.SingleRead(cookieStore, filename, filters...) +} + +// CookieStore has to be closed with CookieStore.Close() after use. +func CookieStore(filename string, filters ...kooky.Filter) (kooky.CookieStore, error) { + return cookieStore(filename, filters...) +} + +func cookieStore(filename string, filters ...kooky.Filter) (*cookies.CookieJar, error) { + s := &chrome.CookieStore{} + s.FileNameStr = filename + s.BrowserStr = `dia` + s.SetSafeStorage(`Dia`, ``, ``) + + return cookies.NewCookieJar(s, filters...), nil +} diff --git a/browser/dia/find.go b/browser/dia/find.go new file mode 100644 index 0000000..ce32d8e --- /dev/null +++ b/browser/dia/find.go @@ -0,0 +1,47 @@ +//go:build darwin && !ios + +package dia + +import ( + "github.com/browserutils/kooky" + "github.com/browserutils/kooky/internal/chrome" + chromefind "github.com/browserutils/kooky/internal/chrome/find" + "github.com/browserutils/kooky/internal/cookies" +) + +type diaFinder struct{} + +var _ kooky.CookieStoreFinder = (*diaFinder)(nil) + +func init() { + kooky.RegisterFinder(`dia`, &diaFinder{}) +} + +func (f *diaFinder) FindCookieStores() kooky.CookieStoreSeq { + return func(yield func(kooky.CookieStore, error) bool) { + for file, err := range chromefind.FindCookieStoreFiles(diaChromiumRoots, `dia`) { + if err != nil { + if !yield(nil, err) { + return + } + continue + } + if file == nil { + continue + } + cookieStore := &chrome.CookieStore{ + DefaultCookieStore: cookies.DefaultCookieStore{ + BrowserStr: file.Browser, + ProfileStr: file.Profile, + OSStr: file.OS, + IsDefaultProfileBool: file.IsDefaultProfile, + FileNameStr: file.Path, + }, + } + cookieStore.SetSafeStorage(`Dia`, ``, ``) + if !yield(&cookies.CookieJar{CookieStore: cookieStore}, nil) { + return + } + } + } +} diff --git a/browser/dia/find_darwin.go b/browser/dia/find_darwin.go new file mode 100644 index 0000000..8823d9d --- /dev/null +++ b/browser/dia/find_darwin.go @@ -0,0 +1,17 @@ +//go:build darwin && !ios + +package dia + +import ( + "os" + "path/filepath" +) + +func diaChromiumRoots(yield func(string, error) bool) { + cfgDir, err := os.UserConfigDir() + if err != nil { + _ = yield(``, err) + return + } + _ = yield(filepath.Join(cfgDir, `Dia`, `User Data`), nil) +} diff --git a/internal/chrome/README.md b/internal/chrome/README.md index f3034cb..03eb20a 100644 --- a/internal/chrome/README.md +++ b/internal/chrome/README.md @@ -6,6 +6,7 @@ |----------------|-----------------------------|-------------------|-----------------------| | Chrome | Chrome Safe Storage | chrome | com.google.Chrome | | Chromium | Chromium Safe Storage | chromium | org.chromium.Chromium | +| Dia | Dia Safe Storage | dia | | | Brave | Brave Safe Storage | brave | | | Microsoft Edge | Microsoft Edge Safe Storage | chromium (shared) | | | Opera | uses Chromium Safe Storage | chromium (shared) | |