This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
JISQueueing/server/utilities.go

74 lines
2.4 KiB
Go

package server
import (
"JISQueueing/db"
"encoding/json"
nhttp "net/http"
)
type errorResponse struct {
Success bool `json:"success"`
Reason interface{} `json:"reason"`
}
type successResponse struct {
Success bool `json:"success"`
Data interface{} `json:"data"`
}
//InvalidUserInput : A helper function that tells the client that some request validation had failed. (Malformed requests)
func InvalidUserInput(w nhttp.ResponseWriter, r *nhttp.Request) {
writeJSONResponse(w, nhttp.StatusBadRequest, "Your request had failed checks.")
}
//Unauthorized : A helper function that tells the client that they either forgot to provide `token` or it was invalid.
//This function is also used in `/api/login` to tell the client that the user/password combination is incorrect.
func Unauthorized(w nhttp.ResponseWriter, r *nhttp.Request) {
writeJSONResponse(w, nhttp.StatusUnauthorized, "Identifying details not provided or invalid.")
}
//NotFound : A helper function that tells the client that the API endpoint they requested does not exist.
func NotFound(w nhttp.ResponseWriter, r *nhttp.Request) {
writeJSONResponse(w, nhttp.StatusNotFound, "The API endpoint was not found.")
}
//InternalServerError : A helper function that tells the client that the server had encountered an error processing their request.
func InternalServerError(w nhttp.ResponseWriter, r *nhttp.Request) {
writeJSONResponse(w, nhttp.StatusInternalServerError, "An internal server error occurred.")
}
//writeJSONResponse : A helper function that writes the given message into the standard response the client expects.
func writeJSONResponse(w nhttp.ResponseWriter, statusCode int, message interface{}) {
w.Header().Set("Content-Type", "application/json")
var toWrite interface{}
if statusCode == nhttp.StatusOK {
toWrite = successResponse{
Success: true,
Data: message,
}
} else {
w.WriteHeader(statusCode)
toWrite = errorResponse{
Success: false,
Reason: message,
}
}
result, _ := json.Marshal(toWrite)
w.Write(result)
}
//handleToken : A helper function that checks if the token provided by the client is valid.
//Returns if it is valid and sends the Unauthorized message if it isn't.
func handleToken(w nhttp.ResponseWriter, r *nhttp.Request) bool {
err := r.ParseForm()
if err != nil {
InvalidUserInput(w, r)
return false
}
if db.VerifyToken(r.Form.Get("token")) {
return true
}
Unauthorized(w, r)
return false
}