add bom for csv. Closes #7

This commit is contained in:
ᴍᴏᴏɴD4ʀᴋ
2020-06-30 12:01:00 +08:00
parent e183a81079
commit 1634d2d696
5 changed files with 80 additions and 73 deletions
+6 -8
View File
@@ -22,13 +22,11 @@ const (
)
var (
FullDataSlice []*BrowserData
FullData = new(BrowserData)
FullData = new(BrowserData)
)
type (
BrowserData struct {
BrowserName string
LoginDataSlice
BookmarkSlice
CookieMap
@@ -47,17 +45,17 @@ type (
}
bookmarks struct {
ID int64
DateAdded time.Time
URL string
Name string
Type string
URL string
DateAdded time.Time
}
cookies struct {
Host string
Path string
KeyName string
encryptValue []byte
Value string
Host string
Path string
IsSecure bool
IsHTTPOnly bool
HasExpire bool
@@ -66,8 +64,8 @@ type (
ExpireDate time.Time
}
history struct {
Url string
Title string
Url string
VisitCount int
LastVisitTime time.Time
}
+40 -20
View File
@@ -7,12 +7,13 @@ import (
"fmt"
"hack-browser-data/log"
"hack-browser-data/utils"
"io"
"os"
"github.com/gocarina/gocsv"
"github.com/jszwec/csvutil"
)
var utf8Bom = []byte{239, 187, 191}
func (b BrowserData) OutPutCsv(dir, browser, format string) error {
switch {
case len(b.BookmarkSlice) != 0:
@@ -20,17 +21,18 @@ func (b BrowserData) OutPutCsv(dir, browser, format string) error {
file, err := os.OpenFile(filename, os.O_RDWR|os.O_CREATE|os.O_TRUNC|os.O_APPEND, 0644)
defer file.Close()
if err != nil {
log.Errorf("create file %s fail", filename)
log.Errorf("create file %s fail %s", filename, err)
}
gocsv.SetCSVWriter(func(out io.Writer) *gocsv.SafeCSVWriter {
writer := csv.NewWriter(out)
writer.Comma = ' '
return gocsv.NewSafeCSVWriter(writer)
})
err = gocsv.MarshalFile(b.BookmarkSlice, file)
if err != nil {
log.Error(err)
file.Write(utf8Bom)
w := csv.NewWriter(file)
w.Comma = ';'
enc := csvutil.NewEncoder(w)
for _, u := range b.BookmarkSlice {
if err := enc.Encode(u); err != nil {
log.Error(err)
}
}
w.Flush()
fmt.Printf("%s Get %d bookmarks, filename is %s \n", log.Prefix, len(b.BookmarkSlice), filename)
fallthrough
case len(b.LoginDataSlice) != 0:
@@ -40,10 +42,16 @@ func (b BrowserData) OutPutCsv(dir, browser, format string) error {
if err != nil {
log.Errorf("create file %s fail", filename)
}
err = gocsv.MarshalFile(b.LoginDataSlice, file)
if err != nil {
log.Error(err)
file.Write(utf8Bom)
w := csv.NewWriter(file)
w.Comma = ';'
enc := csvutil.NewEncoder(w)
for _, u := range b.LoginDataSlice {
if err := enc.Encode(u); err != nil {
log.Error(err)
}
}
w.Flush()
fmt.Printf("%s Get %d login data, filename is %s \n", log.Prefix, len(b.LoginDataSlice), filename)
fallthrough
case len(b.CookieMap) != 0:
@@ -57,10 +65,16 @@ func (b BrowserData) OutPutCsv(dir, browser, format string) error {
for _, v := range b.CookieMap {
tempSlice = append(tempSlice, v...)
}
err = gocsv.MarshalFile(tempSlice, file)
if err != nil {
log.Error(err)
file.Write(utf8Bom)
w := csv.NewWriter(file)
w.Comma = ';'
enc := csvutil.NewEncoder(w)
for _, u := range tempSlice {
if err := enc.Encode(u); err != nil {
log.Error(err)
}
}
w.Flush()
fmt.Printf("%s Get %d cookies, filename is %s \n", log.Prefix, len(b.CookieMap), filename)
fallthrough
case len(b.HistorySlice) != 0:
@@ -70,10 +84,16 @@ func (b BrowserData) OutPutCsv(dir, browser, format string) error {
if err != nil {
log.Errorf("create file %s fail", filename)
}
err = gocsv.MarshalFile(b.HistorySlice, file)
if err != nil {
log.Error(err)
file.Write(utf8Bom)
w := csv.NewWriter(file)
w.Comma = ';'
enc := csvutil.NewEncoder(w)
for _, u := range b.HistorySlice {
if err := enc.Encode(u); err != nil {
log.Error(err)
}
}
w.Flush()
fmt.Printf("%s Get %d login data, filename is %s \n", log.Prefix, len(b.HistorySlice), filename)
}
return nil