-
Notifications
You must be signed in to change notification settings - Fork 0
/
pm.go
82 lines (73 loc) · 2.17 KB
/
pm.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
package pm
import (
"fmt"
"github.com/bitfield/script"
"log"
"math/rand"
)
type Pm interface {
Gen() (string, error)
}
type pm struct {
digits bool
lower bool
upper bool
special bool
size int
specialCharset string
}
func (p pm) Gen() (string, error) {
var nDigits, nLower, nUpper, nSpecial, size int
size = p.size
if p.digits {
nDigits = 1
}
if p.lower {
nLower = 1
}
if p.upper {
nUpper = 1
}
if p.special {
nSpecial = 1
}
if size < 4 {
size = 12
}
cmd := fmt.Sprintf("pm gen -d %d -c %d -C %d -x %d --specialCharset '%s' -s %d", nDigits, nLower, nUpper, nSpecial, p.specialCharset, size)
log.Println(cmd)
pipe := script.Exec(cmd)
return pipe.String()
}
func NewDefaultMin12() Pm {
n := 12 + rand.Intn(4)
return New(true, true, true, true, n, "@#:.!*-")
}
func New(digits, lower, upper, special bool, size int, specialCharset string) Pm {
return pm{
digits: digits,
lower: lower,
upper: upper,
special: special,
size: size,
specialCharset: specialCharset,
}
}
//
//Usage:
//pm gen [flags]
//
//Flags:
//-f, --force Usando esta opção, você pode substituir uma senha existente pela nova senha gerada.
//Se uma senha com o mesmo nome já existir, ela será automaticamente substituída pela nova senha.
//-h, --help help for gen
//-i, --insert Ao usar essa opção, uma nova senha será gerada e adicionada à sua coleção de senhas utilizando o comando 'pass'
//--letterCharset string Letras maísculas e minúsculas (default "abcdefghijklmnopqrstuvxzwy")
//-d, --minDigits int Número mínimo de dígitos (default 2)
//-c, --minLowercase int Número mínimo de letras minúsculas (default 2)
//-x, --minSpecials int Número mínimo caracteres especiais (default 2)
//-C, --minUppercase int Número mínimo de letras maíusculas (default 2)
//--numberCharset string Números (default "0123456789")
//-s, --size int Tamanho da senha (default 12)
//--specialCharset string Caracteres especiais (default "@#$:.!*-")
//-t, --teste flag para testes