-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcmd_search.go
65 lines (55 loc) · 1.26 KB
/
cmd_search.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package main
import (
"context"
"flag"
"net"
"strings"
"github.com/google/subcommands"
)
type cmdSearch struct {
}
func newCmdSearch() *cmdSearch {
cmd := &cmdSearch{}
return cmd
}
func (*cmdSearch) Name() string {
return "search"
}
func (*cmdSearch) Synopsis() string { return "Search all entries" }
func (*cmdSearch) Usage() string {
return `search 'searchstring':
Search entries and print results to stdout.
`
}
func (p *cmdSearch) SetFlags(f *flag.FlagSet) {
}
//Search Search the database entry
func (d DatabaseEntry) Search(searchString string) {
ip, net, e := net.ParseCIDR(searchString)
if e == nil && net.IP.Equal(d.IPNet().IP) {
d.Print()
} else {
if ip != nil && d.IPNet().Contains(ip) {
d.Print()
} else {
for j := 0; j < len(d.Labels); j++ {
if strings.Contains(strings.ToLower(d.Labels[j]), strings.ToLower(searchString)) {
d.Print()
break
}
}
}
}
}
func (p *cmdSearch) Execute(_ context.Context, f *flag.FlagSet,
_ ...interface{}) subcommands.ExitStatus {
database := Load()
searchString := f.Arg(0)
if strings.Count(searchString, ".") == 3 && !strings.Contains(searchString, "/") {
searchString = searchString + "/32"
}
for i := 0; i < len(database); i++ {
database[i].Search(searchString)
}
return 0
}