From 562b0311c10bd76bf394320df5b3e36d6e8c3cbf Mon Sep 17 00:00:00 2001 From: Stephen McQuay Date: Tue, 19 Feb 2013 22:56:01 -0800 Subject: [PATCH] got storage of hashed passwords working --- README.rst | 4 ++++ init_db.sql | 1 + main.go | 35 ++++++++++++++++++++++++++++++----- 3 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 init_db.sql diff --git a/README.rst b/README.rst index 509d0c7..253d663 100644 --- a/README.rst +++ b/README.rst @@ -34,5 +34,9 @@ Dependencies - place in ./static/bootstrap +Bootstrap DB +============ + +$ sqlite3 db.sqlite < init_db.sql .. _bootstrap: http://twitter.github.com/bootstrap/assets/bootstrap.zip diff --git a/init_db.sql b/init_db.sql new file mode 100644 index 0000000..4f73906 --- /dev/null +++ b/init_db.sql @@ -0,0 +1 @@ +CREATE TABLE passes (id INTEGER PRIMARY KEY AUTOINCREMENT, hash STRING); diff --git a/main.go b/main.go index 68b1449..182ba16 100644 --- a/main.go +++ b/main.go @@ -1,19 +1,44 @@ package main import ( + "code.google.com/p/go.crypto/bcrypt" "flag" + "fmt" + "github.com/kuroneko/gosqlite3" "log" "net/http" ) -var addr = flag.String("addr", ":8000", "http service address") +var addr = flag.String("addr", ":8000", "address I'll listen on.") var static_files = flag.String("static", "./static", "location of static files") +var db_file = flag.String("db", "./db.sqlite", "the database") +var add_pw = flag.String("passwd", "", "add this pass to the db") func main() { flag.Parse() - http.Handle("/s/", http.StripPrefix("/s/", - http.FileServer(http.Dir(*static_files)))) - if err := http.ListenAndServe(*addr, nil); err != nil { - log.Fatal("ListenAndServe:", err) + + if *add_pw != "" { + hpass, err := bcrypt.GenerateFromPassword([]byte(*add_pw), bcrypt.DefaultCost) + if err != nil { + log.Fatal(err) + } + db, err := sqlite3.Open(*db_file) + defer db.Close() + if err != nil { + log.Fatal(err) + } + cmd := fmt.Sprintf("INSERT INTO passes ('id', 'hash') VALUES (null, '%v')", + string(hpass)) + _, err = db.Execute(cmd) + if err != nil { + log.Fatal(err) + } + } else { + fmt.Printf("%v\n", *add_pw) + http.Handle("/s/", http.StripPrefix("/s/", + http.FileServer(http.Dir(*static_files)))) + if err := http.ListenAndServe(*addr, nil); err != nil { + log.Fatal("ListenAndServe:", err) + } } }