-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgenerate.go
87 lines (78 loc) · 1.72 KB
/
generate.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
// generate.go generates Go wordlists from diceware wordlists.
//
// Usage: go run generate.go
//go:build ignore
package main
import (
"fmt"
"log"
"os"
"path/filepath"
"strings"
"text/template"
"github.com/bjoernalbers/phrase/passphrase"
)
const (
dir = "passphrase"
inputSuffix = ".txt"
outputSuffix = ".go"
templateFile = "passphrase/wordlist.go.tmpl"
)
func init() {
log.SetFlags(0)
log.SetPrefix(fmt.Sprintf("%s: ", filepath.Base(os.Args[0])))
}
func main() {
files, err := find(dir)
if err != nil {
log.Fatal(err)
}
for _, file := range files {
err = generate(file)
if err != nil {
log.Fatal(err)
}
}
}
// find returns the names of all input files inside dir.
func find(dir string) (files []string, err error) {
entries, err := os.ReadDir(dir)
if err != nil {
return files, err
}
for _, entry := range entries {
if !entry.IsDir() && filepath.Ext(entry.Name()) == inputSuffix {
files = append(files, filepath.Join(dir, entry.Name()))
}
}
return files, err
}
// generate generates a Go wordlist from a diceware wordlist.
func generate(input string) error {
dirname, filename := filepath.Split(input)
language := strings.TrimSuffix(filename, filepath.Ext(filename))
output := filepath.Join(dirname, language+outputSuffix)
wordlist, err := passphrase.ReadFile(input)
if err != nil {
return err
}
file, err := os.Create(output)
if err != nil {
return err
}
defer file.Close()
type Wordlist struct {
Language string
Wordlist []string
}
templ, err := template.New(filepath.Base(templateFile)).ParseFiles(templateFile)
if err != nil {
return err
}
err = templ.Execute(file, Wordlist{language, wordlist})
if err != nil {
return err
}
fmt.Println(output)
return nil
}