123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- package main
- import (
- "bytes"
- "compress/gzip"
- "crypto/md5"
- "encoding/json"
- "fmt"
- "io/ioutil"
- "os"
- )
- func save(file, passphrase string, sites []Site) error {
-
- if _, err := os.Stat(file); os.IsNotExist(err) {
- _, err = os.Create(file)
- if err != nil {
- return err
- }
- }
-
- b, err := json.Marshal(sites)
- if err != nil {
- return err
- }
- b, err = encrypt(encodeBase64(b), passphrase)
- if err != nil {
- return err
- }
-
- var buffer bytes.Buffer
- gzip := gzip.NewWriter(&buffer)
- if err != nil {
- return err
- }
- gzip.Write(b)
- gzip.Close()
-
- fi, err := os.OpenFile(file, os.O_WRONLY, 0666)
- if err != nil {
- return err
- }
- _, err = fi.Write(buffer.Bytes())
- if err != nil {
- return err
- }
- fi.Close()
- return nil
- }
- func read(file, passphrase string) ([]Site, error) {
-
- if _, err := os.Stat(file); os.IsNotExist(err) {
- return []Site{}, nil
- }
-
- fi, err := os.Open(file)
- if err != nil {
- return nil, err
- }
-
- gzip, err := gzip.NewReader(fi)
- if err != nil {
- return nil, err
- }
- decompressed, err := ioutil.ReadAll(gzip)
- gzip.Close()
-
- decompressed, err = decrypt(decompressed, passphrase)
- if err != nil {
- return nil, err
- }
- decompressed = decodeBase64(decompressed)
-
- var sites []Site
- err = json.Unmarshal(decompressed, &sites)
- if err != nil {
- return nil, err
- }
- fi.Close()
- return sites, nil
- }
- func getBookname(profile string) string {
- hash := md5.New()
- hash.Write([]byte(profile))
- return fmt.Sprintf("%x", string(hash.Sum(nil)))
- }
|