1package cmd 2 3import ( 4 "net/http" 5 "os" 6 "os/signal" 7 "syscall" 8 "time" 9 10 "github.com/0xERR0R/blocky/config" 11 "github.com/0xERR0R/blocky/evt" 12 "github.com/0xERR0R/blocky/log" 13 "github.com/0xERR0R/blocky/server" 14 "github.com/0xERR0R/blocky/util" 15 16 "github.com/spf13/cobra" 17) 18 19//nolint:gochecknoglobals 20var ( 21 done chan bool 22) 23 24func newServeCommand() *cobra.Command { 25 return &cobra.Command{ 26 Use: "serve", 27 Args: cobra.NoArgs, 28 Short: "start blocky DNS server (default command)", 29 Run: startServer, 30 } 31} 32 33func startServer(_ *cobra.Command, _ []string) { 34 printBanner() 35 36 config.LoadConfig(configPath, true) 37 log.ConfigureLogger(config.GetConfig().LogLevel, config.GetConfig().LogFormat, config.GetConfig().LogTimestamp) 38 39 configureHTTPClient(config.GetConfig()) 40 41 signals := make(chan os.Signal, 1) 42 done = make(chan bool, 1) 43 44 signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM) 45 46 srv, err := server.NewServer(config.GetConfig()) 47 util.FatalOnError("cant start server: ", err) 48 49 srv.Start() 50 51 go func() { 52 <-signals 53 log.Log().Infof("Terminating...") 54 srv.Stop() 55 done <- true 56 }() 57 58 evt.Bus().Publish(evt.ApplicationStarted, util.Version, util.BuildTime) 59 <-done 60} 61 62func configureHTTPClient(cfg *config.Config) { 63 http.DefaultTransport = &http.Transport{ 64 Dial: (util.Dialer(cfg)).Dial, 65 TLSHandshakeTimeout: 5 * time.Second, 66 } 67} 68 69func printBanner() { 70 log.Log().Info("_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/") 71 log.Log().Info("_/ _/") 72 log.Log().Info("_/ _/") 73 log.Log().Info("_/ _/ _/ _/ _/") 74 log.Log().Info("_/ _/_/_/ _/ _/_/ _/_/_/ _/ _/ _/ _/ _/") 75 log.Log().Info("_/ _/ _/ _/ _/ _/ _/ _/_/ _/ _/ _/") 76 log.Log().Info("_/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/") 77 log.Log().Info("_/ _/_/_/ _/ _/_/ _/_/_/ _/ _/ _/_/_/ _/") 78 log.Log().Info("_/ _/ _/") 79 log.Log().Info("_/ _/_/ _/") 80 log.Log().Info("_/ _/") 81 log.Log().Info("_/ _/") 82 log.Log().Infof("_/ Version: %-18s Build time: %-18s _/", util.Version, util.BuildTime) 83 log.Log().Info("_/ _/") 84 log.Log().Info("_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/") 85} 86