platform: modularize api/gui, add docs-tests-web foundation, and refresh root config
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
func appMarksClear(target string) error {
|
||||
target = strings.ToLower(strings.TrimSpace(target))
|
||||
if target != "vpn" && target != "direct" {
|
||||
return fmt.Errorf("invalid target")
|
||||
}
|
||||
|
||||
appMarksMu.Lock()
|
||||
defer appMarksMu.Unlock()
|
||||
|
||||
st := loadAppMarksState()
|
||||
changed := pruneExpiredAppMarksLocked(&st, time.Now().UTC())
|
||||
|
||||
kept := st.Items[:0]
|
||||
for _, it := range st.Items {
|
||||
if strings.ToLower(strings.TrimSpace(it.Target)) == target {
|
||||
_ = nftDeleteAppMarkRule(target, it.ID)
|
||||
changed = true
|
||||
continue
|
||||
}
|
||||
kept = append(kept, it)
|
||||
}
|
||||
st.Items = kept
|
||||
|
||||
if changed {
|
||||
return saveAppMarksState(st)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user