request.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // Copyright 2018 Frédéric Guillot. All rights reserved.
  2. // Use of this source code is governed by the Apache 2.0
  3. // license that can be found in the LICENSE file.
  4. package request
  5. import (
  6. "fmt"
  7. "net/http"
  8. "strconv"
  9. "github.com/gorilla/mux"
  10. )
  11. // Cookie returns the cookie value.
  12. func Cookie(r *http.Request, name string) string {
  13. cookie, err := r.Cookie(name)
  14. if err == http.ErrNoCookie {
  15. return ""
  16. }
  17. return cookie.Value
  18. }
  19. // FormIntValue returns a form value as integer.
  20. func FormIntValue(r *http.Request, param string) int64 {
  21. value := r.FormValue(param)
  22. integer, _ := strconv.Atoi(value)
  23. return int64(integer)
  24. }
  25. // IntParam returns an URL route parameter as integer.
  26. func IntParam(r *http.Request, param string) (int64, error) {
  27. vars := mux.Vars(r)
  28. value, err := strconv.Atoi(vars[param])
  29. if err != nil {
  30. return 0, fmt.Errorf("request: %s parameter is not an integer", param)
  31. }
  32. if value < 0 {
  33. return 0, nil
  34. }
  35. return int64(value), nil
  36. }
  37. // Param returns an URL route parameter as string.
  38. func Param(r *http.Request, param, defaultValue string) string {
  39. vars := mux.Vars(r)
  40. value := vars[param]
  41. if value == "" {
  42. value = defaultValue
  43. }
  44. return value
  45. }
  46. // QueryParam returns a querystring parameter as string.
  47. func QueryParam(r *http.Request, param, defaultValue string) string {
  48. value := r.URL.Query().Get(param)
  49. if value == "" {
  50. value = defaultValue
  51. }
  52. return value
  53. }
  54. // QueryIntParam returns a querystring parameter as integer.
  55. func QueryIntParam(r *http.Request, param string, defaultValue int) int {
  56. value := r.URL.Query().Get(param)
  57. if value == "" {
  58. return defaultValue
  59. }
  60. val, err := strconv.Atoi(value)
  61. if err != nil {
  62. return defaultValue
  63. }
  64. if val < 0 {
  65. return defaultValue
  66. }
  67. return val
  68. }
  69. // HasQueryParam checks if the query string contains the given parameter.
  70. func HasQueryParam(r *http.Request, param string) bool {
  71. values := r.URL.Query()
  72. _, ok := values[param]
  73. return ok
  74. }