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/events"
|
||||||
"git.quimbo.fr/odwrtw/canape/backend/models"
|
"git.quimbo.fr/odwrtw/canape/backend/models"
|
||||||
|
"git.quimbo.fr/odwrtw/canape/backend/tokens"
|
||||||
"git.quimbo.fr/odwrtw/canape/backend/web"
|
"git.quimbo.fr/odwrtw/canape/backend/web"
|
||||||
|
|
||||||
"github.com/gorilla/mux"
|
"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")
|
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;`
|
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;`
|
getAllWishlistedMovies = `SELECT DISTINCT(imdb_id) FROM movies_tracked;`
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -140,3 +142,9 @@ func GetAllWishlistedMovies(db *sqlx.DB) ([]string, error) {
|
|||||||
|
|
||||||
return movies, nil
|
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;`
|
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;`
|
getAllWishlistedShows = `SELECT DISTINCT(imdb_id) FROM shows_tracked;`
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -151,3 +153,9 @@ func GetAllWishlistedShows(db *sqlx.DB) ([]string, error) {
|
|||||||
|
|
||||||
return shows, nil
|
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
|
// Delete user from database or raise an error
|
||||||
func (u *User) Delete(ex *sqlx.DB) error {
|
func (u *User) Delete(ex *sqlx.DB) error {
|
||||||
_, err := ex.NamedExec(deleteUserQuery, u)
|
_, err := ex.NamedExec(deleteUserQuery, u)
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// HasRole checks if a user as a role
|
// HasRole checks if a user as a role
|
||||||
func (u *User) HasRole(role string) bool {
|
func (u *User) HasRole(role string) bool {
|
||||||
|
@ -89,6 +89,7 @@ func setupRoutes(env *web.Env) {
|
|||||||
// Admin routes
|
// Admin routes
|
||||||
env.Handle("/admins/users", admin.GetUsersHandler).WithRole(models.AdminRole).Methods("GET")
|
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", 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/stats", admin.GetStatsHandler).WithRole(models.AdminRole).Methods("GET")
|
||||||
env.Handle("/admins/tokens/{username}", admin.GenerateUserToken).WithRole(models.AdminRole).Methods("POST")
|
env.Handle("/admins/tokens/{username}", admin.GenerateUserToken).WithRole(models.AdminRole).Methods("POST")
|
||||||
env.Handle("/admins/modules", admin.GetModulesStatuses).WithRole(models.AdminRole).Methods("GET")
|
env.Handle("/admins/modules", admin.GetModulesStatuses).WithRole(models.AdminRole).Methods("GET")
|
||||||
|
@ -6,8 +6,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/jmoiron/sqlx"
|
|
||||||
"git.quimbo.fr/odwrtw/canape/backend/sqly"
|
"git.quimbo.fr/odwrtw/canape/backend/sqly"
|
||||||
|
"github.com/jmoiron/sqlx"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -16,6 +16,7 @@ const (
|
|||||||
getUserTokenQuery = `SELECT * FROM tokens WHERE username=$1 and token=$2;`
|
getUserTokenQuery = `SELECT * FROM tokens WHERE username=$1 and token=$2;`
|
||||||
getUserTokensQuery = `SELECT * FROM tokens WHERE username=$1;`
|
getUserTokensQuery = `SELECT * FROM tokens WHERE username=$1;`
|
||||||
deleteTokenQuery = `DELETE FROM tokens WHERE username=$1 AND token=$2;`
|
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 *;`
|
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
|
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
|
// Update updates a token
|
||||||
func (t *Token) Update(db *sqlx.DB) error {
|
func (t *Token) Update(db *sqlx.DB) error {
|
||||||
rows, err := db.NamedQuery(updateTokenQuery, t)
|
rows, err := db.NamedQuery(updateTokenQuery, t)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user