From e6f858d4fdfb304fbf5b18ed5cd86fda1ee3bb4a Mon Sep 17 00:00:00 2001 From: Dan Ballard Date: Sat, 2 May 2015 10:13:33 -0700 Subject: [PATCH] user auth with pg bcrypt works --- README.md | 15 +++++++++++++++ user/user.go | 38 ++++---------------------------------- 2 files changed, 19 insertions(+), 34 deletions(-) diff --git a/README.md b/README.md index b5186b0..1146097 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,17 @@ # transmet Quick fast dirty link store that can dump them to an html template + +# install + +## DB setup +Create postgress DB and put details in db/dbconf.yml +on that DB +CREATE EXTENSION pgcrypto; + +go get bitbucket.org/liamstask/goose/cmd/goose +goose up + +## Build and run +go build +sudo cp transmet.conf /etc/init +sudo service transmet start diff --git a/user/user.go b/user/user.go index fe024c8..719371f 100644 --- a/user/user.go +++ b/user/user.go @@ -1,24 +1,11 @@ package user import ( - "code.google.com/p/go.crypto/bcrypt" - "crypto/rand" "database/sql" "fmt" _ "github.com/lib/pq" ) -func clear(b []byte) { - for i := 0; i < len(b); i++ { - b[i] = 0 - } -} - -func Crypt(password []byte) ([]byte, error) { - defer clear(password) - return bcrypt.GenerateFromPassword(password, bcrypt.DefaultCost) -} - type User struct { Username string db *sql.DB @@ -36,40 +23,23 @@ func UsernameExists(db *sql.DB, username string) (bool, error) { return count > 0, nil } -func GenDisposablePassword() string { - b := make([]byte, 16) - _, err := rand.Read(b) - if err != nil { - fmt.Println("user.GenDisposablePassword() error reading from urandom: ", err) - } - return fmt.Sprintf("%x", b) -} - func NewUserFromAuth(db *sql.DB, username, password string) *User { fmt.Println("NewUserFromAuth:", username, ":", password) - rows, err := db.Query("SELECT password FROM users WHERE username = $1", username) + rows, err := db.Query("SELECT username FROM users WHERE username = $1 AND password = crypt($2 ,gen_salt('bf'));", username, password) if err != nil { - fmt.Println("User DB Error: ", err) + fmt.Println("Username or auth fail: ", err) return nil } - var hash_db string user := User{db: db} - if rows.Next() { - var pw sql.NullString - err := rows.Scan(&user.Username, &pw) + err := rows.Scan(&user.Username) if err != nil { fmt.Println("scan err: ", err) } - hash_db = pw.String } else { return nil } - if err = bcrypt.CompareHashAndPassword([]byte(hash_db), []byte(password)); err == nil { - return &user - } - fmt.Println("auth fail:", err) - return nil + return &user } func NewUserFromUsername(db *sql.DB, username string) *User {