Improve resolver API

This commit is contained in:
Daniel 2021-01-25 17:11:48 +01:00
parent 587f6f36cf
commit fa1b8aa148
4 changed files with 57 additions and 19 deletions

49
resolver/api.go Normal file
View 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
}

View file

@ -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(

View file

@ -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

View file

@ -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: