mirror of
https://github.com/moonD4rk/HackBrowserData.git
synced 2026-07-16 21:57:19 +02:00
feat: add Chromium Browser with new v2 architecture (#530)
* feat: add Chromium Browser implementation with new architecture * refactor: replace Walk with ReadDir+Stat for profile discovery * refactor: remove queries override, use extractors for Yandex passwords * refactor: remove dataSource wrapper, use []sourcePath directly * fix: address Copilot review feedback on chromium_new.go * fix: always call key retriever regardless of Local State existence
This commit is contained in:
@@ -9,20 +9,28 @@ import (
|
||||
"github.com/moond4rk/hackbrowserdata/types"
|
||||
)
|
||||
|
||||
// defaultExtensionKeys are the JSON paths tried for standard Chromium browsers.
|
||||
var defaultExtensionKeys = []string{
|
||||
"extensions.settings",
|
||||
"settings.extensions",
|
||||
"settings.settings",
|
||||
}
|
||||
|
||||
func extractExtensions(path string) ([]types.ExtensionEntry, error) {
|
||||
return extractExtensionsWithKeys(path, defaultExtensionKeys)
|
||||
}
|
||||
|
||||
// extractExtensionsWithKeys reads Secure Preferences and looks for extension
|
||||
// settings under the given JSON key paths. This allows browser variants
|
||||
// (e.g. Opera with "extensions.opsettings") to reuse the same parsing logic.
|
||||
func extractExtensionsWithKeys(path string, keys []string) ([]types.ExtensionEntry, error) {
|
||||
data, err := os.ReadFile(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Try known JSON paths for extension settings
|
||||
settingKeys := []string{
|
||||
"extensions.settings",
|
||||
"settings.extensions",
|
||||
"settings.settings",
|
||||
}
|
||||
var settings gjson.Result
|
||||
for _, key := range settingKeys {
|
||||
for _, key := range keys {
|
||||
settings = gjson.GetBytes(data, key)
|
||||
if settings.Exists() {
|
||||
break
|
||||
@@ -59,3 +67,10 @@ func extractExtensions(path string) ([]types.ExtensionEntry, error) {
|
||||
|
||||
return extensions, nil
|
||||
}
|
||||
|
||||
// extractOperaExtensions extracts extensions from Opera's Secure Preferences,
|
||||
// which stores extension data under "extensions.opsettings" instead of the
|
||||
// standard "extensions.settings".
|
||||
func extractOperaExtensions(path string) ([]types.ExtensionEntry, error) {
|
||||
return extractExtensionsWithKeys(path, []string{"extensions.opsettings"})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user