From 9aa7debbfeae85d46f1e78d186f6d59a104aad52 Mon Sep 17 00:00:00 2001 From: Jeremy Latt Date: Sat, 1 Mar 2014 15:10:04 -0800 Subject: [PATCH] move password handling into a single file --- ergonomadic.go | 19 ++++++------------- irc/commands.go | 3 +-- irc/config.go | 6 +----- irc/password.go | 37 +++++++++++++++++++++++++++++++++++++ 4 files changed, 45 insertions(+), 20 deletions(-) create mode 100644 irc/password.go diff --git a/ergonomadic.go b/ergonomadic.go index f47f695d..663d1838 100644 --- a/ergonomadic.go +++ b/ergonomadic.go @@ -1,24 +1,12 @@ package main import ( - "code.google.com/p/go.crypto/bcrypt" - "encoding/base64" "flag" "fmt" "github.com/jlatt/ergonomadic/irc" "log" - "os" ) -func genPasswd(passwd string) { - crypted, err := bcrypt.GenerateFromPassword([]byte(passwd), bcrypt.MinCost) - if err != nil { - log.Fatal(err) - } - encoded := base64.StdEncoding.EncodeToString(crypted) - fmt.Println(encoded) -} - func main() { conf := flag.String("conf", "ergonomadic.json", "ergonomadic config file") initdb := flag.Bool("initdb", false, "initialize database") @@ -26,7 +14,11 @@ func main() { flag.Parse() if *passwd != "" { - genPasswd(*passwd) + encoded, err := irc.GenerateEncodedPassword(*passwd) + if err != nil { + log.Fatal(err) + } + fmt.Println(encoded) return } @@ -37,6 +29,7 @@ func main() { if *initdb { irc.InitDB(config.Database()) + log.Println("database initialized: " + config.Database()) return } diff --git a/irc/commands.go b/irc/commands.go index 8229d217..7f7a14bb 100644 --- a/irc/commands.go +++ b/irc/commands.go @@ -1,7 +1,6 @@ package irc import ( - "code.google.com/p/go.crypto/bcrypt" "code.google.com/p/go.text/unicode/norm" "errors" "fmt" @@ -214,7 +213,7 @@ func (cmd *PassCommand) CheckPassword() { if cmd.hash == nil { return } - cmd.err = bcrypt.CompareHashAndPassword(cmd.hash, cmd.password) + cmd.err = ComparePassword(cmd.hash, cmd.password) } func NewPassCommand(args []string) (editableCommand, error) { diff --git a/irc/config.go b/irc/config.go index 07518f00..9aabe12f 100644 --- a/irc/config.go +++ b/irc/config.go @@ -1,7 +1,6 @@ package irc import ( - "encoding/base64" "encoding/json" "log" "os" @@ -9,10 +8,7 @@ import ( ) func decodePassword(password string) []byte { - if password == "" { - return nil - } - bytes, err := base64.StdEncoding.DecodeString(password) + bytes, err := DecodePassword(password) if err != nil { log.Fatal(err) } diff --git a/irc/password.go b/irc/password.go new file mode 100644 index 00000000..1426c402 --- /dev/null +++ b/irc/password.go @@ -0,0 +1,37 @@ +package irc + +import ( + "code.google.com/p/go.crypto/bcrypt" + "encoding/base64" + "errors" +) + +var ( + EmptyPasswordError = errors.New("empty password") +) + +func GenerateEncodedPassword(passwd string) (encoded string, err error) { + if passwd == "" { + err = EmptyPasswordError + return + } + bcrypted, err := bcrypt.GenerateFromPassword([]byte(passwd), bcrypt.MinCost) + if err != nil { + return + } + encoded = base64.StdEncoding.EncodeToString(bcrypted) + return +} + +func DecodePassword(encoded string) (decoded []byte, err error) { + if encoded == "" { + err = EmptyPasswordError + return + } + decoded, err = base64.StdEncoding.DecodeString(encoded) + return +} + +func ComparePassword(hash, password []byte) error { + return bcrypt.CompareHashAndPassword(hash, password) +}