wfc-server/api/clear.go
ppeb 41f7fddc4d
Revert "Revert motd, clear, and user action response"
This reverts commit 3144bd7cf8.

The reason this commit had to be made was because certain apis were PR'd
upstream, but were unwanted and thus removed in a separate commit. It
would likely have been better to drop the commits pushed upstream but
it's too late to fix that, so now we have a revert of a revert.
2025-03-05 20:33:20 -06:00

79 lines
1.9 KiB
Go

package api
import (
"encoding/json"
"io"
"net/http"
"strconv"
"wwfc/database"
)
func HandleClear(w http.ResponseWriter, r *http.Request) {
var user *database.User
var success bool
var err string
var statusCode int
if r.Method == http.MethodPost {
user, success, err, statusCode = handleClearImpl(r)
} else if r.Method == http.MethodOptions {
statusCode = http.StatusNoContent
w.Header().Set("Access-Control-Allow-Methods", "POST")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
} else {
err = "Incorrect request. POST only."
statusCode = http.StatusMethodNotAllowed
w.Header().Set("Allow", "POST")
}
w.Header().Set("Access-Control-Allow-Origin", "*")
if user == nil {
user = &database.User{}
}
var jsonData []byte
if statusCode != http.StatusNoContent {
w.Header().Set("Content-Type", "application/json")
jsonData, _ = json.Marshal(UserActionResponse{*user, success, err})
}
w.Header().Set("Content-Length", strconv.Itoa(len(jsonData)))
w.WriteHeader(statusCode)
w.Write(jsonData)
}
type ClearRequestSpec struct {
Secret string
ProfileID uint32
}
func handleClearImpl(r *http.Request) (*database.User, bool, string, int) {
// TODO: Actual authentication rather than a fixed secret
body, err := io.ReadAll(r.Body)
if err != nil {
return nil, false, "Unable to read request body", http.StatusBadRequest
}
var req ClearRequestSpec
err = json.Unmarshal(body, &req)
if err != nil {
return nil, false, err.Error(), http.StatusBadRequest
}
if apiSecret == "" || req.Secret != apiSecret {
return nil, false, "Invalid API secret in request", http.StatusUnauthorized
}
user, success := database.ClearProfile(pool, ctx, req.ProfileID)
if !success {
return nil, false, "Unable to query user data from the database", http.StatusInternalServerError
}
// Don't return empty JSON, this is placeholder for now.
return &user, true, "", http.StatusOK
}