feat: rename item temp filename

This commit is contained in:
ᴍᴏᴏɴD4ʀᴋ
2022-04-11 15:53:19 +08:00
parent 899793d293
commit 8b8cab4393
16 changed files with 413 additions and 421 deletions
+114 -127
View File
@@ -1,129 +1,116 @@
package firefox
import (
"fmt"
"io/fs"
"io/ioutil"
"os"
"path"
"path/filepath"
"strings"
"hack-browser-data/internal/browingdata"
"hack-browser-data/internal/item"
)
type firefox struct {
name string
storage string
profilePath string
masterKey []byte
items []item.Item
itemPaths map[item.Item]string
multiItemPaths map[string]map[item.Item]string
}
// New
func New(info *browserInfo, items []item.Item) ([]*firefox, error) {
f := &firefox{
browserInfo: info,
items: items,
}
multiItemPaths, err := getFirefoxItemAbsPath(f.browserInfo.profilePath, f.items)
if err != nil {
if strings.Contains(err.Error(), "profile path is not exist") {
fmt.Println(err)
return nil, nil
}
panic(err)
}
var firefoxList []*firefox
for name, value := range multiItemPaths {
firefoxList = append(firefoxList, &firefox{
browserInfo: &browserInfo{
name: name,
masterKey: nil,
},
items: items,
itemPaths: value,
})
}
return firefoxList, nil
}
func getFirefoxItemAbsPath(profilePath string, items []item.Item) (map[string]map[item.Item]string, error) {
var multiItemPaths = make(map[string]map[item.Item]string)
absProfilePath := path.Join(homeDir, filepath.Clean(profilePath))
// TODO: Handle read file error
if !isFileExist(absProfilePath) {
return nil, fmt.Errorf("%s profile path is not exist", absProfilePath)
}
err := filepath.Walk(absProfilePath, firefoxWalkFunc(items, multiItemPaths))
return multiItemPaths, err
}
func (f *firefox) CopyItemFileToLocal() error {
for item, sourcePath := range f.itemPaths {
var dstFilename = item.TempName()
locals, _ := filepath.Glob("*")
for _, v := range locals {
if v == dstFilename {
err := os.Remove(dstFilename)
// TODO: Should Continue all iteration error
if err != nil {
return err
}
}
}
// TODO: Handle read file name error
sourceFile, err := ioutil.ReadFile(sourcePath)
if err != nil {
fmt.Println(err.Error())
}
err = ioutil.WriteFile(dstFilename, sourceFile, 0777)
if err != nil {
return err
}
}
return nil
}
func firefoxWalkFunc(items []item.Item, multiItemPaths map[string]map[item.Item]string) filepath.WalkFunc {
return func(path string, info fs.FileInfo, err error) error {
for _, v := range items {
if info.Name() == v.FileName() {
parentDir := getParentDir(path)
if _, exist := multiItemPaths[parentDir]; exist {
multiItemPaths[parentDir][v] = path
} else {
multiItemPaths[parentDir] = map[item.Item]string{v: path}
}
}
}
return err
}
}
func getParentDir(absPath string) string {
return filepath.Base(filepath.Dir(absPath))
}
func (f *firefox) GetMasterKey() ([]byte, error) {
return f.masterKey, nil
}
func (f *firefox) GetName() string {
return f.name
}
func (f *firefox) GetBrowsingData() []browingdata.Source {
var browsingData []browingdata.Source
for item := range f.itemPaths {
d := item.NewBrowsingData()
if d != nil {
browsingData = append(browsingData, d)
}
}
return browsingData
}
// type firefox struct {
// name string
// storage string
// profilePath string
// masterKey []byte
// items []item.Item
// itemPaths map[item.Item]string
// multiItemPaths map[string]map[item.Item]string
// }
//
// // New
// func New(info *browserInfo, items []item.Item) ([]*firefox, error) {
// f := &firefox{
// browserInfo: info,
// items: items,
// }
// multiItemPaths, err := getFirefoxItemAbsPath(f.browserInfo.profilePath, f.items)
// if err != nil {
// if strings.Contains(err.Error(), "profile path is not exist") {
// fmt.Println(err)
// return nil, nil
// }
// panic(err)
// }
// var firefoxList []*firefox
// for name, value := range multiItemPaths {
// firefoxList = append(firefoxList, &firefox{
// browserInfo: &browserInfo{
// name: name,
// masterKey: nil,
// },
// items: items,
// itemPaths: value,
// })
// }
// return firefoxList, nil
// }
//
// func getFirefoxItemAbsPath(profilePath string, items []item.Item) (map[string]map[item.Item]string, error) {
// var multiItemPaths = make(map[string]map[item.Item]string)
// absProfilePath := path.Join(homeDir, filepath.Clean(profilePath))
// // TODO: Handle read file error
// if !isFileExist(absProfilePath) {
// return nil, fmt.Errorf("%s profile path is not exist", absProfilePath)
// }
// err := filepath.Walk(absProfilePath, firefoxWalkFunc(items, multiItemPaths))
// return multiItemPaths, err
// }
//
// func (f *firefox) CopyItemFileToLocal() error {
// for item, sourcePath := range f.itemPaths {
// var dstFilename = item.TempName()
// locals, _ := filepath.Glob("*")
// for _, v := range locals {
// if v == dstFilename {
// err := os.Remove(dstFilename)
// // TODO: Should Continue all iteration error
// if err != nil {
// return err
// }
// }
// }
//
// // TODO: Handle read file name error
// sourceFile, err := ioutil.ReadFile(sourcePath)
// if err != nil {
// fmt.Println(err.Error())
// }
// err = ioutil.WriteFile(dstFilename, sourceFile, 0777)
// if err != nil {
// return err
// }
// }
// return nil
// }
//
// func firefoxWalkFunc(items []item.Item, multiItemPaths map[string]map[item.Item]string) filepath.WalkFunc {
// return func(path string, info fs.FileInfo, err error) error {
// for _, v := range items {
// if info.Name() == v.FileName() {
// parentDir := getParentDir(path)
// if _, exist := multiItemPaths[parentDir]; exist {
// multiItemPaths[parentDir][v] = path
// } else {
// multiItemPaths[parentDir] = map[item.Item]string{v: path}
// }
// }
// }
// return err
// }
// }
//
// func getParentDir(absPath string) string {
// return filepath.Base(filepath.Dir(absPath))
// }
//
// func (f *firefox) GetMasterKey() ([]byte, error) {
// return f.masterKey, nil
// }
//
// func (f *firefox) GetName() string {
// return f.name
// }
//
// func (f *firefox) GetBrowsingData() []browingdata.Source {
// var browsingData []browingdata.Source
// for item := range f.itemPaths {
// d := item.NewBrowsingData()
// if d != nil {
// browsingData = append(browsingData, d)
// }
// }
// return browsingData
// }