feat: Add help text

This commit is contained in:
Karan Sharma 2020-12-14 21:50:27 +05:30
parent 61e92a7ccc
commit 80d43011f8
6 changed files with 80 additions and 27 deletions

View file

@ -1,26 +1,50 @@
package main
import (
"html/template"
"os"
"text/template"
"github.com/fatih/color"
)
// AppHelpTemplate is the text template to customise the Help output.
// Uses text/template to render templates.
var AppHelpTemplate = `NAME:
🐶 {{.Name}} - {{.Description}}
var AppHelpTemplate = `{{ "NAME" | color "" "heading" }}:
{{ .Name | color "green" "bold" }} 🐶 {{.Description}}
USAGE:
{{.Name}} [OPTIONS] [--] <arguments>
{{ "USAGE" | color "" "heading" }}:
{{ .Name | color "green" "" }} [--] {{ "[query options]" | color "yellow" "" }} {{ "[arguments...]" | color "cyan" "" }}
VERSION:
{{.Version}} Built at {{.Date}}
{{ "VERSION" | color "" "heading" }}:
{{.Version | color "red" "" }} - {{.Date | color "red" ""}}
EXAMPLES:
doggo mrkaran.dev Query a domain using defaults
doggo mrkaran.dev CNAME Looks up for a CNAME record.
doggo mrkaran.dev MX @9.9.9.9 Uses a custom DNS resolver.
doggo -q mrkaran.dev -t MX -n 1.1.1.1 Using named arguments
{{ "EXAMPLES" | color "" "heading" }}:
{{ .Name | color "green" "" }} {{ "mrkaran.dev" | color "cyan" "" }} Query a domain using defaults
{{ .Name | color "green" "" }} {{ "mrkaran.dev CNAME" | color "cyan" "" }} Looks up for a CNAME record
{{ .Name | color "green" "" }} {{ "mrkaran.dev MX @9.9.9.9" | color "cyan" "" }} Uses a custom DNS resolver
{{ .Name | color "green" "" }} {{"-q mrkaran.dev -t MX -n 1.1.1.1" | color "yellow" ""}} Using named arguments
{{ "Free Form Arguments" | color "" "heading" }}:
Supply hostnames, query types, classes without any flag. For eg:
{{ .Name | color "green" "" }} {{"mrkaran.dev A @1.1.1.1" | color "cyan" "" }}
{{ "Query Options" | color "" "heading" }}:
{{"-q, --query=HOSTNAME" | color "yellow" ""}} Hostname to query the DNS records for
{{"-t, --type=TYPE" | color "yellow" ""}} Type of the DNS Record (A, MX, NS etc)
{{"-n, --nameserver=ADDR" | color "yellow" ""}} Address of a specific nameserver to send queries to (9.9.9.9, 1.1.1.1 etc)
{{"-c, --class=CLASS" | color "yellow" ""}} Network class of the DNS record (IN, CH, HS etc)
{{ "Protocol Options" | color "" "heading" }}:
{{"-U, --udp " | color "yellow" ""}} Send queries via DNS over UDP protocol
{{"-T, --tcp " | color "yellow" ""}} Send queries via DNS over TCP protocol
{{"-S, --dot " | color "yellow" ""}} Send queries via DNS over TLS (DoT) protocol
{{"-H, --doh" | color "yellow" ""}} Send queries via DNS over HTTPS (DoH) protocol
{{ "Output Options" | color "" "heading" }}:
{{"-J, --json " | color "yellow" ""}} Format the output as JSON
{{"--color " | color "yellow" ""}} Defaults to true. Set --color=false to disable colored output
{{"--debug " | color "yellow" ""}} Enable debug logging
{{"--time" | color "yellow" ""}} Shows how long the response took from the server
`
func renderCustomHelp() {
@ -30,7 +54,31 @@ func renderCustomHelp() {
"Version": buildVersion,
"Date": buildDate,
}
tmpl, err := template.New("test").Parse(AppHelpTemplate)
tmpl, err := template.New("test").Funcs(template.FuncMap{
"color": func(clr string, format string, str string) string {
formatter := color.New()
switch c := clr; c {
case "yellow":
formatter = formatter.Add(color.FgYellow)
case "red":
formatter = formatter.Add(color.FgRed)
case "cyan":
formatter = formatter.Add(color.FgCyan)
case "green":
formatter = formatter.Add(color.FgGreen)
}
switch f := format; f {
case "bold":
formatter = formatter.Add(color.Bold)
case "underline":
formatter = formatter.Add(color.Underline)
case "heading":
formatter = formatter.Add(color.Bold)
formatter = formatter.Add(color.Underline)
}
return formatter.SprintFunc()(str)
},
}).Parse(AppHelpTemplate)
if err != nil {
panic(err)
}

View file

@ -1,7 +1,6 @@
package main
import (
"fmt"
"strings"
"github.com/miekg/dns"
@ -70,7 +69,6 @@ func (hub *Hub) prepareQuestions() error {
}
func fetchDomainList(d string, ndots int) ([]string, int, error) {
fmt.Println(ndots)
cfg, err := dns.ClientConfigFromFile(resolvers.DefaultResolvConfPath)
if err != nil {
return nil, 0, err

View file

@ -41,7 +41,6 @@ func (hub *Hub) outputJSON(out []Output, msgs []resolvers.Response) {
// get the questions
queries := make([]Query, 0, len(msgs))
for _, ques := range hub.Questions {
fmt.Println(ques.Qtype)
q := Query{
Name: ques.Name,
Type: dns.TypeToString[ques.Qtype],