diff --git a/src/internal/admins/users.go b/src/internal/admins/users.go new file mode 100644 index 0000000..3a7ade1 --- /dev/null +++ b/src/internal/admins/users.go @@ -0,0 +1,26 @@ +package admin + +import ( + "net/http" + + "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/users" + "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/web" + + "github.com/sirupsen/logrus" +) + +// GetUsersHandler returns the user list +func GetUsersHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error { + log := env.Log.WithFields(logrus.Fields{ + "function": "admin.GetUsersHandler", + }) + + log.Debug("Getting users") + + users, err := users.GetAll(env.Database) + if err != nil { + return env.RenderError(w, err) + } + + return env.RenderJSON(w, users) +} diff --git a/src/internal/users/users.go b/src/internal/users/users.go index c975923..861bcc1 100644 --- a/src/internal/users/users.go +++ b/src/internal/users/users.go @@ -24,6 +24,8 @@ const ( getTokensQuery = `SELECT id, value FROM tokens WHERE user_id=$1;` checkTokenQuery = `SELECT count(*) FROM tokens WHERE user_id=$1 AND value=$2;` deleteTokenQuery = `DELETE FROM tokens WHERE user_id=$1 AND value=$2;` + + getAllUsersQuery = `SELECT * FROM users;` ) const ( @@ -133,6 +135,16 @@ func Get(q sqlx.Queryer, name string) (*User, error) { return u, nil } +// GetAll returns all the users +func GetAll(db *sqlx.DB) ([]*User, error) { + users := []*User{} + err := db.Select(&users, getAllUsersQuery) + if err != nil { + return nil, err + } + return users, nil +} + // Add user to database or raises an error func (u *User) Add(q sqlx.Queryer) error { var id string diff --git a/src/routes.go b/src/routes.go index a00e836..6e2af31 100644 --- a/src/routes.go +++ b/src/routes.go @@ -1,6 +1,7 @@ package main import ( + "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/admins" "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/external_medias" "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/movies" "gitlab.quimbo.fr/odwrtw/canape-sql/src/internal/shows" @@ -56,4 +57,7 @@ func setupRoutes(env *web.Env) { // Route to refresh all movies and shows env.Handle("/refresh", extmedias.RefreshHandler).WithRole(users.AdminRole).Methods("POST") + + // Admin routes + env.Handle("/admins/users", admin.GetUsersHandler).WithRole(users.AdminRole).Methods("GET") }