lishwist/server/routing/users.go

71 lines
1.6 KiB
Go

package routing
import (
"lishwist/db"
"lishwist/rsvp"
"net/http"
)
func Users(currentUser *db.User, h http.Header, r *rsvp.Request) rsvp.Response {
if !currentUser.IsAdmin {
return NotFound(h, r)
}
users, err := db.GetAllUsers()
if err != nil {
return rsvp.Error(http.StatusInternalServerError, "Failed to get users: %s", err)
}
return rsvp.Data("", users)
}
func User(currentUser *db.User, h http.Header, r *rsvp.Request) rsvp.Response {
if !currentUser.IsAdmin {
return NotFound(h, r)
}
reference := r.PathValue("userReference")
user, err := db.GetUserByReference(reference)
if err != nil {
return rsvp.Error(http.StatusInternalServerError, "Failed to get user: %s", err)
}
if user == nil {
return rsvp.Error(http.StatusNotFound, "User not found")
}
return rsvp.Data("", user)
}
func UserPost(currentUser *db.User, h http.Header, r *rsvp.Request) rsvp.Response {
if !currentUser.IsAdmin {
return NotFound(h, r)
}
form := r.ParseForm()
reference := r.PathValue("userReference")
if reference == currentUser.Reference {
return rsvp.Error(http.StatusForbidden, "You cannot delete yourself.")
}
user, err := db.GetAnyUserByReference(reference)
if err != nil {
return rsvp.Error(http.StatusInternalServerError, "Failed to get user: %s", err)
}
if user == nil {
return rsvp.Error(http.StatusNotFound, "User not found")
}
intent := form.Get("intent")
if intent != "" {
err = user.SetLive(intent != "delete")
if err != nil {
return rsvp.Error(http.StatusInternalServerError, "Failed to delete user: %s", err)
}
}
return rsvp.Data("", user)
}