mirror of
https://github.com/moonD4rk/HackBrowserData.git
synced 2026-10-13 03:37:12 +02:00
Merge branch 'fix/logbug' into master
This commit is contained in:
14 files changed
+151
-148
No files matched your search
+1
-1
@@ -190,4 +190,4 @@ result/
|
|||||||
results/
|
results/
|
||||||
|
|
||||||
hack-browser-data
|
hack-browser-data
|
||||||
!/hack-browser-data
|
!/cmd/hack-browser-data
|
||||||
+6
-4
@@ -28,8 +28,6 @@ linters:
|
|||||||
- 'revive'
|
- 'revive'
|
||||||
- 'typecheck'
|
- 'typecheck'
|
||||||
- 'unconvert'
|
- 'unconvert'
|
||||||
# The linter 'varcheck' 'deadcode' 'structcheck' is deprecated (since v1.49.0), use 'unused' instead.
|
|
||||||
- 'unused'
|
|
||||||
- 'whitespace'
|
- 'whitespace'
|
||||||
disable:
|
disable:
|
||||||
# unsupported lint with golang 1.18+ ref: https://github.com/golangci/golangci-lint/issues/2649
|
# unsupported lint with golang 1.18+ ref: https://github.com/golangci/golangci-lint/issues/2649
|
||||||
@@ -38,8 +36,12 @@ linters:
|
|||||||
- 'noctx'
|
- 'noctx'
|
||||||
- 'sqlclosecheck'
|
- 'sqlclosecheck'
|
||||||
- 'staticcheck'
|
- 'staticcheck'
|
||||||
|
- 'structcheck'
|
||||||
- 'stylecheck'
|
- 'stylecheck'
|
||||||
|
- 'unused'
|
||||||
- 'errcheck'
|
- 'errcheck'
|
||||||
|
- 'deadcode'
|
||||||
|
- 'varcheck'
|
||||||
|
|
||||||
issues:
|
issues:
|
||||||
exclude-use-default: false
|
exclude-use-default: false
|
||||||
@@ -58,8 +60,8 @@ issues:
|
|||||||
- G502
|
- G502
|
||||||
- G505
|
- G505
|
||||||
exclude-rules:
|
exclude-rules:
|
||||||
- path: internal/browser/browser\.go
|
- path: internal/provider/provider\.go
|
||||||
linters:
|
linters:
|
||||||
- 'unused'
|
- 'unused'
|
||||||
max-issues-per-linter: 0
|
max-issues-per-linter: 0
|
||||||
max-same-issues: 0
|
max-same-issues: 0
|
||||||
+4
-7
@@ -1,4 +1,4 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="740" height="148">
|
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="740" height="74">
|
||||||
<style>.contributor-link { cursor: pointer; }</style>
|
<style>.contributor-link { cursor: pointer; }</style>
|
||||||
<a xlink:href="https://github.com/moonD4rk" class="contributor-link" target="_blank" rel="nofollow sponsored" title="moonD4rk" id="moonD4rk">
|
<a xlink:href="https://github.com/moonD4rk" class="contributor-link" target="_blank" rel="nofollow sponsored" title="moonD4rk" id="moonD4rk">
|
||||||
<image x="5" y="5" width="64" height="64" xlink:href="data:image/png;base64,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 truncated
|
<image x="5" y="5" width="64" height="64" xlink:href="data:image/png;base64,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 truncated
|
||||||
@@ -21,16 +21,13 @@
|
|||||||
<a xlink:href="https://github.com/dexhek" class="contributor-link" target="_blank" rel="nofollow sponsored" title="dexhek" id="dexhek">
|
<a xlink:href="https://github.com/dexhek" class="contributor-link" target="_blank" rel="nofollow sponsored" title="dexhek" id="dexhek">
|
||||||
<image x="419" y="5" width="64" height="64" xlink:href="data:image/png;base64,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 truncated
|
<image x="419" y="5" width="64" height="64" xlink:href="data:image/png;base64,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 truncated
|
||||||
</a>
|
</a>
|
||||||
<a xlink:href="https://github.com/SignorMercurio" class="contributor-link" target="_blank" rel="nofollow sponsored" title="SignorMercur..." id="SignorMercur...">
|
|
||||||
<image x="488" y="5" width="64" height="64" xlink:href="data:image/png;base64,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 truncated
|
|
||||||
</a>
|
|
||||||
<a xlink:href="https://github.com/lc6464" class="contributor-link" target="_blank" rel="nofollow sponsored" title="lc6464" id="lc6464">
|
<a xlink:href="https://github.com/lc6464" class="contributor-link" target="_blank" rel="nofollow sponsored" title="lc6464" id="lc6464">
|
||||||
<image x="557" y="5" width="64" height="64" xlink:href="data:image/png;base64,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 truncated
|
<image x="488" y="5" width="64" height="64" xlink:href="data:image/png;base64,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 truncated
|
||||||
</a>
|
</a>
|
||||||
<a xlink:href="https://github.com/mirefly" class="contributor-link" target="_blank" rel="nofollow sponsored" title="mirefly" id="mirefly">
|
<a xlink:href="https://github.com/mirefly" class="contributor-link" target="_blank" rel="nofollow sponsored" title="mirefly" id="mirefly">
|
||||||
<image x="626" y="5" width="64" height="64" xlink:href="data:image/png;base64,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 truncated
|
<image x="557" y="5" width="64" height="64" xlink:href="data:image/png;base64,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 truncated
|
||||||
</a>
|
</a>
|
||||||
<a xlink:href="https://github.com/slimwang" class="contributor-link" target="_blank" rel="nofollow sponsored" title="slimwang" id="slimwang">
|
<a xlink:href="https://github.com/slimwang" class="contributor-link" target="_blank" rel="nofollow sponsored" title="slimwang" id="slimwang">
|
||||||
<image x="5" y="74" width="64" height="64" xlink:href="data:image/png;base64,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 truncated
|
<image x="626" y="5" width="64" height="64" xlink:href="data:image/png;base64,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 truncated
|
||||||
</a>
|
</a>
|
||||||
</svg>
|
</svg>
|
||||||
|
Before Width: | Height: | Size: 2.2 MiB After Width: | Height: | Size: 2.1 MiB |
@@ -4,8 +4,8 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"hack-browser-data/internal/browser"
|
|
||||||
"hack-browser-data/internal/log"
|
"hack-browser-data/internal/log"
|
||||||
|
"hack-browser-data/internal/provider"
|
||||||
"hack-browser-data/internal/utils/fileutil"
|
"hack-browser-data/internal/utils/fileutil"
|
||||||
|
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
@@ -29,11 +29,11 @@ func Execute() {
|
|||||||
Name: "hack-browser-data",
|
Name: "hack-browser-data",
|
||||||
Usage: "Export passwords/cookies/history/bookmarks from browser",
|
Usage: "Export passwords/cookies/history/bookmarks from browser",
|
||||||
UsageText: "[hack-browser-data -b chrome -f json -dir results -cc]\nExport all browingdata(password/cookie/history/bookmark) from browser\nGithub Link: https://github.com/moonD4rk/HackBrowserData",
|
UsageText: "[hack-browser-data -b chrome -f json -dir results -cc]\nExport all browingdata(password/cookie/history/bookmark) from browser\nGithub Link: https://github.com/moonD4rk/HackBrowserData",
|
||||||
Version: "0.4.3",
|
Version: "0.4.4",
|
||||||
Flags: []cli.Flag{
|
Flags: []cli.Flag{
|
||||||
&cli.BoolFlag{Name: "verbose", Aliases: []string{"vv"}, Destination: &verbose, Value: false, Usage: "verbose"},
|
&cli.BoolFlag{Name: "verbose", Aliases: []string{"vv"}, Destination: &verbose, Value: false, Usage: "verbose"},
|
||||||
&cli.BoolFlag{Name: "compress", Aliases: []string{"zip"}, Destination: &compress, Value: false, Usage: "compress result to zip"},
|
&cli.BoolFlag{Name: "compress", Aliases: []string{"zip"}, Destination: &compress, Value: false, Usage: "compress result to zip"},
|
||||||
&cli.StringFlag{Name: "browser", Aliases: []string{"b"}, Destination: &browserName, Value: "all", Usage: "available browsers: all|" + strings.Join(browser.ListBrowser(), "|")},
|
&cli.StringFlag{Name: "browser", Aliases: []string{"b"}, Destination: &browserName, Value: "all", Usage: "available browsers: all|" + strings.Join(provider.ListBrowsers(), "|")},
|
||||||
&cli.StringFlag{Name: "results-dir", Aliases: []string{"dir"}, Destination: &outputDir, Value: "results", Usage: "export dir"},
|
&cli.StringFlag{Name: "results-dir", Aliases: []string{"dir"}, Destination: &outputDir, Value: "results", Usage: "export dir"},
|
||||||
&cli.StringFlag{Name: "format", Aliases: []string{"f"}, Destination: &outputFormat, Value: "csv", Usage: "file name csv|json"},
|
&cli.StringFlag{Name: "format", Aliases: []string{"f"}, Destination: &outputFormat, Value: "csv", Usage: "file name csv|json"},
|
||||||
&cli.StringFlag{Name: "profile-path", Aliases: []string{"p"}, Destination: &profilePath, Value: "", Usage: "custom profile dir path, get with chrome://version"},
|
&cli.StringFlag{Name: "profile-path", Aliases: []string{"p"}, Destination: &profilePath, Value: "", Usage: "custom profile dir path, get with chrome://version"},
|
||||||
@@ -45,11 +45,8 @@ func Execute() {
|
|||||||
} else {
|
} else {
|
||||||
log.Init("notice")
|
log.Init("notice")
|
||||||
}
|
}
|
||||||
var (
|
|
||||||
browsers []browser.Browser
|
browsers, err := provider.PickBrowsers(browserName, profilePath)
|
||||||
err error
|
|
||||||
)
|
|
||||||
browsers, err = browser.PickBrowser(browserName, profilePath)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error(err)
|
log.Error(err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,17 +1,7 @@
|
|||||||
package browser
|
package browser
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
|
||||||
"path/filepath"
|
|
||||||
"sort"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"hack-browser-data/internal/browingdata"
|
"hack-browser-data/internal/browingdata"
|
||||||
"hack-browser-data/internal/browser/chromium"
|
|
||||||
"hack-browser-data/internal/browser/firefox"
|
|
||||||
"hack-browser-data/internal/log"
|
|
||||||
"hack-browser-data/internal/utils/fileutil"
|
|
||||||
"hack-browser-data/internal/utils/typeutil"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type Browser interface {
|
type Browser interface {
|
||||||
@@ -20,114 +10,3 @@ type Browser interface {
|
|||||||
// BrowsingData returns all browsing data in the browser.
|
// BrowsingData returns all browsing data in the browser.
|
||||||
BrowsingData() (*browingdata.Data, error)
|
BrowsingData() (*browingdata.Data, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func PickBrowser(name, profile string) ([]Browser, error) {
|
|
||||||
var browsers []Browser
|
|
||||||
clist := pickChromium(name, profile)
|
|
||||||
for _, b := range clist {
|
|
||||||
if b != nil {
|
|
||||||
browsers = append(browsers, b)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
flist := pickFirefox(name, profile)
|
|
||||||
for _, b := range flist {
|
|
||||||
if b != nil {
|
|
||||||
browsers = append(browsers, b)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return browsers, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func pickChromium(name, profile string) []Browser {
|
|
||||||
var browsers []Browser
|
|
||||||
name = strings.ToLower(name)
|
|
||||||
if name == "all" {
|
|
||||||
for _, v := range chromiumList {
|
|
||||||
if !fileutil.FolderExists(filepath.Clean(v.profilePath)) {
|
|
||||||
log.Noticef("find browser %s failed, profile folder does not exist", v.name)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if multiChromium, err := chromium.New(v.name, v.storage, v.profilePath, v.items); err == nil {
|
|
||||||
log.Noticef("find browser %s success", v.name)
|
|
||||||
for _, b := range multiChromium {
|
|
||||||
log.Noticef("find browser %s success", b.Name())
|
|
||||||
browsers = append(browsers, b)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
log.Errorf("new chromium error: %s", err.Error())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if c, ok := chromiumList[name]; ok {
|
|
||||||
if profile == "" {
|
|
||||||
profile = c.profilePath
|
|
||||||
}
|
|
||||||
if !fileutil.FolderExists(filepath.Clean(profile)) {
|
|
||||||
log.Fatalf("find browser %s failed, profile folder does not exist", c.name)
|
|
||||||
}
|
|
||||||
chromiumList, err := chromium.New(c.name, c.storage, profile, c.items)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("new chromium error: %s", err)
|
|
||||||
}
|
|
||||||
for _, b := range chromiumList {
|
|
||||||
log.Noticef("find browser %s success", b.Name())
|
|
||||||
browsers = append(browsers, b)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return browsers
|
|
||||||
}
|
|
||||||
|
|
||||||
func pickFirefox(name, profile string) []Browser {
|
|
||||||
var browsers []Browser
|
|
||||||
name = strings.ToLower(name)
|
|
||||||
if name == "all" || name == "firefox" {
|
|
||||||
for _, v := range firefoxList {
|
|
||||||
if profile == "" {
|
|
||||||
profile = v.profilePath
|
|
||||||
} else {
|
|
||||||
profile = fileutil.ParentDir(profile)
|
|
||||||
}
|
|
||||||
if !fileutil.FolderExists(filepath.Clean(profile)) {
|
|
||||||
log.Noticef("find browser firefox %s failed, profile folder does not exist", v.name)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if multiFirefox, err := firefox.New(v.name, v.storage, profile, v.items); err == nil {
|
|
||||||
for _, b := range multiFirefox {
|
|
||||||
log.Noticef("find browser firefox %s success", b.Name())
|
|
||||||
browsers = append(browsers, b)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
log.Error(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return browsers
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func ListBrowser() []string {
|
|
||||||
var l []string
|
|
||||||
l = append(l, typeutil.Keys(chromiumList)...)
|
|
||||||
l = append(l, typeutil.Keys(firefoxList)...)
|
|
||||||
sort.Strings(l)
|
|
||||||
return l
|
|
||||||
}
|
|
||||||
|
|
||||||
// home dir path for all platforms
|
|
||||||
var homeDir, _ = os.UserHomeDir()
|
|
||||||
|
|
||||||
const (
|
|
||||||
chromeName = "Chrome"
|
|
||||||
chromeBetaName = "Chrome Beta"
|
|
||||||
chromiumName = "Chromium"
|
|
||||||
edgeName = "Microsoft Edge"
|
|
||||||
braveName = "Brave"
|
|
||||||
operaName = "Opera"
|
|
||||||
operaGXName = "OperaGX"
|
|
||||||
vivaldiName = "Vivaldi"
|
|
||||||
coccocName = "CocCoc"
|
|
||||||
yandexName = "Yandex"
|
|
||||||
firefoxName = "Firefox"
|
|
||||||
speed360Name = "360speed"
|
|
||||||
qqBrowserName = "QQ"
|
|
||||||
)
|
|
||||||
@@ -6,6 +6,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"hack-browser-data/internal/browingdata"
|
"hack-browser-data/internal/browingdata"
|
||||||
|
"hack-browser-data/internal/browser"
|
||||||
"hack-browser-data/internal/item"
|
"hack-browser-data/internal/item"
|
||||||
"hack-browser-data/internal/utils/fileutil"
|
"hack-browser-data/internal/utils/fileutil"
|
||||||
"hack-browser-data/internal/utils/typeutil"
|
"hack-browser-data/internal/utils/typeutil"
|
||||||
@@ -21,7 +22,7 @@ type chromium struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// New create instance of chromium browser, fill item's path if item is existed.
|
// New create instance of chromium browser, fill item's path if item is existed.
|
||||||
func New(name, storage, profilePath string, items []item.Item) ([]*chromium, error) {
|
func New(name, storage, profilePath string, items []item.Item) ([]browser.Browser, error) {
|
||||||
c := &chromium{
|
c := &chromium{
|
||||||
name: name,
|
name: name,
|
||||||
storage: storage,
|
storage: storage,
|
||||||
@@ -32,7 +33,7 @@ func New(name, storage, profilePath string, items []item.Item) ([]*chromium, err
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
chromiumList := make([]*chromium, 0, len(multiItemPaths))
|
chromiumList := make([]browser.Browser, 0, len(multiItemPaths))
|
||||||
for user, itemPaths := range multiItemPaths {
|
for user, itemPaths := range multiItemPaths {
|
||||||
chromiumList = append(chromiumList, &chromium{
|
chromiumList = append(chromiumList, &chromium{
|
||||||
name: fileutil.BrowserName(name, user),
|
name: fileutil.BrowserName(name, user),
|
||||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -7,6 +7,7 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
"hack-browser-data/internal/browingdata"
|
"hack-browser-data/internal/browingdata"
|
||||||
|
"hack-browser-data/internal/browser"
|
||||||
"hack-browser-data/internal/item"
|
"hack-browser-data/internal/item"
|
||||||
"hack-browser-data/internal/utils/fileutil"
|
"hack-browser-data/internal/utils/fileutil"
|
||||||
"hack-browser-data/internal/utils/typeutil"
|
"hack-browser-data/internal/utils/typeutil"
|
||||||
@@ -24,7 +25,7 @@ type firefox struct {
|
|||||||
var ErrProfilePathNotFound = errors.New("profile path not found")
|
var ErrProfilePathNotFound = errors.New("profile path not found")
|
||||||
|
|
||||||
// New returns a new firefox instance.
|
// New returns a new firefox instance.
|
||||||
func New(name, storage, profilePath string, items []item.Item) ([]*firefox, error) {
|
func New(name, storage, profilePath string, items []item.Item) ([]browser.Browser, error) {
|
||||||
f := &firefox{
|
f := &firefox{
|
||||||
name: name,
|
name: name,
|
||||||
storage: storage,
|
storage: storage,
|
||||||
@@ -36,7 +37,7 @@ func New(name, storage, profilePath string, items []item.Item) ([]*firefox, erro
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
firefoxList := make([]*firefox, 0, len(multiItemPaths))
|
firefoxList := make([]browser.Browser, 0, len(multiItemPaths))
|
||||||
for name, itemPaths := range multiItemPaths {
|
for name, itemPaths := range multiItemPaths {
|
||||||
firefoxList = append(firefoxList, &firefox{
|
firefoxList = append(firefoxList, &firefox{
|
||||||
name: fmt.Sprintf("firefox-%s", name),
|
name: fmt.Sprintf("firefox-%s", name),
|
||||||
@@ -0,0 +1,126 @@
|
|||||||
|
package provider
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"sort"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"hack-browser-data/internal/browser"
|
||||||
|
"hack-browser-data/internal/log"
|
||||||
|
"hack-browser-data/internal/provider/chromium"
|
||||||
|
"hack-browser-data/internal/provider/firefox"
|
||||||
|
"hack-browser-data/internal/utils/fileutil"
|
||||||
|
"hack-browser-data/internal/utils/typeutil"
|
||||||
|
)
|
||||||
|
|
||||||
|
func PickBrowsers(name, profile string) ([]browser.Browser, error) {
|
||||||
|
var browsers []browser.Browser
|
||||||
|
clist := pickChromium(name, profile)
|
||||||
|
for _, b := range clist {
|
||||||
|
if b != nil {
|
||||||
|
browsers = append(browsers, b)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
flist := pickFirefox(name, profile)
|
||||||
|
for _, b := range flist {
|
||||||
|
if b != nil {
|
||||||
|
browsers = append(browsers, b)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return browsers, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func pickChromium(name, profile string) []browser.Browser {
|
||||||
|
var browsers []browser.Browser
|
||||||
|
name = strings.ToLower(name)
|
||||||
|
if name == "all" {
|
||||||
|
for _, v := range chromiumList {
|
||||||
|
if !fileutil.FolderExists(filepath.Clean(v.profilePath)) {
|
||||||
|
log.Noticef("find browser %s failed, profile folder does not exist", v.name)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if multiChromium, err := chromium.New(v.name, v.storage, v.profilePath, v.items); err == nil {
|
||||||
|
log.Noticef("find browser %s success", v.name)
|
||||||
|
for _, b := range multiChromium {
|
||||||
|
log.Noticef("find browser %s success", b.Name())
|
||||||
|
browsers = append(browsers, b)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.Errorf("new chromium error: %s", err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if c, ok := chromiumList[name]; ok {
|
||||||
|
if profile == "" {
|
||||||
|
profile = c.profilePath
|
||||||
|
}
|
||||||
|
if !fileutil.FolderExists(filepath.Clean(profile)) {
|
||||||
|
log.Fatalf("find browser %s failed, profile folder does not exist", c.name)
|
||||||
|
}
|
||||||
|
chromiumList, err := chromium.New(c.name, c.storage, profile, c.items)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("new chromium error: %s", err)
|
||||||
|
}
|
||||||
|
for _, b := range chromiumList {
|
||||||
|
log.Noticef("find browser %s success", b.Name())
|
||||||
|
browsers = append(browsers, b)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return browsers
|
||||||
|
}
|
||||||
|
|
||||||
|
func pickFirefox(name, profile string) []browser.Browser {
|
||||||
|
var browsers []browser.Browser
|
||||||
|
name = strings.ToLower(name)
|
||||||
|
if name == "all" || name == "firefox" {
|
||||||
|
for _, v := range firefoxList {
|
||||||
|
if profile == "" {
|
||||||
|
profile = v.profilePath
|
||||||
|
} else {
|
||||||
|
profile = fileutil.ParentDir(profile)
|
||||||
|
}
|
||||||
|
if !fileutil.FolderExists(filepath.Clean(profile)) {
|
||||||
|
log.Noticef("find browser firefox %s failed, profile folder does not exist", v.name)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if multiFirefox, err := firefox.New(v.name, v.storage, profile, v.items); err == nil {
|
||||||
|
for _, b := range multiFirefox {
|
||||||
|
log.Noticef("find browser firefox %s success", b.Name())
|
||||||
|
browsers = append(browsers, b)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.Error(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return browsers
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func ListBrowsers() []string {
|
||||||
|
var l []string
|
||||||
|
l = append(l, typeutil.Keys(chromiumList)...)
|
||||||
|
l = append(l, typeutil.Keys(firefoxList)...)
|
||||||
|
sort.Strings(l)
|
||||||
|
return l
|
||||||
|
}
|
||||||
|
|
||||||
|
// home dir path for all platforms
|
||||||
|
var homeDir, _ = os.UserHomeDir()
|
||||||
|
|
||||||
|
const (
|
||||||
|
chromeName = "Chrome"
|
||||||
|
chromeBetaName = "Chrome Beta"
|
||||||
|
chromiumName = "Chromium"
|
||||||
|
edgeName = "Microsoft Edge"
|
||||||
|
braveName = "Brave"
|
||||||
|
operaName = "Opera"
|
||||||
|
operaGXName = "OperaGX"
|
||||||
|
vivaldiName = "Vivaldi"
|
||||||
|
coccocName = "CocCoc"
|
||||||
|
yandexName = "Yandex"
|
||||||
|
firefoxName = "Firefox"
|
||||||
|
speed360Name = "360speed"
|
||||||
|
qqBrowserName = "QQ"
|
||||||
|
)
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
//go:build darwin
|
//go:build darwin
|
||||||
|
|
||||||
package browser
|
package provider
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"hack-browser-data/internal/item"
|
"hack-browser-data/internal/item"
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
//go:build linux
|
//go:build linux
|
||||||
|
|
||||||
package browser
|
package provider
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"hack-browser-data/internal/item"
|
"hack-browser-data/internal/item"
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
//go:build windows
|
//go:build windows
|
||||||
|
|
||||||
package browser
|
package provider
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"hack-browser-data/internal/item"
|
"hack-browser-data/internal/item"
|
||||||
Reference in new issue
Block a user