76 lines
2.0 KiB
Go
76 lines
2.0 KiB
Go
package manifest
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
// Manifest Pack 清单
|
|
type Manifest struct {
|
|
// 元信息
|
|
Version string `json:"version"` // DevPack 版本
|
|
FormatVer string `json:"format_ver"` // Pack 格式版本
|
|
PackID string `json:"pack_id"` // 唯一 ID (UUID)
|
|
Name string `json:"name"` // Pack 名称
|
|
Desc string `json:"description"`
|
|
Author string `json:"author"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
Tags []string `json:"tags,omitempty"`
|
|
|
|
// 源环境信息
|
|
Source SourceInfo `json:"source"`
|
|
|
|
// 采集器数据索引
|
|
Collectors []CollectorEntry `json:"collectors"`
|
|
|
|
// 加密信息
|
|
Encryption *EncryptionInfo `json:"encryption,omitempty"`
|
|
|
|
// 校验和
|
|
Checksum string `json:"checksum"`
|
|
}
|
|
|
|
// SourceInfo 源环境信息
|
|
type SourceInfo struct {
|
|
Hostname string `json:"hostname"`
|
|
OS string `json:"os"`
|
|
OSVersion string `json:"os_version"`
|
|
Arch string `json:"arch"`
|
|
Username string `json:"username"`
|
|
DevPackVersion string `json:"devpack_version"`
|
|
}
|
|
|
|
// CollectorEntry 采集器条目
|
|
type CollectorEntry struct {
|
|
Name string `json:"name"`
|
|
Category string `json:"category"`
|
|
Display string `json:"display_name"`
|
|
ItemCount int `json:"item_count"`
|
|
DataPath string `json:"data_path"`
|
|
DataSize int64 `json:"data_size"`
|
|
Checksum string `json:"checksum"`
|
|
}
|
|
|
|
// EncryptionInfo 加密信息
|
|
type EncryptionInfo struct {
|
|
Algorithm string `json:"algorithm"`
|
|
KDF string `json:"kdf"`
|
|
KDFParams map[string]int `json:"kdf_params"`
|
|
EncryptedCollectors []string `json:"encrypted_collectors"`
|
|
}
|
|
|
|
// ToJSON 序列化为 JSON
|
|
func (m *Manifest) ToJSON() ([]byte, error) {
|
|
return json.MarshalIndent(m, "", " ")
|
|
}
|
|
|
|
// FromJSON 从 JSON 反序列化
|
|
func FromJSON(data []byte) (*Manifest, error) {
|
|
var m Manifest
|
|
if err := json.Unmarshal(data, &m); err != nil {
|
|
return nil, fmt.Errorf("parse manifest: %w", err)
|
|
}
|
|
return &m, nil
|
|
}
|