MITM proxy
This commit is contained in:
118
filters/filter_module.go
Normal file
118
filters/filter_module.go
Normal file
@@ -0,0 +1,118 @@
|
||||
package filters
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"path/filepath"
|
||||
)
|
||||
|
||||
// Filtering - module object
|
||||
type Filtering struct {
|
||||
dnsBlocklist Filters // DNS blocklist filters
|
||||
dnsAllowlist Filters // DNS allowlist filters
|
||||
Proxylist Filters // MITM Proxy filtering module
|
||||
|
||||
conf ModuleConf
|
||||
}
|
||||
|
||||
// ModuleConf - module config
|
||||
type ModuleConf struct {
|
||||
Enabled bool
|
||||
UpdateIntervalHours uint32 // 0: disabled
|
||||
HTTPClient *http.Client
|
||||
DataDir string
|
||||
DNSBlocklist []Filter
|
||||
DNSAllowlist []Filter
|
||||
Proxylist []Filter
|
||||
UserRules []string
|
||||
|
||||
// Called when the configuration is changed by HTTP request
|
||||
ConfigModified func()
|
||||
|
||||
// Register an HTTP handler
|
||||
HTTPRegister func(string, string, func(http.ResponseWriter, *http.Request))
|
||||
}
|
||||
|
||||
// NewModule - create module
|
||||
func NewModule(conf ModuleConf) *Filtering {
|
||||
f := Filtering{}
|
||||
f.conf = conf
|
||||
|
||||
fconf := Conf{}
|
||||
fconf.FilterDir = filepath.Join(conf.DataDir, "filters_dnsblock")
|
||||
fconf.List = conf.DNSBlocklist
|
||||
fconf.UpdateIntervalHours = conf.UpdateIntervalHours
|
||||
fconf.HTTPClient = conf.HTTPClient
|
||||
f.dnsBlocklist = New(fconf)
|
||||
|
||||
fconf = Conf{}
|
||||
fconf.FilterDir = filepath.Join(conf.DataDir, "filters_dnsallow")
|
||||
fconf.List = conf.DNSAllowlist
|
||||
fconf.UpdateIntervalHours = conf.UpdateIntervalHours
|
||||
fconf.HTTPClient = conf.HTTPClient
|
||||
f.dnsAllowlist = New(fconf)
|
||||
|
||||
fconf = Conf{}
|
||||
fconf.FilterDir = filepath.Join(conf.DataDir, "filters_mitmproxy")
|
||||
fconf.List = conf.Proxylist
|
||||
fconf.UpdateIntervalHours = conf.UpdateIntervalHours
|
||||
fconf.HTTPClient = conf.HTTPClient
|
||||
f.Proxylist = New(fconf)
|
||||
|
||||
return &f
|
||||
}
|
||||
|
||||
const (
|
||||
DNSBlocklist = iota
|
||||
DNSAllowlist
|
||||
Proxylist
|
||||
)
|
||||
|
||||
func stringArrayDup(a []string) []string {
|
||||
a2 := make([]string, len(a))
|
||||
copy(a2, a)
|
||||
return a2
|
||||
}
|
||||
|
||||
// WriteDiskConfig - write configuration data
|
||||
func (f *Filtering) WriteDiskConfig(mc *ModuleConf) {
|
||||
mc.Enabled = f.conf.Enabled
|
||||
mc.UpdateIntervalHours = f.conf.UpdateIntervalHours
|
||||
mc.UserRules = stringArrayDup(f.conf.UserRules)
|
||||
|
||||
c := Conf{}
|
||||
f.dnsBlocklist.WriteDiskConfig(&c)
|
||||
mc.DNSBlocklist = c.List
|
||||
|
||||
c = Conf{}
|
||||
f.dnsAllowlist.WriteDiskConfig(&c)
|
||||
mc.DNSAllowlist = c.List
|
||||
|
||||
c = Conf{}
|
||||
f.Proxylist.WriteDiskConfig(&c)
|
||||
mc.Proxylist = c.List
|
||||
}
|
||||
|
||||
// GetList - get specific filter list
|
||||
func (f *Filtering) GetList(t uint32) Filters {
|
||||
switch t {
|
||||
case DNSBlocklist:
|
||||
return f.dnsBlocklist
|
||||
case DNSAllowlist:
|
||||
return f.dnsAllowlist
|
||||
case Proxylist:
|
||||
return f.Proxylist
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Start - start module
|
||||
func (f *Filtering) Start() {
|
||||
f.dnsBlocklist.Start()
|
||||
f.dnsAllowlist.Start()
|
||||
f.Proxylist.Start()
|
||||
f.registerWebHandlers()
|
||||
}
|
||||
|
||||
// Close - close the module
|
||||
func (f *Filtering) Close() {
|
||||
}
|
||||
Reference in New Issue
Block a user