This commit is contained in:
2026-06-30 10:39:29 +07:00
parent aaafa6ada9
commit d9c8e3930b
28 changed files with 3040 additions and 167 deletions

View File

@@ -182,19 +182,63 @@ func EnumerateGUIWindows() ([]WindowInfo, error) {
return res, nil
}
func parseKeywordList(keywords string) []string {
keywords = strings.ReplaceAll(keywords, "\r\n", "\n")
parts := strings.FieldsFunc(keywords, func(r rune) bool {
return r == ',' || r == '\n' || r == ';' || r == '|'
})
seen := map[string]bool{}
var list []string
for _, p := range parts {
trimmed := strings.TrimSpace(strings.ToLower(p))
trimmed = strings.TrimSuffix(trimmed, ".exe")
if trimmed == "" || seen[trimmed] {
continue
}
seen[trimmed] = true
list = append(list, trimmed)
}
return list
}
var keywordAliases = map[string][]string{
"lark": {"lark", "feishu", "larkshell", "larkhelper"},
"feishu": {"lark", "feishu", "larkshell", "larkhelper"},
"teams": {"teams", "ms-teams", "msteams"},
"zalo": {"zalo", "zalopcb"},
}
func expandKeyword(kw string) []string {
base := []string{kw}
if aliases, ok := keywordAliases[kw]; ok {
base = append(base, aliases...)
}
seen := map[string]bool{}
var out []string
for _, a := range base {
a = strings.TrimSpace(strings.ToLower(a))
if a != "" && !seen[a] {
seen[a] = true
out = append(out, a)
}
}
return out
}
func matchesAllowedKeyword(kw, pNameLower, wTitleLower string) bool {
for _, variant := range expandKeyword(kw) {
if strings.Contains(pNameLower, variant) || strings.Contains(wTitleLower, variant) {
return true
}
}
return false
}
func (b *Blocker) SetKeywords(keywords string) {
b.mu.Lock()
defer b.mu.Unlock()
parts := strings.Split(keywords, ",")
var list []string
for _, p := range parts {
trimmed := strings.TrimSpace(strings.ToLower(p))
if trimmed != "" {
list = append(list, trimmed)
}
}
b.allowedKeywords = list
b.allowedKeywords = parseKeywordList(keywords)
log.Printf("[BLOCKER] Keywords updated: %v", b.allowedKeywords)
}
@@ -254,7 +298,7 @@ func (b *Blocker) checkAndKill() {
// 2. Kiểm tra xem có chứa bất kỳ từ khóa nào được cho phép không
allowed := false
for _, kw := range keywords {
if strings.Contains(pNameLower, kw) || strings.Contains(wTitleLower, kw) {
if matchesAllowedKeyword(kw, pNameLower, wTitleLower) {
allowed = true
break
}