52 lines
1.2 KiB
Go
52 lines
1.2 KiB
Go
package pwextractor
|
|
|
|
import (
|
|
_ "embed"
|
|
"fmt"
|
|
"github.com/AdguardTeam/urlfilter"
|
|
"github.com/AdguardTeam/urlfilter/filterlist"
|
|
"github.com/AdguardTeam/urlfilter/rules"
|
|
"github.com/labstack/gommon/log"
|
|
"net/url"
|
|
)
|
|
|
|
//go:embed blocklists/easylist.txt
|
|
var easyList string
|
|
|
|
//go:embed blocklists/easyprivacy.txt
|
|
var easyPrivacy string
|
|
|
|
var ruleLists = []string{
|
|
easyList,
|
|
easyPrivacy,
|
|
}
|
|
|
|
var engine *urlfilter.Engine
|
|
|
|
func init() {
|
|
lists := make([]filterlist.RuleList, len(ruleLists))
|
|
for i, rulesStr := range ruleLists {
|
|
lists[i] = &filterlist.StringRuleList{
|
|
RulesText: rulesStr,
|
|
ID: i,
|
|
IgnoreCosmetic: true,
|
|
}
|
|
}
|
|
storage, err := filterlist.NewRuleStorage(lists)
|
|
if err != nil {
|
|
panic(fmt.Sprintf("initialize adblock: NewRuleStorage: %v", err))
|
|
}
|
|
engine = urlfilter.NewEngine(storage)
|
|
}
|
|
|
|
func allowAdblock(url *url.URL, sourceUrl *url.URL) bool {
|
|
req := rules.NewRequest(url.String(), sourceUrl.String(), rules.TypeOther)
|
|
res := engine.MatchRequest(req)
|
|
rule := res.GetBasicResult()
|
|
allow := rule == nil || rule.Whitelist
|
|
if !allow {
|
|
log.Infof("Adblock blocked %s from %s by rule %s", url, sourceUrl, rule.String())
|
|
}
|
|
return allow
|
|
}
|