in functions.go [124:190]
func Get(res http.ResponseWriter, req *http.Request) {
l := namedLogger(zap.S(), "Get", req)
defer l.Sync()
l.Info("Get start")
res.Header().Set("Access-Control-Allow-Origin", "*")
q := req.URL.Query()
radix, err := getIntQueryParam(l, q, "radix", 10)
if err != nil {
writeError(l, res, http.StatusBadRequest, err.Error())
return
}
if radix != 10 && radix != 16 {
writeError(l, res, http.StatusBadRequest, "radix must be either 10 or 16")
return
}
set := index.Decimal
if radix == 16 {
set = index.Hexadecimal
}
start, err := getIntQueryParam(l, q, "start", 0)
if err != nil {
writeError(l, res, http.StatusBadRequest, err.Error())
return
}
if start < 0 {
writeError(l, res, http.StatusBadRequest, "start is negative")
return
}
if start > set.TotalDigits() {
writeError(l, res, http.StatusBadRequest, "start out of range")
return
}
numberOfDigits, err := getIntQueryParam(l, q, "numberOfDigits", 100)
if err != nil {
writeError(l, res, http.StatusBadRequest, err.Error())
return
}
if numberOfDigits < 0 {
writeError(l, res, http.StatusBadRequest, "numberOfDigits is negative")
return
}
if numberOfDigits > int64(maxDigitsPerRequest) {
writeError(l, res, http.StatusBadRequest, "numberOfDigits is too big")
return
}
unpacked, err := getService(req.Context()).
Get(req.Context(), l, set, start, numberOfDigits)
if err != nil {
writeError(l, res, http.StatusInternalServerError, "Internal Server Error")
return
}
res.Header().Set("Content-Type", "application/json")
res.WriteHeader(http.StatusOK)
err = json.NewEncoder(res).EncodeWithOption(
&GetResponse{Content: string(unpacked)},
json.DisableHTMLEscape(),
)
if err != nil {
l.Errorw("json encode failed",
"error", err)
}
}