-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfoca-extractor.go
94 lines (86 loc) · 2.48 KB
/
foca-extractor.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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package main
import (
"github.com/docopt/docopt.go"
"fmt"
"log"
"errors"
"strings"
)
func (u MetaDataUsers) UserClean() {
for _, user := range u.Users {
fmt.Printf("User: %v\n", user.User)
}
}
func (e MetaDataEmails) EmailClean() {
for _, email := range e.Emails {
fmt.Printf("Email: %v\n", email.User)
}
}
func (f Files) FilesClean() {
for _, f := range f.URL {
fmt.Printf("\t %v\n", f)
}
}
func (d Documents) DocsClean() {
for _, file := range d.Files {
fmt.Printf("File: %v\n", file)
}
fmt.Printf("\nBreakout by Domain\n\n")
for _, domain := range d.Domains {
for _, m := range domain.Maps {
fmt.Printf("%v [%v] (Docs): \n", domain.Name, domain.IP)
m.Documents.FilesClean()
fmt.Printf("%v [%v] (Param): \n", domain.Name, domain.IP)
m.Parametrized.FilesClean()
fmt.Printf("%v [%v] (Juicy): \n", domain.Name, domain.IP)
m.JuicyFiles.FilesClean()
fmt.Printf("%v [%v] (Listing): \n", domain.Name, domain.IP)
m.ListingFiles.FilesClean()
fmt.Printf("%v [%v] (DSSStore): \n", domain.Name, domain.IP)
m.DSStoreFiles.FilesClean()
fmt.Printf("%v [%v] (SVN): \n", domain.Name, domain.IP)
m.SVNFiles.FilesClean()
}
}
}
func (d Documents) SearchDoc(sdoc string) ([]string, error) {
fileList := []string{}
for _, file := range d.Files {
s := strings.Split(file, "/")
if s[len(s) - 1] == sdoc {
fileList = append(fileList, file)
}
}
if len(fileList) < 0 {
return fileList, errors.New(sdoc + " was not found in file listing")
}
return fileList, nil
}
func main() {
arguments, err := docopt.Parse(usage, nil, true, "foca-extractor 0.1", false)
if err != nil {
log.Fatal("Error parsing usage. Error: ", err.Error())
}
f := arguments["<file>"].(string)
u,e,d := focareader(f)
switch {
case arguments["--users"].(bool):
u.UserClean()
case arguments["--emails"].(bool):
e.EmailClean()
case arguments["--docs"].(bool):
d.DocsClean()
case arguments["--search"].(bool):
sdoc := arguments["<search>"].(string)
url, err := d.SearchDoc(sdoc)
if err != nil {
log.Println(err)
} else {
fmt.Println(url)
}
default:
u.UserClean()
e.EmailClean()
d.DocsClean()
}
}