From a261844048e0d8cdf627ba12c4d0326e9b8d2127 Mon Sep 17 00:00:00 2001 From: Ahmad Date: Tue, 3 Oct 2023 15:59:12 +0500 Subject: [PATCH 1/5] CLI: ipinfo tool prefix addr --- ipinfo/cmd_tool.go | 4 ++ ipinfo/cmd_tool_prefix.go | 67 ++++++++++++++++++++++++++++++++++ ipinfo/cmd_tool_prefix_addr.go | 49 +++++++++++++++++++++++++ lib/cmd_tool_prefix_addr.go | 43 ++++++++++++++++++++++ 4 files changed, 163 insertions(+) create mode 100644 ipinfo/cmd_tool_prefix.go create mode 100644 ipinfo/cmd_tool_prefix_addr.go create mode 100644 lib/cmd_tool_prefix_addr.go diff --git a/ipinfo/cmd_tool.go b/ipinfo/cmd_tool.go index 8650ef32..f66ca6fb 100644 --- a/ipinfo/cmd_tool.go +++ b/ipinfo/cmd_tool.go @@ -25,6 +25,7 @@ var completionsTool = &complete.Command{ "ip2n": completionsToolIP2n, "n2ip": completionsToolN2IP, "n2ip6": completionsToolN2IP6, + "prefix": completionsToolPrefix, }, Flags: map[string]complete.Predictor{ "-h": predict.Nothing, @@ -52,6 +53,7 @@ Commands: ip2n converts an IPv4 or IPv6 address to its decimal representation. n2ip evaluates a mathematical expression and converts it to an IPv4 or IPv6. n2ip6 evaluates a mathematical expression and converts it to an IPv6. + prefix misc. prefix tools related to CIDRs. Options: --help, -h @@ -108,6 +110,8 @@ func cmdTool() error { err = cmdToolN2IP() case cmd == "n2ip6": err = cmdToolN2IP6() + case cmd == "prefix": + err = cmdToolPrefix() default: err = toolHelp() } diff --git a/ipinfo/cmd_tool_prefix.go b/ipinfo/cmd_tool_prefix.go new file mode 100644 index 00000000..75f60f96 --- /dev/null +++ b/ipinfo/cmd_tool_prefix.go @@ -0,0 +1,67 @@ +package main + +import ( + "fmt" + "os" + + "github.com/ipinfo/cli/lib/complete" + "github.com/ipinfo/cli/lib/complete/predict" + "github.com/spf13/pflag" +) + +var completionsToolPrefix = &complete.Command{ + Sub: map[string]*complete.Command{ + "addr": completionsToolPrefixAddr, + }, + Flags: map[string]complete.Predictor{ + "-h": predict.Nothing, + "--help": predict.Nothing, + }, +} + +func printHelpToolPrefix() { + fmt.Printf( + `Usage: %s tool prefix [] [] + +Commands: + addr returns prefix's IP address. + +Options: + --help, -h + show help. +`, progBase) +} + +func toolPrefixHelp() (err error) { + pflag.BoolVarP(&fHelp, "help", "h", false, "show help.") + pflag.Parse() + + if fHelp { + printHelpToolPrefix() + return nil + } + + printHelpToolPrefix() + return nil +} + +func cmdToolPrefix() error { + var err error + cmd := "" + if len(os.Args) > 3 { + cmd = os.Args[3] + } + + switch { + case cmd == "addr": + err = cmdToolPrefixAddr() + default: + err = toolPrefixHelp() + } + + if err != nil { + fmt.Fprintf(os.Stderr, "err: %v\n", err) + } + + return nil +} diff --git a/ipinfo/cmd_tool_prefix_addr.go b/ipinfo/cmd_tool_prefix_addr.go new file mode 100644 index 00000000..5769aa75 --- /dev/null +++ b/ipinfo/cmd_tool_prefix_addr.go @@ -0,0 +1,49 @@ +package main + +import ( + "fmt" + + "github.com/ipinfo/cli/lib" + "github.com/ipinfo/cli/lib/complete" + "github.com/ipinfo/cli/lib/complete/predict" + "github.com/spf13/pflag" +) + +var completionsToolPrefixAddr = &complete.Command{ + Flags: map[string]complete.Predictor{ + "-h": predict.Nothing, + "--help": predict.Nothing, + }, +} + +func printHelpToolPrefixAddr() { + fmt.Printf( + `Usage: %s tool prefix addr + +Description: + returns prefix's IP address. + +Examples: + # CIDR Valid Examples. + $ %[1]s tool prefix addr 192.168.0.0/16 + $ %[1]s tool prefix addr 10.0.0.0/8 + $ %[1]s tool prefix addr 2001:0db8:1234::/48 + $ %[1]s tool prefix addr 2606:2800:220:1::/64 + + # CIDR Invalid Examples. + $ %[1]s tool prefix addr 192.168.0.0/40 + $ %[1]s tool prefix addr 2001:0db8:1234::/129 + +Options: + --help, -h + show help. +`, progBase) +} + +func cmdToolPrefixAddr() (err error) { + f := lib.CmdToolPrefixAddrFlags{} + f.Init() + pflag.Parse() + + return lib.CmdToolPrefixAddr(f, pflag.Args()[3:], printHelpToolPrefixAddr) +} diff --git a/lib/cmd_tool_prefix_addr.go b/lib/cmd_tool_prefix_addr.go new file mode 100644 index 00000000..46a474e6 --- /dev/null +++ b/lib/cmd_tool_prefix_addr.go @@ -0,0 +1,43 @@ +package lib + +import ( + "fmt" + "net/netip" + + "github.com/spf13/pflag" +) + +type CmdToolPrefixAddrFlags struct { + Help bool +} + +func (f *CmdToolPrefixAddrFlags) Init() { + pflag.BoolVarP( + &f.Help, + "help", "h", false, + "show help.", + ) +} + +func CmdToolPrefixAddr(f CmdToolPrefixAddrFlags, args []string, printHelp func()) error { + if f.Help { + printHelp() + return nil + } + + op := func(input string, inputType INPUT_TYPE) error { + switch inputType { + case INPUT_TYPE_CIDR: + prefix, err := netip.ParsePrefix(input) + if err != nil { + return err + } + fmt.Printf("Address: %s\n", prefix.Addr()) + default: + fmt.Printf("%s,%v\n", input, false) + } + return nil + } + + return GetInputFrom(args, true, true, op) +} From 26f9b1d16cbdd6b1678ee3e374342d5e0d77bdb3 Mon Sep 17 00:00:00 2001 From: Ahmad Date: Tue, 3 Oct 2023 17:14:01 +0500 Subject: [PATCH 2/5] Minor Changes --- ipinfo/cmd_tool_prefix.go | 2 +- ipinfo/cmd_tool_prefix_addr.go | 2 +- lib/cmd_tool_prefix_addr.go | 4 +--- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/ipinfo/cmd_tool_prefix.go b/ipinfo/cmd_tool_prefix.go index 75f60f96..25fb446e 100644 --- a/ipinfo/cmd_tool_prefix.go +++ b/ipinfo/cmd_tool_prefix.go @@ -24,7 +24,7 @@ func printHelpToolPrefix() { `Usage: %s tool prefix [] [] Commands: - addr returns prefix's IP address. + addr returns IP address of CIDR using prefix. Options: --help, -h diff --git a/ipinfo/cmd_tool_prefix_addr.go b/ipinfo/cmd_tool_prefix_addr.go index 5769aa75..78282afb 100644 --- a/ipinfo/cmd_tool_prefix_addr.go +++ b/ipinfo/cmd_tool_prefix_addr.go @@ -21,7 +21,7 @@ func printHelpToolPrefixAddr() { `Usage: %s tool prefix addr Description: - returns prefix's IP address. + returns IP address of CIDR using prefix. Examples: # CIDR Valid Examples. diff --git a/lib/cmd_tool_prefix_addr.go b/lib/cmd_tool_prefix_addr.go index 46a474e6..8786961a 100644 --- a/lib/cmd_tool_prefix_addr.go +++ b/lib/cmd_tool_prefix_addr.go @@ -32,9 +32,7 @@ func CmdToolPrefixAddr(f CmdToolPrefixAddrFlags, args []string, printHelp func() if err != nil { return err } - fmt.Printf("Address: %s\n", prefix.Addr()) - default: - fmt.Printf("%s,%v\n", input, false) + fmt.Printf("%s,%s\n", input, prefix.Addr()) } return nil } From 6fee49a107dcef718327a1ec95c4e8baa135180a Mon Sep 17 00:00:00 2001 From: Ahmad Date: Wed, 4 Oct 2023 11:19:35 +0500 Subject: [PATCH 3/5] Change Description and Spaces issue --- ipinfo/cmd_tool_prefix.go | 2 +- ipinfo/cmd_tool_prefix_addr.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ipinfo/cmd_tool_prefix.go b/ipinfo/cmd_tool_prefix.go index 25fb446e..25dd04d7 100644 --- a/ipinfo/cmd_tool_prefix.go +++ b/ipinfo/cmd_tool_prefix.go @@ -24,7 +24,7 @@ func printHelpToolPrefix() { `Usage: %s tool prefix [] [] Commands: - addr returns IP address of CIDR using prefix. + addr returns the base IP address of a prefix. Options: --help, -h diff --git a/ipinfo/cmd_tool_prefix_addr.go b/ipinfo/cmd_tool_prefix_addr.go index 78282afb..3f63c01d 100644 --- a/ipinfo/cmd_tool_prefix_addr.go +++ b/ipinfo/cmd_tool_prefix_addr.go @@ -21,7 +21,7 @@ func printHelpToolPrefixAddr() { `Usage: %s tool prefix addr Description: - returns IP address of CIDR using prefix. + returns the base IP address of a prefix. Examples: # CIDR Valid Examples. From 7a6dca117bbb9ef79b8e7e7678dc90abd4a23cd5 Mon Sep 17 00:00:00 2001 From: Ahmad Date: Wed, 4 Oct 2023 11:21:14 +0500 Subject: [PATCH 4/5] Change Description and Spaces issue --- ipinfo/cmd_tool_prefix.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ipinfo/cmd_tool_prefix.go b/ipinfo/cmd_tool_prefix.go index 25dd04d7..675a952d 100644 --- a/ipinfo/cmd_tool_prefix.go +++ b/ipinfo/cmd_tool_prefix.go @@ -24,7 +24,7 @@ func printHelpToolPrefix() { `Usage: %s tool prefix [] [] Commands: - addr returns the base IP address of a prefix. + addr returns the base IP address of a prefix. Options: --help, -h From 8934cec034c703aae4bec34870c91756cffa321f Mon Sep 17 00:00:00 2001 From: Uman Shahzad Date: Wed, 4 Oct 2023 12:47:37 +0500 Subject: [PATCH 5/5] Update ipinfo/cmd_tool_prefix_addr.go --- ipinfo/cmd_tool_prefix_addr.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ipinfo/cmd_tool_prefix_addr.go b/ipinfo/cmd_tool_prefix_addr.go index 3f63c01d..c980bbf0 100644 --- a/ipinfo/cmd_tool_prefix_addr.go +++ b/ipinfo/cmd_tool_prefix_addr.go @@ -21,7 +21,7 @@ func printHelpToolPrefixAddr() { `Usage: %s tool prefix addr Description: - returns the base IP address of a prefix. + Returns the base IP address of a prefix. Examples: # CIDR Valid Examples.