37 lines
671 B
Go
37 lines
671 B
Go
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
|
|
}
|