diff --git a/admin/admin.go b/admin/admin.go
index 15ff500..19e2c55 100644
--- a/admin/admin.go
+++ b/admin/admin.go
@@ -13,25 +13,34 @@ import (
"net/http"
"os"
"strings"
- "encoding/json"
+ "golang.org/x/crypto/bcrypt"
+ "database/sql"
+
+ _ "github.com/mattn/go-sqlite3"
"github.com/gmemstr/pogo/common"
)
-type Users struct {
- Username UserOpts `json:u`
-}
-
-type UserOpts struct {
- Password string `json:password`
- Realname string `json:realname`
- Email string `json:email`
-}
-
+// Add user to the SQLite3 database
func AddUser() common.Handler {
return func(rc *common.RouterContext, w http.ResponseWriter, r *http.Request) *common.HTTPError {
+ db, err := sql.Open("sqlite3", "assets/config/users.db")
+ if err != nil {
+ return &common.HTTPError{
+ Message: fmt.Sprintf("error opening sqlite3 file: %v", err),
+ StatusCode: http.StatusInternalServerError,
+ }
+ }
+ statement, err := db.Prepare("INSERT INTO users(username,hash,realname,email) VALUES (?,?,?,?)")
+ if err != nil {
+ return &common.HTTPError{
+ Message: fmt.Sprintf("error preparing sqlite3 statement: %v", err),
+ StatusCode: http.StatusInternalServerError,
+ }
+ }
+
err := r.ParseMultipartForm(32 << 20)
if err != nil {
return &common.HTTPError{
@@ -40,34 +49,17 @@ func AddUser() common.Handler {
}
}
- d, err := ioutil.ReadFile("assets/config/users.json")
- if err != nil {
- return &common.HTTPError{
- Message: err.Error(),
- StatusCode: http.StatusBadRequest,
- }
- }
- var u []Users
- err = json.Unmarshal(d, &u)
-
- // username := strings.Join(r.Form["username"], "")
+ username := strings.Join(r.Form["username"], "")
password := strings.Join(r.Form["password"], "")
realname := strings.Join(r.Form["realname"], "")
email := strings.Join(r.Form["email"], "")
- // newuseropts := &UserOpts {
- // Password: password,
- // Realname: realname,
- // Email: email,
- // }
+ hash, err := bcrypt.GenerateFromPassword(password, 4)
- u = append(u, Users{UserOpts{Password: password,Realname: realname,Email: email,}})
- json.Marshal(u)
- fmt.Println(u)
-
- w.Write([]byte(""))
+ result, err := statement.Exec(username,hash,realname,email)
+ w.Write([]byte(""))
+ db.Close()
return nil
-
}
}
diff --git a/router/router.go b/router/router.go
index 09ca50e..61d8483 100644
--- a/router/router.go
+++ b/router/router.go
@@ -121,7 +121,7 @@ func loginHandler() common.Handler {
}
}
- stmt, err := db.Prepare("SELECT * FROM users WHERE username=?")
+ statement, err := db.Prepare("SELECT * FROM users WHERE username=?")
if _, err := auth.DecryptCookie(r); err == nil {
http.Redirect(w, r, "/admin", http.StatusTemporaryRedirect)
@@ -143,7 +143,7 @@ func loginHandler() common.Handler {
username := r.Form.Get("username")
password := r.Form.Get("password")
- rows, err := stmt.Query(username)
+ rows, err := statement.Query(username)
if username == "" || password == "" {
return &common.HTTPError{
@@ -182,6 +182,7 @@ func loginHandler() common.Handler {
w.Header().Add("Set-Cookie", c.String())
// And now redirect the user to admin page
http.Redirect(w, r, "/admin", http.StatusTemporaryRedirect)
+ db.Close()
return nil
}