package extension import ( "os" "github.com/tidwall/gjson" "hack-browser-data/internal/item" "hack-browser-data/internal/log" "hack-browser-data/internal/utils/fileutil" ) type ChromiumExtension []*extension type extension struct { Name string Description string Version string HomepageURL string } const ( manifest = "manifest.json" ) func (c *ChromiumExtension) Parse(masterKey []byte) error { files, err := fileutil.FilesInFolder(item.TempChromiumExtension, manifest) if err != nil { return err } defer os.RemoveAll(item.TempChromiumExtension) for _, f := range files { file, err := fileutil.ReadFile(f) if err != nil { log.Error("Failed to read file: %s", err) continue } b := gjson.Parse(file) *c = append(*c, &extension{ Name: b.Get("name").String(), Description: b.Get("description").String(), Version: b.Get("version").String(), HomepageURL: b.Get("homepage_url").String(), }) } return nil } func (c *ChromiumExtension) Name() string { return "extension" } type FirefoxExtension []*extension func (f *FirefoxExtension) Parse(masterKey []byte) error { s, err := fileutil.ReadFile(item.TempFirefoxExtension) if err != nil { return err } defer os.Remove(item.TempFirefoxExtension) j := gjson.Parse(s) for _, v := range j.Get("addons").Array() { *f = append(*f, &extension{ Name: v.Get("defaultLocale.name").String(), Description: v.Get("defaultLocale.description").String(), Version: v.Get("version").String(), HomepageURL: v.Get("defaultLocale.homepageURL").String(), }) } return nil } func (f *FirefoxExtension) Name() string { return "extension" }