// Copyright (c) Mainflux // SPDX-License-Identifier: Apache-2.0 package httputil import ( "encoding/json" "net/http" "strconv" "github.com/go-zoo/bone" "github.com/mainflux/mainflux/pkg/errors" ) // ReadUintQuery reads the value of uint64 http query parameters for a given key func ReadUintQuery(r *http.Request, key string, def uint64) (uint64, error) { vals := bone.GetQuery(r, key) if len(vals) > 1 { return 0, errors.ErrInvalidQueryParams } if len(vals) == 0 { return def, nil } strval := vals[0] val, err := strconv.ParseUint(strval, 10, 64) if err != nil { return 0, errors.ErrInvalidQueryParams } return val, nil } // ReadStringQuery reads the value of string http query parameters for a given key func ReadStringQuery(r *http.Request, key string, def string) (string, error) { vals := bone.GetQuery(r, key) if len(vals) > 1 { return "", errors.ErrInvalidQueryParams } if len(vals) == 0 { return def, nil } return vals[0], nil } // ReadMetadataQuery reads the value of json http query parameters for a given key func ReadMetadataQuery(r *http.Request, key string, def map[string]interface{}) (map[string]interface{}, error) { vals := bone.GetQuery(r, key) if len(vals) > 1 { return nil, errors.ErrInvalidQueryParams } if len(vals) == 0 { return def, nil } m := make(map[string]interface{}) err := json.Unmarshal([]byte(vals[0]), &m) if err != nil { return nil, errors.Wrap(errors.ErrInvalidQueryParams, err) } return m, nil } // ReadBoolQuery reads boolean query parameters in a given http request func ReadBoolQuery(r *http.Request, key string, def bool) (bool, error) { vals := bone.GetQuery(r, key) if len(vals) > 1 { return false, errors.ErrInvalidQueryParams } if len(vals) == 0 { return def, nil } b, err := strconv.ParseBool(vals[0]) if err != nil { return false, errors.ErrInvalidQueryParams } return b, nil } // ReadFloatQuery reads the value of float64 http query parameters for a given key func ReadFloatQuery(r *http.Request, key string, def float64) (float64, error) { vals := bone.GetQuery(r, key) if len(vals) > 1 { return 0, errors.ErrInvalidQueryParams } if len(vals) == 0 { return def, nil } fval := vals[0] val, err := strconv.ParseFloat(fval, 64) if err != nil { return 0, errors.ErrInvalidQueryParams } return val, nil }