45 lines
892 B
Go
45 lines
892 B
Go
|
|
package main
|
||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/json"
|
||
|
|
"errors"
|
||
|
|
"os"
|
||
|
|
"path/filepath"
|
||
|
|
)
|
||
|
|
|
||
|
|
type accountState struct {
|
||
|
|
AccountID string `json:"account_id"`
|
||
|
|
EmailState string `json:"email_state"`
|
||
|
|
}
|
||
|
|
|
||
|
|
func accountStatePath(name string) string {
|
||
|
|
return filepath.Join(filepath.Dir(defaultConfigPath()), name+".state.json")
|
||
|
|
}
|
||
|
|
|
||
|
|
func loadAccountState(path string) (accountState, error) {
|
||
|
|
var s accountState
|
||
|
|
data, err := os.ReadFile(path)
|
||
|
|
if errors.Is(err, os.ErrNotExist) {
|
||
|
|
return s, nil
|
||
|
|
}
|
||
|
|
if err != nil {
|
||
|
|
return s, err
|
||
|
|
}
|
||
|
|
return s, json.Unmarshal(data, &s)
|
||
|
|
}
|
||
|
|
|
||
|
|
func saveAccountState(path string, s accountState) error {
|
||
|
|
if err := os.MkdirAll(filepath.Dir(path), 0700); err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
data, err := json.MarshalIndent(s, "", " ")
|
||
|
|
if err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
tmp := path + ".tmp"
|
||
|
|
if err := os.WriteFile(tmp, data, 0600); err != nil {
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
return os.Rename(tmp, path)
|
||
|
|
}
|