mirror of
https://github.com/safing/portmaster
synced 2025-09-01 18:19:12 +00:00
Improve resolver API
This commit is contained in:
parent
587f6f36cf
commit
fa1b8aa148
4 changed files with 57 additions and 19 deletions
49
resolver/api.go
Normal file
49
resolver/api.go
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
package resolver
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/safing/portbase/api"
|
||||||
|
)
|
||||||
|
|
||||||
|
func registerAPI() error {
|
||||||
|
if err := api.RegisterEndpoint(api.Endpoint{
|
||||||
|
Path: "dns/clear",
|
||||||
|
Read: api.PermitUser,
|
||||||
|
ActionFunc: clearNameCache,
|
||||||
|
Name: "Clear cached DNS records",
|
||||||
|
Description: "Deletes all saved DNS records from the database.",
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := api.RegisterEndpoint(api.Endpoint{
|
||||||
|
Path: "dns/resolvers",
|
||||||
|
Read: api.PermitAnyone,
|
||||||
|
StructFunc: exportDNSResolvers,
|
||||||
|
Name: "List DNS Resolvers",
|
||||||
|
Description: "List currently configured DNS resolvers and their status.",
|
||||||
|
}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type resolverExport struct {
|
||||||
|
*Resolver
|
||||||
|
Failing bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func exportDNSResolvers(*api.Request) (interface{}, error) {
|
||||||
|
resolversLock.RLock()
|
||||||
|
defer resolversLock.RUnlock()
|
||||||
|
|
||||||
|
export := make([]*resolverExport, 0, len(globalResolvers))
|
||||||
|
for _, r := range globalResolvers {
|
||||||
|
export = append(export, &resolverExport{
|
||||||
|
Resolver: r,
|
||||||
|
Failing: r.Conn.IsFailing(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return export, nil
|
||||||
|
}
|
|
@ -6,8 +6,6 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/safing/portbase/api"
|
|
||||||
|
|
||||||
"github.com/safing/portbase/log"
|
"github.com/safing/portbase/log"
|
||||||
"github.com/safing/portbase/modules"
|
"github.com/safing/portbase/modules"
|
||||||
"github.com/safing/portmaster/intel"
|
"github.com/safing/portmaster/intel"
|
||||||
|
@ -31,6 +29,10 @@ func init() {
|
||||||
func prep() error {
|
func prep() error {
|
||||||
intel.SetReverseResolver(ResolveIPAndValidate)
|
intel.SetReverseResolver(ResolveIPAndValidate)
|
||||||
|
|
||||||
|
if err := registerAPI(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if err := prepEnvResolver(); err != nil {
|
if err := prepEnvResolver(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -78,15 +80,6 @@ func start() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Register api endpoint to clear DNS cache.
|
|
||||||
if err := api.RegisterEndpoint(api.Endpoint{
|
|
||||||
Path: "dns/clear/namecache",
|
|
||||||
Read: api.PermitUser,
|
|
||||||
ActionFunc: clearNameCache,
|
|
||||||
}); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// DEPRECATED: remove in v0.7
|
// DEPRECATED: remove in v0.7
|
||||||
// cache clearing
|
// cache clearing
|
||||||
err = module.RegisterEventHook(
|
err = module.RegisterEventHook(
|
||||||
|
|
|
@ -41,6 +41,9 @@ type Resolver struct {
|
||||||
// - `zeroip`: Answer only contains zeroip
|
// - `zeroip`: Answer only contains zeroip
|
||||||
Server string
|
Server string
|
||||||
|
|
||||||
|
// Source describes from where the resolver configuration originated.
|
||||||
|
Source string
|
||||||
|
|
||||||
// Name is the name of the resolver as passed via
|
// Name is the name of the resolver as passed via
|
||||||
// ?name=.
|
// ?name=.
|
||||||
Name string
|
Name string
|
||||||
|
@ -65,12 +68,9 @@ type Resolver struct {
|
||||||
// Special Options
|
// Special Options
|
||||||
VerifyDomain string
|
VerifyDomain string
|
||||||
Search []string
|
Search []string
|
||||||
SkipFQDN string
|
|
||||||
|
|
||||||
Source string
|
|
||||||
|
|
||||||
// logic interface
|
// logic interface
|
||||||
Conn ResolverConn
|
Conn ResolverConn `json:"-"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsBlockedUpstream returns true if the request has been blocked
|
// IsBlockedUpstream returns true if the request has been blocked
|
||||||
|
|
|
@ -208,10 +208,6 @@ func (q *Query) checkCompliance() error {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (resolver *Resolver) checkCompliance(_ context.Context, q *Query) error {
|
func (resolver *Resolver) checkCompliance(_ context.Context, q *Query) error {
|
||||||
if q.FQDN == resolver.SkipFQDN {
|
|
||||||
return errSkip
|
|
||||||
}
|
|
||||||
|
|
||||||
if noInsecureProtocols(q.SecurityLevel) {
|
if noInsecureProtocols(q.SecurityLevel) {
|
||||||
switch resolver.ServerType {
|
switch resolver.ServerType {
|
||||||
case ServerTypeDNS:
|
case ServerTypeDNS:
|
||||||
|
|
Loading…
Add table
Reference in a new issue