2025-03-23 00:59:17 +03:00

59 lines
1.2 KiB
Go

package pwextractor
import (
"bytes"
_ "embed"
"fmt"
"github.com/labstack/gommon/log"
"github.com/patriciy/adblock/adblock"
"github.com/playwright-community/playwright-go"
"net/url"
"sync"
)
//go:embed blocklists/easylist.txt
var easyList []byte
//go:embed blocklists/easyprivacy.txt
var easyPrivacy []byte
var matcher *adblock.RuleMatcher
var matcherMu sync.Mutex
func init() {
allBuf := bytes.Buffer{}
allBuf.Write(easyList)
//allBuf.Write(easyPrivacy)
r := bytes.NewReader(allBuf.Bytes())
rules, err := adblock.ParseRules(r)
if err != nil {
panic(fmt.Sprintf("Parse rules: %v", err))
}
matcher = adblock.NewMatcher()
for i, rule := range rules {
if err := matcher.AddRule(rule, i); err != nil {
panic(fmt.Sprintf("Add rule: %v", err))
}
}
}
func allowAdblock(url *url.URL) bool {
matcherMu.Lock()
defer matcherMu.Unlock()
req := adblock.Request{
URL: url.String(),
Domain: url.Host,
GenericBlock: playwright.Bool(false),
}
deny, ruleId, err := matcher.Match(&req)
if err != nil {
log.Errorf("Adblock error: %v (url %s)", err, url.String())
return true
}
if deny {
log.Infof("Adblock blocked %s (ruleId %d)", url.String(), ruleId)
}
return !deny
}