diff --git a/controllers/auth.go b/controllers/auth.go index 8bbd36c..877aa9a 100644 --- a/controllers/auth.go +++ b/controllers/auth.go @@ -136,3 +136,15 @@ func GetRoles(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"message": "success", "data": roles}) } + +func GetUsers(c *gin.Context) { + users, err := models.QueryUsers() + + if err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + c.JSON(http.StatusOK, gin.H{"message": "success", "data": users}) + +} diff --git a/main.go b/main.go index 6f2f920..e39baeb 100644 --- a/main.go +++ b/main.go @@ -142,6 +142,7 @@ func main() { adminOnly.Use(middlewares.JwtAuthAdminMiddleware()) adminOnly.POST("/register", controllers.Register) adminOnly.GET("/roles", controllers.GetRoles) + adminOnly.GET("/users", controllers.GetUsers) // Get secrets protected := router.Group("/api/secret") diff --git a/models/user.go b/models/user.go index 648fe95..6ad2b0c 100644 --- a/models/user.go +++ b/models/user.go @@ -28,11 +28,9 @@ func (u *User) SaveUser() (*User, error) { var err error - // TODO - validate username not already in use + // Validate username not already in use _, err = GetUserByName(u.UserName) - if err != nil { - log.Printf("SaveUser Username already exists : '%v'\n", err) - } else { + if err != nil && err.Error() == "user not found" { log.Printf("SaveUser confirmed no existing user, continuing with creation of user '%s'\n", u.UserName) result, err := db.NamedExec((`INSERT INTO users (RoleId, UserName, Password) VALUES (:RoleId, :UserName, :Password)`), u) @@ -44,6 +42,8 @@ func (u *User) SaveUser() (*User, error) { id, _ := result.LastInsertId() log.Printf("SaveUser insert returned result id '%d' affecting %d row(s).\n", id, affected) } + } else { + log.Printf("SaveUser Username already exists : '%v'\n", err) } return u, nil @@ -159,8 +159,29 @@ func GetUserRoleFromToken(c *gin.Context) (UserRole, error) { return ur, nil } -/* -func (u *User) PrepareGive() { - u.Password = "" +func QueryUsers() ([]User, error) { + var results []User + + // Query database for role definitions + rows, err := db.Queryx("SELECT * FROM users") + + if err != nil { + log.Printf("QueryUsers error executing sql record : '%s'\n", err) + return results, err + } else { + // parse all the results into a slice + for rows.Next() { + var u User + err = rows.StructScan(&u) + if err != nil { + log.Printf("QueryUsers error parsing sql record : '%s'\n", err) + return results, err + } + results = append(results, u) + + } + log.Printf("QueryUsers retrieved '%d' results\n", len(results)) + } + + return results, nil } -*/