Add CLI password hasher
This commit is contained in:
parent
875715803a
commit
4c5521d630
|
|
@ -4,6 +4,10 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"syscall"
|
||||||
|
|
||||||
|
"golang.org/x/crypto/bcrypt"
|
||||||
|
"golang.org/x/crypto/ssh/terminal"
|
||||||
)
|
)
|
||||||
|
|
||||||
// PrintRawMetrics prints raw json from the UniFi Controller. This is currently
|
// PrintRawMetrics prints raw json from the UniFi Controller. This is currently
|
||||||
|
|
@ -29,3 +33,24 @@ func (u *UnifiPoller) PrintRawMetrics() (err error) {
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PrintPasswordHash prints a bcrypt'd password. Useful for the web server.
|
||||||
|
func (u *UnifiPoller) PrintPasswordHash() (err error) {
|
||||||
|
pwd := []byte(u.Flags.HashPW)
|
||||||
|
|
||||||
|
if u.Flags.HashPW == "-" {
|
||||||
|
fmt.Print("Enter Password: ")
|
||||||
|
|
||||||
|
pwd, err = terminal.ReadPassword(syscall.Stdin)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println() // print a newline.
|
||||||
|
}
|
||||||
|
|
||||||
|
hash, err := bcrypt.GenerateFromPassword(pwd, bcrypt.MinCost)
|
||||||
|
fmt.Println(string(hash))
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
@ -29,6 +29,7 @@ type UnifiPoller struct {
|
||||||
type Flags struct {
|
type Flags struct {
|
||||||
ConfigFile string
|
ConfigFile string
|
||||||
DumpJSON string
|
DumpJSON string
|
||||||
|
HashPW string
|
||||||
ShowVer bool
|
ShowVer bool
|
||||||
*pflag.FlagSet
|
*pflag.FlagSet
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ require (
|
||||||
github.com/prometheus/common v0.10.0
|
github.com/prometheus/common v0.10.0
|
||||||
github.com/prometheus/procfs v0.1.1 // indirect
|
github.com/prometheus/procfs v0.1.1 // indirect
|
||||||
github.com/spf13/pflag v1.0.5
|
github.com/spf13/pflag v1.0.5
|
||||||
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2
|
||||||
golang.org/x/net v0.0.0-20200602114024-627f9648deb9 // indirect
|
golang.org/x/net v0.0.0-20200602114024-627f9648deb9 // indirect
|
||||||
golang.org/x/sys v0.0.0-20200610111108-226ff32320da // indirect
|
golang.org/x/sys v0.0.0-20200610111108-226ff32320da // indirect
|
||||||
golift.io/cnfg v0.0.5
|
golift.io/cnfg v0.0.5
|
||||||
|
|
|
||||||
|
|
@ -87,6 +87,7 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf
|
||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,10 @@ func (u *UnifiPoller) Start() error {
|
||||||
return nil // don't run anything else w/ version request.
|
return nil // don't run anything else w/ version request.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if u.Flags.HashPW != "" {
|
||||||
|
return u.PrintPasswordHash()
|
||||||
|
}
|
||||||
|
|
||||||
cfile, err := getFirstFile(strings.Split(u.Flags.ConfigFile, ","))
|
cfile, err := getFirstFile(strings.Split(u.Flags.ConfigFile, ","))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -55,6 +59,8 @@ func (f *Flags) Parse(args []string) {
|
||||||
f.PrintDefaults()
|
f.PrintDefaults()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
f.StringVarP(&f.HashPW, "encrypt", "e", "",
|
||||||
|
"This option bcrypts a provided string. Useful for the webserver password. Use - to be prompted.")
|
||||||
f.StringVarP(&f.DumpJSON, "dumpjson", "j", "",
|
f.StringVarP(&f.DumpJSON, "dumpjson", "j", "",
|
||||||
"This debug option prints a json payload and exits. See man page for more info.")
|
"This debug option prints a json payload and exits. See man page for more info.")
|
||||||
f.StringVarP(&f.ConfigFile, "config", "c", DefaultConfFile,
|
f.StringVarP(&f.ConfigFile, "config", "c", DefaultConfFile,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue