From 735f99addd98f232ae126cac11d93a9dbbcc3c79 Mon Sep 17 00:00:00 2001 From: Steve Manuel Date: Sat, 22 Oct 2016 01:39:19 -0700 Subject: adding initial support to edit and add admin users --- system/db/user.go | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) (limited to 'system/db/user.go') diff --git a/system/db/user.go b/system/db/user.go index a3a0be3..3b09dbe 100644 --- a/system/db/user.go +++ b/system/db/user.go @@ -4,10 +4,13 @@ import ( "bytes" "encoding/json" "errors" + "fmt" + "net/http" "github.com/bosssauce/ponzu/system/admin/user" "github.com/boltdb/bolt" + "github.com/nilslice/jwt" ) // ErrUserExists is used for the db to report to admin user of existing user @@ -72,3 +75,50 @@ func User(email string) ([]byte, error) { return val.Bytes(), nil } + +// UserAll returns all users from the db +func UserAll() ([][]byte, error) { + var users [][]byte + err := store.View(func(tx *bolt.Tx) error { + b := tx.Bucket([]byte("_users")) + err := b.ForEach(func(k, v []byte) error { + users = append(users, v) + return nil + }) + if err != nil { + return err + } + + return nil + }) + if err != nil { + return nil, err + } + + return users, nil +} + +// CurrentUser extracts the user from the request data and returns the current user from the db +func CurrentUser(req *http.Request) ([]byte, error) { + if !user.IsValid(req) { + return nil, fmt.Errorf("Error. Invalid User.") + } + + token, err := req.Cookie("_token") + if err != nil { + return nil, err + } + + claims := jwt.GetClaims(token.Value) + email, ok := claims["user"] + if !ok { + return nil, fmt.Errorf("Error. No user data found in request token.") + } + + usr, err := User(email.(string)) + if err != nil { + return nil, err + } + + return usr, nil +} -- cgit v1.2.3 From f0d0c08fcc7df98d78927cb09d6d9abc10f5caaa Mon Sep 17 00:00:00 2001 From: Steve Manuel Date: Sat, 22 Oct 2016 03:01:11 -0700 Subject: implementing handlers for user configuration --- system/db/user.go | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 54 insertions(+), 1 deletion(-) (limited to 'system/db/user.go') diff --git a/system/db/user.go b/system/db/user.go index 3b09dbe..170b331 100644 --- a/system/db/user.go +++ b/system/db/user.go @@ -16,6 +16,9 @@ import ( // ErrUserExists is used for the db to report to admin user of existing user var ErrUserExists = errors.New("Error. User exists.") +// ErrNoUserExists is used for the db to report to admin user of non-existing user +var ErrNoUserExists = errors.New("Error. No user exists.") + // SetUser sets key:value pairs in the db for user settings func SetUser(usr *user.User) (int, error) { err := store.Update(func(tx *bolt.Tx) error { @@ -41,7 +44,7 @@ func SetUser(usr *user.User) (int, error) { return err } - err = users.Put([]byte(usr.Email), j) + err = users.Put(email, j) if err != nil { return err } @@ -55,6 +58,56 @@ func SetUser(usr *user.User) (int, error) { return usr.ID, nil } +// UpdateUser sets key:value pairs in the db for existing user settings +func UpdateUser(usr *user.User) error { + err := store.Update(func(tx *bolt.Tx) error { + email := []byte(usr.Email) + users := tx.Bucket([]byte("_users")) + + // check if user is found by email, fail if nil + exists := users.Get(email) + if exists == nil { + return ErrNoUserExists + } + + // marshal User to json and put into bucket + j, err := json.Marshal(usr) + if err != nil { + return err + } + + err = users.Put(email, j) + if err != nil { + return err + } + + return nil + }) + if err != nil { + return err + } + + return nil +} + +// DeleteUser deletes a user from the db by email +func DeleteUser(email string) error { + err := store.Update(func(tx *bolt.Tx) error { + b := tx.Bucket([]byte("_users")) + err := b.Delete([]byte(email)) + if err != nil { + return err + } + + return nil + }) + if err != nil { + return err + } + + return nil +} + // User gets the user by email from the db func User(email string) ([]byte, error) { val := &bytes.Buffer{} -- cgit v1.2.3 From af228ca00a4c816f03c3b46f4cf11f26fe32455e Mon Sep 17 00:00:00 2001 From: Steve Manuel Date: Sat, 22 Oct 2016 03:21:29 -0700 Subject: debugging update user handler and db code --- system/db/user.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'system/db/user.go') diff --git a/system/db/user.go b/system/db/user.go index 170b331..2e449b8 100644 --- a/system/db/user.go +++ b/system/db/user.go @@ -59,7 +59,7 @@ func SetUser(usr *user.User) (int, error) { } // UpdateUser sets key:value pairs in the db for existing user settings -func UpdateUser(usr *user.User) error { +func UpdateUser(usr, updatedUsr *user.User) error { err := store.Update(func(tx *bolt.Tx) error { email := []byte(usr.Email) users := tx.Bucket([]byte("_users")) @@ -71,7 +71,7 @@ func UpdateUser(usr *user.User) error { } // marshal User to json and put into bucket - j, err := json.Marshal(usr) + j, err := json.Marshal(updatedUsr) if err != nil { return err } -- cgit v1.2.3 From fe16823a16cf32a26098db4e58e925e7179c9b98 Mon Sep 17 00:00:00 2001 From: Steve Manuel Date: Sat, 22 Oct 2016 03:32:45 -0700 Subject: testing fix for problematic Update user code --- system/db/user.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'system/db/user.go') diff --git a/system/db/user.go b/system/db/user.go index 2e449b8..d3e13f1 100644 --- a/system/db/user.go +++ b/system/db/user.go @@ -61,11 +61,10 @@ func SetUser(usr *user.User) (int, error) { // UpdateUser sets key:value pairs in the db for existing user settings func UpdateUser(usr, updatedUsr *user.User) error { err := store.Update(func(tx *bolt.Tx) error { - email := []byte(usr.Email) users := tx.Bucket([]byte("_users")) // check if user is found by email, fail if nil - exists := users.Get(email) + exists := users.Get([]byte(usr.Email)) if exists == nil { return ErrNoUserExists } @@ -76,7 +75,12 @@ func UpdateUser(usr, updatedUsr *user.User) error { return err } - err = users.Put(email, j) + err = users.Put([]byte(updatedUsr.Email), j) + if err != nil { + return err + } + + err = users.Delete([]byte(usr.Email)) if err != nil { return err } -- cgit v1.2.3 From f0c3efab51b4ee9cc3b1b51db862ae918cb091da Mon Sep 17 00:00:00 2001 From: Steve Manuel Date: Mon, 24 Oct 2016 09:42:39 -0700 Subject: debugging current user code --- system/db/user.go | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'system/db/user.go') diff --git a/system/db/user.go b/system/db/user.go index d3e13f1..8197b7c 100644 --- a/system/db/user.go +++ b/system/db/user.go @@ -172,10 +172,14 @@ func CurrentUser(req *http.Request) ([]byte, error) { return nil, fmt.Errorf("Error. No user data found in request token.") } + fmt.Println(claims, email.(string)) + usr, err := User(email.(string)) if err != nil { return nil, err } + fmt.Println(string(usr)) + return usr, nil } -- cgit v1.2.3 From 30d20c99a641dcd685221d6ddfa1e101f7672d1b Mon Sep 17 00:00:00 2001 From: Steve Manuel Date: Mon, 24 Oct 2016 15:13:04 -0700 Subject: debugging user email/pass update db code --- system/db/user.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'system/db/user.go') diff --git a/system/db/user.go b/system/db/user.go index 8197b7c..f25c2b2 100644 --- a/system/db/user.go +++ b/system/db/user.go @@ -80,9 +80,14 @@ func UpdateUser(usr, updatedUsr *user.User) error { return err } - err = users.Delete([]byte(usr.Email)) - if err != nil { - return err + // if email address was changed, delete the old record of former + // user with original email address + if usr.Email != updatedUsr.Email { + err = users.Delete([]byte(usr.Email)) + if err != nil { + return err + } + } return nil -- cgit v1.2.3 From 5d7ac0a00e9f4c33e095be9be4d79ae302c0c4c4 Mon Sep 17 00:00:00 2001 From: Steve Manuel Date: Mon, 24 Oct 2016 15:42:35 -0700 Subject: removing debug printlns and modifying other fmt.Println to log.Println for consistency --- system/db/user.go | 4 ---- 1 file changed, 4 deletions(-) (limited to 'system/db/user.go') diff --git a/system/db/user.go b/system/db/user.go index f25c2b2..d2dc3a9 100644 --- a/system/db/user.go +++ b/system/db/user.go @@ -177,14 +177,10 @@ func CurrentUser(req *http.Request) ([]byte, error) { return nil, fmt.Errorf("Error. No user data found in request token.") } - fmt.Println(claims, email.(string)) - usr, err := User(email.(string)) if err != nil { return nil, err } - fmt.Println(string(usr)) - return usr, nil } -- cgit v1.2.3