191 lines
4.0 KiB
Go
191 lines
4.0 KiB
Go
package apps
|
|
|
|
import (
|
|
"strings"
|
|
"sync"
|
|
|
|
"github.com/iwind/TeaGo/maps"
|
|
)
|
|
|
|
var appStore = struct {
|
|
sync.RWMutex
|
|
data []maps.Map
|
|
}{
|
|
data: defaultMockApps(),
|
|
}
|
|
|
|
func defaultMockApps() []maps.Map {
|
|
return []maps.Map{
|
|
{
|
|
"id": int64(1),
|
|
"name": "\u4e3b\u7ad9\u79fb\u52a8\u4e1a\u52a1",
|
|
"appId": "ab12xc34s2",
|
|
"clusterId": int64(1),
|
|
"domainCount": 3,
|
|
"isOn": true,
|
|
"authStatus": "enabled",
|
|
"ecsMode": "auto",
|
|
"pinningMode": "report",
|
|
"sanMode": "strict",
|
|
"riskLevel": "medium",
|
|
"riskSummary": "Pinning \u5904\u4e8e\u89c2\u5bdf\u6a21\u5f0f",
|
|
"secretVersion": "v2026.02.20",
|
|
},
|
|
{
|
|
"id": int64(2),
|
|
"name": "\u89c6\u9891\u7f51\u5173\u4e1a\u52a1",
|
|
"appId": "vd8992ksm1",
|
|
"clusterId": int64(2),
|
|
"domainCount": 1,
|
|
"isOn": true,
|
|
"authStatus": "enabled",
|
|
"ecsMode": "custom",
|
|
"pinningMode": "enforce",
|
|
"sanMode": "strict",
|
|
"riskLevel": "low",
|
|
"riskSummary": "\u5df2\u542f\u7528\u5f3a\u6821\u9a8c",
|
|
"secretVersion": "v2026.02.18",
|
|
},
|
|
{
|
|
"id": int64(3),
|
|
"name": "\u6d77\u5916\u7070\u5ea6\u6d4b\u8bd5",
|
|
"appId": "ov7711hkq9",
|
|
"clusterId": int64(1),
|
|
"domainCount": 2,
|
|
"isOn": false,
|
|
"authStatus": "disabled",
|
|
"ecsMode": "off",
|
|
"pinningMode": "off",
|
|
"sanMode": "report",
|
|
"riskLevel": "high",
|
|
"riskSummary": "\u5e94\u7528\u5173\u95ed\u4e14\u8bc1\u4e66\u7b56\u7565\u504f\u5f31",
|
|
"secretVersion": "v2026.01.30",
|
|
},
|
|
}
|
|
}
|
|
|
|
func cloneMap(src maps.Map) maps.Map {
|
|
dst := maps.Map{}
|
|
for k, v := range src {
|
|
dst[k] = v
|
|
}
|
|
return dst
|
|
}
|
|
|
|
func cloneApps(apps []maps.Map) []maps.Map {
|
|
result := make([]maps.Map, 0, len(apps))
|
|
for _, app := range apps {
|
|
result = append(result, cloneMap(app))
|
|
}
|
|
return result
|
|
}
|
|
|
|
func mockApps() []maps.Map {
|
|
appStore.RLock()
|
|
defer appStore.RUnlock()
|
|
return cloneApps(appStore.data)
|
|
}
|
|
|
|
func deleteApp(appID int64) bool {
|
|
if appID <= 0 {
|
|
return false
|
|
}
|
|
|
|
appStore.Lock()
|
|
defer appStore.Unlock()
|
|
|
|
found := false
|
|
filtered := make([]maps.Map, 0, len(appStore.data))
|
|
for _, app := range appStore.data {
|
|
if app.GetInt64("id") == appID {
|
|
found = true
|
|
continue
|
|
}
|
|
filtered = append(filtered, app)
|
|
}
|
|
if found {
|
|
appStore.data = filtered
|
|
}
|
|
return found
|
|
}
|
|
|
|
func filterApps(keyword string, riskLevel string, ecsMode string, pinningMode string) []maps.Map {
|
|
all := mockApps()
|
|
if len(keyword) == 0 && len(riskLevel) == 0 && len(ecsMode) == 0 && len(pinningMode) == 0 {
|
|
return all
|
|
}
|
|
|
|
keyword = strings.ToLower(strings.TrimSpace(keyword))
|
|
result := make([]maps.Map, 0)
|
|
for _, app := range all {
|
|
if len(keyword) > 0 {
|
|
name := strings.ToLower(app.GetString("name"))
|
|
appID := strings.ToLower(app.GetString("appId"))
|
|
if !strings.Contains(name, keyword) && !strings.Contains(appID, keyword) {
|
|
continue
|
|
}
|
|
}
|
|
if len(riskLevel) > 0 && app.GetString("riskLevel") != riskLevel {
|
|
continue
|
|
}
|
|
if len(ecsMode) > 0 && app.GetString("ecsMode") != ecsMode {
|
|
continue
|
|
}
|
|
if len(pinningMode) > 0 && app.GetString("pinningMode") != pinningMode {
|
|
continue
|
|
}
|
|
result = append(result, app)
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
func pickApp(appID int64) maps.Map {
|
|
apps := mockApps()
|
|
if len(apps) == 0 {
|
|
return maps.Map{
|
|
"id": int64(0),
|
|
"name": "",
|
|
"appId": "",
|
|
"clusterId": int64(0),
|
|
}
|
|
}
|
|
|
|
if appID <= 0 {
|
|
return apps[0]
|
|
}
|
|
for _, app := range apps {
|
|
if app.GetInt64("id") == appID {
|
|
return app
|
|
}
|
|
}
|
|
return apps[0]
|
|
}
|
|
|
|
func mockDomains(appID int64) []maps.Map {
|
|
_ = appID
|
|
return []maps.Map{
|
|
{
|
|
"id": int64(101),
|
|
"name": "api.business.com",
|
|
},
|
|
{
|
|
"id": int64(102),
|
|
"name": "payment.business.com",
|
|
},
|
|
}
|
|
}
|
|
|
|
func pickDomain(domainID int64) maps.Map {
|
|
domains := mockDomains(0)
|
|
if domainID <= 0 {
|
|
return domains[0]
|
|
}
|
|
for _, domain := range domains {
|
|
if domain.GetInt64("id") == domainID {
|
|
return domain
|
|
}
|
|
}
|
|
return domains[0]
|
|
}
|