diff --git a/example/example b/example/example index ed13789..9aa9646 100755 Binary files a/example/example and b/example/example differ diff --git a/example/example.go b/example/example.go index 73b041a..d8f9ac1 100644 --- a/example/example.go +++ b/example/example.go @@ -15,7 +15,7 @@ func main() { flag.StringVar(&email, "email", "", "Email address to use for registration test") flag.Parse() - db, err:=sqlx.Open("sqlite3", ":memory") + db, err:=sqlx.Open("sqlite3", ":memory:") if err!=nil { fmt.Println("Couldn't open sqlite3 in-memory db:" + err.Error()) os.Exit(1) @@ -27,11 +27,13 @@ func main() { os.Exit(1) } schema:=`CREATE TABLE test_auth ( - username text NOT NULL unique key , - crypt text NOT NULL, - email text NOT NULL unique key, + username text NOT NULL , + password text NOT NULL, + email text NOT NULL unique, recovery text NOT NULL DEFAULT '', recoverytime timestamp null, + registration_date timestamp not null, + registration_ip text not null, lastseen timestamp );` _ ,err=db.Exec(schema) if err != nil { diff --git a/main.go b/main.go index 166ebc1..059500c 100644 --- a/main.go +++ b/main.go @@ -42,12 +42,16 @@ func Init(dbin *sqlx.DB, tp, sitename, fromaddr string) { } func UsernameAvailable(username string) bool { - + var u string q := fmt.Sprintf("select username from %s_auth where username=$1", c.TablePrefix) - err := c.db.Get(q, username) + err := c.db.Get(&u, q, username) if err == sql.ErrNoRows { return true } + if err != nil { + log.Printf("UsernameAvailable returned error: " + err.Error() + " Query was " + q) + return false + } return false } @@ -57,19 +61,31 @@ func Register(username, email, ip string) bool { if !UsernameAvailable(username) { return false } + log.Println("getting random bytes") pass := randBytes(16) - crypt, err := bcrypt.GenerateFromPassword(pass, 20) + log.Println("Generating hash") + crypt, err := bcrypt.GenerateFromPassword(pass, 10) if err != nil { log.Printf("Bcrypt GenerateFromPassword failed? Pass is %s and error is %s\n", pass, err.Error()) return false } - q := fmt.Sprintf("insert into %s_auth (username, email, password, registration_date, registration_ip) values ($1, $2, $3, NOW(), $4)", c.TablePrefix) + fmt.Println("db insert") + q := fmt.Sprintf("insert into %s_auth (username, email, password, registration_date, registration_ip) values ($1, $2, $3, CURRENT_TIMESTAMP, $4)", c.TablePrefix) _, err = c.db.Exec(q, username, email, crypt, ip) if err != nil { + log.Println("Register: insert failed: " + err.Error()) return false } - - return true + if sendRegistrationEmail(email, username, string(pass)) { + return true + } + log.Println("Failed to send registration email, deleting user.") + q=fmt.Sprintf("delete from %s_auth where username=$1 AND password=$2", c.TablePrefix) + _,err = c.db.Exec(q, username, string(crypt)) + if err != nil { + log.Println("Failed to delete new user " + username + " : " + err.Error()) + } + return false } func Login(username, password string) bool { @@ -89,7 +105,7 @@ func Login(username, password string) bool { } func bump(username string) { - q:=fmt.Sprintf("update %s_auth set lastseen=NOW() where username=$1", c.TablePrefix) + q:=fmt.Sprintf("update %s_auth set lastseen=CURRENT_TIMESTAMP where username=$1", c.TablePrefix) _, err :=c.db.Exec(q, username) if err != nil { log.Println("Error on user bump: " + err.Error())