74 lines
1.6 KiB
Go
74 lines
1.6 KiB
Go
package openwechat
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"io"
|
|
"net/http"
|
|
"os"
|
|
)
|
|
|
|
// Storage 身份信息, 维持整个登陆的Session会话
|
|
type Storage struct {
|
|
LoginInfo *LoginInfo
|
|
Request *BaseRequest
|
|
Response *WebInitResponse
|
|
}
|
|
|
|
type HotReloadStorageItem struct {
|
|
Cookies map[string][]*http.Cookie
|
|
BaseRequest *BaseRequest
|
|
LoginInfo *LoginInfo
|
|
WechatDomain WechatDomain
|
|
UUID string
|
|
}
|
|
|
|
// HotReloadStorage 热登陆存储接口
|
|
type HotReloadStorage io.ReadWriter
|
|
|
|
// JsonFileHotReloadStorage 实现HotReloadStorage接口
|
|
// 默认以json文件的形式存储
|
|
type JsonFileHotReloadStorage struct {
|
|
FileName string
|
|
file *os.File
|
|
}
|
|
|
|
func (j *JsonFileHotReloadStorage) Read(p []byte) (n int, err error) {
|
|
if j.file == nil {
|
|
j.file, err = os.Open(j.FileName)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
}
|
|
return j.file.Read(p)
|
|
}
|
|
|
|
func (j *JsonFileHotReloadStorage) Write(p []byte) (n int, err error) {
|
|
if j.file == nil {
|
|
j.file, err = os.Create(j.FileName)
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
}
|
|
return j.file.Write(p)
|
|
}
|
|
|
|
// NewJsonFileHotReloadStorage 创建JsonFileHotReloadStorage
|
|
func NewJsonFileHotReloadStorage(filename string) HotReloadStorage {
|
|
return &JsonFileHotReloadStorage{FileName: filename}
|
|
}
|
|
|
|
var _ HotReloadStorage = (*JsonFileHotReloadStorage)(nil)
|
|
|
|
func NewHotReloadStorageItem(storage HotReloadStorage) (*HotReloadStorageItem, error) {
|
|
if storage == nil {
|
|
return nil, errors.New("storage can't be nil")
|
|
}
|
|
var item HotReloadStorageItem
|
|
|
|
if err := json.NewDecoder(storage).Decode(&item); err != nil {
|
|
return nil, err
|
|
}
|
|
return &item, nil
|
|
}
|