Implement the delete user function in the backend
This commit is contained in:
parent
e8313c00b6
commit
7dee9e0a7c
@ -8,6 +8,7 @@ import (
|
||||
|
||||
"git.quimbo.fr/odwrtw/canape/backend/events"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/models"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/tokens"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/web"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
@ -137,3 +138,41 @@ func UpdateUserHandler(env *web.Env, w http.ResponseWriter, r *http.Request) err
|
||||
|
||||
return env.RenderOK(w, "user updated")
|
||||
}
|
||||
|
||||
// DeleteUserHandler deletes a user from the database
|
||||
func DeleteUserHandler(env *web.Env, w http.ResponseWriter, r *http.Request) error {
|
||||
log := env.Log.WithFields(logrus.Fields{
|
||||
"function": "admin.DeleteUserHandler",
|
||||
})
|
||||
|
||||
vars := mux.Vars(r)
|
||||
username := vars["username"]
|
||||
|
||||
user, err := models.GetUser(env.Database, username)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
log = log.WithField("username", user.Name)
|
||||
|
||||
log.Infof("deleting movies wishlist")
|
||||
if err := models.DeleteUserMoviesWishlist(env.Database, user.ID); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
log.Infof("deleting shows wishlist")
|
||||
if err := models.DeleteUserShowsWishlist(env.Database, user.ID); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
log.Infof("deleting user tokens")
|
||||
if err := tokens.DeleteUserTokens(env.Database, user.Name); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
log.Infof("deleting user")
|
||||
if err := user.Delete(env.Database); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return env.RenderOK(w, "user deleted")
|
||||
}
|
||||
|
@ -32,6 +32,8 @@ const (
|
||||
|
||||
deleteMovieWishlistedQueryByID = `DELETE FROM movies_tracked WHERE imdb_id=$1 AND user_id=$2;`
|
||||
|
||||
deleteUserMoviesWishlist = `DELETE FROM movies_tracked WHERE user_id=$1;`
|
||||
|
||||
getAllWishlistedMovies = `SELECT DISTINCT(imdb_id) FROM movies_tracked;`
|
||||
)
|
||||
|
||||
@ -140,3 +142,9 @@ func GetAllWishlistedMovies(db *sqlx.DB) ([]string, error) {
|
||||
|
||||
return movies, nil
|
||||
}
|
||||
|
||||
// DeleteUserMoviesWishlist deletes all the wishlisted movies of a user
|
||||
func DeleteUserMoviesWishlist(db *sqlx.DB, userID string) error {
|
||||
_, err := db.Exec(deleteUserMoviesWishlist, userID)
|
||||
return err
|
||||
}
|
||||
|
@ -28,6 +28,8 @@ const (
|
||||
|
||||
deleteShowWishlistedQueryByID = `DELETE FROM shows_tracked WHERE imdb_id=$1 AND user_id=$2;`
|
||||
|
||||
deleteUserShowsWishlist = `DELETE FROM shows_tracked WHERE user_id=$1;`
|
||||
|
||||
getAllWishlistedShows = `SELECT DISTINCT(imdb_id) FROM shows_tracked;`
|
||||
)
|
||||
|
||||
@ -151,3 +153,9 @@ func GetAllWishlistedShows(db *sqlx.DB) ([]string, error) {
|
||||
|
||||
return shows, nil
|
||||
}
|
||||
|
||||
// DeleteUserShowsWishlist deletes all the wishlisted shows of a user
|
||||
func DeleteUserShowsWishlist(db *sqlx.DB, userID string) error {
|
||||
_, err := db.Exec(deleteUserShowsWishlist, userID)
|
||||
return err
|
||||
}
|
||||
|
@ -144,11 +144,8 @@ func (u *User) Update(ex *sqlx.DB) error {
|
||||
// Delete user from database or raise an error
|
||||
func (u *User) Delete(ex *sqlx.DB) error {
|
||||
_, err := ex.NamedExec(deleteUserQuery, u)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// HasRole checks if a user as a role
|
||||
func (u *User) HasRole(role string) bool {
|
||||
|
@ -89,6 +89,7 @@ func setupRoutes(env *web.Env) {
|
||||
// Admin routes
|
||||
env.Handle("/admins/users", admin.GetUsersHandler).WithRole(models.AdminRole).Methods("GET")
|
||||
env.Handle("/admins/users", admin.UpdateUserHandler).WithRole(models.AdminRole).Methods("POST")
|
||||
env.Handle("/admins/users/{username}", admin.DeleteUserHandler).WithRole(models.AdminRole).Methods("DELETE")
|
||||
env.Handle("/admins/stats", admin.GetStatsHandler).WithRole(models.AdminRole).Methods("GET")
|
||||
env.Handle("/admins/tokens/{username}", admin.GenerateUserToken).WithRole(models.AdminRole).Methods("POST")
|
||||
env.Handle("/admins/modules", admin.GetModulesStatuses).WithRole(models.AdminRole).Methods("GET")
|
||||
|
@ -6,8 +6,8 @@ import (
|
||||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/jmoiron/sqlx"
|
||||
"git.quimbo.fr/odwrtw/canape/backend/sqly"
|
||||
"github.com/jmoiron/sqlx"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -16,6 +16,7 @@ const (
|
||||
getUserTokenQuery = `SELECT * FROM tokens WHERE username=$1 and token=$2;`
|
||||
getUserTokensQuery = `SELECT * FROM tokens WHERE username=$1;`
|
||||
deleteTokenQuery = `DELETE FROM tokens WHERE username=$1 AND token=$2;`
|
||||
deleteUserTokens = `DELETE FROM tokens WHERE username=$1;`
|
||||
updateTokenQuery = `UPDATE tokens SET description=:description, user_agent=:user_agent, ip=:ip, last_used=now() WHERE token=:token RETURNING *;`
|
||||
)
|
||||
|
||||
@ -86,6 +87,12 @@ func GetUserTokens(db *sqlx.DB, username string) ([]*Token, error) {
|
||||
return tokens, nil
|
||||
}
|
||||
|
||||
// DeleteUserTokens deletes all the user's tokens
|
||||
func DeleteUserTokens(db *sqlx.DB, username string) error {
|
||||
_, err := db.Exec(deleteUserTokens, username)
|
||||
return err
|
||||
}
|
||||
|
||||
// Update updates a token
|
||||
func (t *Token) Update(db *sqlx.DB) error {
|
||||
rows, err := db.NamedQuery(updateTokenQuery, t)
|
||||
|
Loading…
x
Reference in New Issue
Block a user