Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions browser/all/import.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package all

import (
_ "github.com/j178/kooky/browser/brave"
_ "github.com/j178/kooky/browser/browsh"
_ "github.com/j178/kooky/browser/chrome"
_ "github.com/j178/kooky/browser/chromium"
Expand Down
47 changes: 47 additions & 0 deletions browser/brave/brave.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package brave

import (
"net/http"

"github.com/j178/kooky"
"github.com/j178/kooky/internal/chrome"
"github.com/j178/kooky/internal/cookies"
)

func ReadCookies(filename string, filters ...kooky.Filter) ([]*kooky.Cookie, error) {
s, err := cookieStore(filename, filters...)
if err != nil {
return nil, err
}
defer s.Close()

return s.ReadCookies(filters...)
}

// CookieJar returns an initiated http.CookieJar based on the cookies stored by
// the Brave browser. Set cookies are memory stored and do not modify any
// browser files.
func CookieJar(filename string, filters ...kooky.Filter) (http.CookieJar, error) {
j, err := cookieStore(filename, filters...)
if err != nil {
return nil, err
}
defer j.Close()
if err := j.InitJar(); err != nil {
return nil, err
}
return j, nil
}

// 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 = `brave`

return &cookies.CookieJar{CookieStore: s}, nil
}
42 changes: 42 additions & 0 deletions browser/brave/find.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package brave

import (
"github.com/j178/kooky"
"github.com/j178/kooky/internal/chrome"
"github.com/j178/kooky/internal/chrome/find"
"github.com/j178/kooky/internal/cookies"
)

type braveFinder struct{}

var _ kooky.CookieStoreFinder = (*braveFinder)(nil)

func init() {
kooky.RegisterFinder(`brave`, &braveFinder{})
}

func (f *braveFinder) FindCookieStores() ([]kooky.CookieStore, error) {
files, err := find.FindBraveCookieStoreFiles()
if err != nil {
return nil, err
}

var ret []kooky.CookieStore
for _, file := range files {
ret = append(
ret,
&cookies.CookieJar{
CookieStore: &chrome.CookieStore{
DefaultCookieStore: cookies.DefaultCookieStore{
BrowserStr: file.Browser,
ProfileStr: file.Profile,
OSStr: file.OS,
IsDefaultProfileBool: file.IsDefaultProfile,
FileNameStr: file.Path,
},
},
},
)
}
return ret, nil
}
3 changes: 3 additions & 0 deletions internal/chrome/find/find.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ func FindChromiumCookieStoreFiles() ([]*chromeCookieStoreFile, error) {
func FindEdgeChookieStoreFiles() ([]*chromeCookieStoreFile, error) {
return FindCookieStoreFiles(edgeRoots, `edge`)
}
func FindBraveCookieStoreFiles() ([]*chromeCookieStoreFile, error) {
return FindCookieStoreFiles(braveRoots, `brave`)
}

func FindCookieStoreFiles(rootsFunc func() ([]string, error), browserName string) ([]*chromeCookieStoreFile, error) {
if rootsFunc == nil {
Expand Down
4 changes: 4 additions & 0 deletions internal/chrome/find/find_android.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,3 +19,7 @@ func chromiumRoots() ([]string, error) {
func edgeRoots() ([]string, error) {
return nil, errors.New(`not implemented`)
}

func braveRoots() ([]string, error) {
return nil, errors.New(`not implemented`)
}
9 changes: 9 additions & 0 deletions internal/chrome/find/find_darwin.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,12 @@ func edgeRoots() ([]string, error) {
}
return []string{filepath.Join(cfgDir, `Microsoft Edge`)}, nil
}

func braveRoots() ([]string, error) {
// "$HOME/Library/Application Support"
cfgDir, err := os.UserConfigDir()
if err != nil {
return nil, err
}
return []string{filepath.Join(cfgDir, `BraveSoftware`, `Brave-Browser`)}, nil
}
4 changes: 4 additions & 0 deletions internal/chrome/find/find_others.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,7 @@ func chromiumRoots() ([]string, error) {
func edgeRoots() ([]string, error) {
return nil, errNotImplemented
}

func braveRoots() ([]string, error) {
return nil, errNotImplemented
}
19 changes: 19 additions & 0 deletions internal/chrome/find/find_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,22 @@ func chromiumRoots() ([]string, error) {
func edgeRoots() ([]string, error) {
return nil, errors.New(`not implemented`)
}

func braveRoots() ([]string, error) {
// "${XDG_CONFIG_HOME:-$HOME/.config}"
var dotConfigs, ret []string
// fallback
if home, err := os.UserHomeDir(); err == nil {
dotConfigs = append(dotConfigs, filepath.Join(home, `.config`))
}
if dir, ok := os.LookupEnv(`XDG_CONFIG_HOME`); ok {
dotConfigs = append(dotConfigs, dir)
}
for _, dotConfig := range dotConfigs {
ret = append(
ret,
filepath.Join(dotConfig, `BraveSoftware`, `Brave-Browser`),
)
}
return ret, nil
}
8 changes: 8 additions & 0 deletions internal/chrome/find/find_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,11 @@ func edgeRoots() ([]string, error) {

return ret, nil
}

func braveRoots() ([]string, error) {
cfgDir := os.Getenv(`LocalAppData`)
if len(cfgDir) == 0 {
return nil, errors.New(`%LocalAppData% is empty`)
}
return []string{filepath.Join(cfgDir, `BraveSoftware`, `Brave-Browser`, `User Data`)}, nil
}