mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-05-06 20:03:05 +08:00
- 密文存储:新增 dailysecret 本地存储引擎,连接/代理/AI 密钥不再依赖系统钥匙串 - 启动迁移:自动将已有钥匙串密文迁移到本地 JSON,用户无感知 - WebKit 迁移:从旧版 Wails WebKit LocalStorage 中恢复连接与代理数据 - DMG 修复:移除 --sandbox-safe 避免扩展属性污染签名,新增 xattr 清理与签名校验 - 安全适配:钥匙串不可用时标记完成而非回滚,消除无钥匙串环境下的阻塞 - 出口脱敏:所有连接/代理 API 返回前统一 sanitize 防止密文泄漏
105 lines
2.8 KiB
Go
105 lines
2.8 KiB
Go
package dailysecret
|
|
|
|
import "testing"
|
|
|
|
func TestStorePutGetDeleteConnectionSecret(t *testing.T) {
|
|
root := t.TempDir()
|
|
store := NewStore(root)
|
|
|
|
bundle := ConnectionBundle{
|
|
Password: "postgres-secret",
|
|
OpaqueDSN: "postgres://user:pass@db.local/app",
|
|
SSHPassword: "ssh-secret",
|
|
}
|
|
if err := store.PutConnection("conn-1", bundle); err != nil {
|
|
t.Fatalf("PutConnection returned error: %v", err)
|
|
}
|
|
|
|
got, ok, err := store.GetConnection("conn-1")
|
|
if err != nil {
|
|
t.Fatalf("GetConnection returned error: %v", err)
|
|
}
|
|
if !ok {
|
|
t.Fatal("expected connection bundle to exist")
|
|
}
|
|
if got.Password != "postgres-secret" || got.OpaqueDSN != bundle.OpaqueDSN || got.SSHPassword != "ssh-secret" {
|
|
t.Fatalf("unexpected bundle: %#v", got)
|
|
}
|
|
|
|
if err := store.DeleteConnection("conn-1"); err != nil {
|
|
t.Fatalf("DeleteConnection returned error: %v", err)
|
|
}
|
|
got, ok, err = store.GetConnection("conn-1")
|
|
if err != nil {
|
|
t.Fatalf("GetConnection after delete returned error: %v", err)
|
|
}
|
|
if ok {
|
|
t.Fatalf("expected missing connection bundle after delete, got %#v", got)
|
|
}
|
|
}
|
|
|
|
func TestStorePutGetDeleteGlobalProxySecret(t *testing.T) {
|
|
root := t.TempDir()
|
|
store := NewStore(root)
|
|
|
|
if err := store.PutGlobalProxy(GlobalProxyBundle{Password: "proxy-secret"}); err != nil {
|
|
t.Fatalf("PutGlobalProxy returned error: %v", err)
|
|
}
|
|
|
|
got, ok, err := store.GetGlobalProxy()
|
|
if err != nil {
|
|
t.Fatalf("GetGlobalProxy returned error: %v", err)
|
|
}
|
|
if !ok || got.Password != "proxy-secret" {
|
|
t.Fatalf("unexpected global proxy bundle: %#v ok=%v", got, ok)
|
|
}
|
|
|
|
if err := store.DeleteGlobalProxy(); err != nil {
|
|
t.Fatalf("DeleteGlobalProxy returned error: %v", err)
|
|
}
|
|
_, ok, err = store.GetGlobalProxy()
|
|
if err != nil {
|
|
t.Fatalf("GetGlobalProxy after delete returned error: %v", err)
|
|
}
|
|
if ok {
|
|
t.Fatal("expected global proxy bundle to be deleted")
|
|
}
|
|
}
|
|
|
|
func TestStorePutGetDeleteAIProviderSecret(t *testing.T) {
|
|
root := t.TempDir()
|
|
store := NewStore(root)
|
|
|
|
bundle := ProviderBundle{
|
|
APIKey: "sk-test",
|
|
SensitiveHeaders: map[string]string{
|
|
"Authorization": "Bearer test",
|
|
},
|
|
}
|
|
if err := store.PutAIProvider("openai-main", bundle); err != nil {
|
|
t.Fatalf("PutAIProvider returned error: %v", err)
|
|
}
|
|
|
|
got, ok, err := store.GetAIProvider("openai-main")
|
|
if err != nil {
|
|
t.Fatalf("GetAIProvider returned error: %v", err)
|
|
}
|
|
if !ok {
|
|
t.Fatal("expected provider bundle to exist")
|
|
}
|
|
if got.APIKey != "sk-test" || got.SensitiveHeaders["Authorization"] != "Bearer test" {
|
|
t.Fatalf("unexpected provider bundle: %#v", got)
|
|
}
|
|
|
|
if err := store.DeleteAIProvider("openai-main"); err != nil {
|
|
t.Fatalf("DeleteAIProvider returned error: %v", err)
|
|
}
|
|
_, ok, err = store.GetAIProvider("openai-main")
|
|
if err != nil {
|
|
t.Fatalf("GetAIProvider after delete returned error: %v", err)
|
|
}
|
|
if ok {
|
|
t.Fatal("expected provider bundle to be deleted")
|
|
}
|
|
}
|