package main import ( "time" "github.com/miekg/dns" "github.com/mr-karan/doggo/pkg/resolvers" "github.com/sirupsen/logrus" "github.com/spf13/pflag" ) // Hub represents the structure for all app wide functions and structs. type Hub struct { Logger *logrus.Logger Version string QueryFlags QueryFlags UnparsedArgs []string Questions []dns.Question Resolver []resolvers.Resolver Nameservers []Nameserver flag *pflag.FlagSet } // QueryFlags is used store the value of CLI flags. type QueryFlags struct { QNames []string `koanf:"query"` QTypes []string `koanf:"type"` QClasses []string `koanf:"class"` Nameservers []string `koanf:"nameserver"` UseIPv4 bool `koanf:"ipv4"` UseIPv6 bool `koanf:"ipv6"` DisplayTimeTaken bool `koanf:"time"` ShowJSON bool `koanf:"json"` UseSearchList bool `koanf:"search"` Ndots int `koanf:"ndots"` Color bool `koanf:"color"` Timeout time.Duration `koanf:"timeout"` isNdotsSet bool } // Nameserver represents the type of Nameserver // along with it's address. type Nameserver struct { Address string Type string } // NewHub initializes an instance of Hub which holds app wide configuration. func NewHub(logger *logrus.Logger, buildVersion string) *Hub { // Initialise Resolver hub := &Hub{ Logger: logger, Version: buildVersion, QueryFlags: QueryFlags{ QNames: []string{}, QTypes: []string{}, QClasses: []string{}, Nameservers: []string{}, }, Nameservers: []Nameserver{}, } return hub } // initLogger initializes logger func initLogger() *logrus.Logger { logger := logrus.New() logger.SetFormatter(&logrus.TextFormatter{ FullTimestamp: true, DisableLevelTruncation: true, }) return logger }