params.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
  2. // SPDX-License-Identifier: Apache-2.0
  3. package request // import "miniflux.app/v2/internal/http/request"
  4. import (
  5. "net/http"
  6. "strconv"
  7. "strings"
  8. "github.com/gorilla/mux"
  9. )
  10. // FormInt64Value returns the named form value parsed as int64, or 0 on error.
  11. func FormInt64Value(r *http.Request, param string) int64 {
  12. value := r.FormValue(param)
  13. integer, err := strconv.ParseInt(value, 10, 64)
  14. if err != nil {
  15. return 0
  16. }
  17. return integer
  18. }
  19. // RouteInt64Param returns the named route parameter parsed as int64, or 0 when missing or invalid.
  20. func RouteInt64Param(r *http.Request, param string) int64 {
  21. value, err := strconv.ParseInt(routeParam(r, param), 10, 64)
  22. if err != nil {
  23. return 0
  24. }
  25. if value < 0 {
  26. return 0
  27. }
  28. return value
  29. }
  30. // RouteStringParam returns the named route parameter as a string.
  31. func RouteStringParam(r *http.Request, param string) string {
  32. return routeParam(r, param)
  33. }
  34. // QueryStringParam returns the named query parameter, or defaultValue if it is empty.
  35. func QueryStringParam(r *http.Request, param, defaultValue string) string {
  36. value := r.URL.Query().Get(param)
  37. if value == "" {
  38. value = defaultValue
  39. }
  40. return value
  41. }
  42. // QueryStringParamList returns the non-empty, trimmed values for the named query parameter.
  43. func QueryStringParamList(r *http.Request, param string) []string {
  44. var results []string
  45. values := r.URL.Query()
  46. if _, found := values[param]; found {
  47. for _, value := range values[param] {
  48. value = strings.TrimSpace(value)
  49. if value != "" {
  50. results = append(results, value)
  51. }
  52. }
  53. }
  54. return results
  55. }
  56. // QueryIntParam returns the named query parameter parsed as int, or defaultValue when missing, invalid, or negative.
  57. func QueryIntParam(r *http.Request, param string, defaultValue int) int {
  58. value := r.URL.Query().Get(param)
  59. if value == "" {
  60. return defaultValue
  61. }
  62. val, err := strconv.ParseInt(value, 10, 0)
  63. if err != nil {
  64. return defaultValue
  65. }
  66. if val < 0 {
  67. return defaultValue
  68. }
  69. return int(val)
  70. }
  71. // QueryInt64Param returns the named query parameter parsed as int64, or defaultValue when missing, invalid, or negative.
  72. func QueryInt64Param(r *http.Request, param string, defaultValue int64) int64 {
  73. value := r.URL.Query().Get(param)
  74. if value == "" {
  75. return defaultValue
  76. }
  77. val, err := strconv.ParseInt(value, 10, 64)
  78. if err != nil {
  79. return defaultValue
  80. }
  81. if val < 0 {
  82. return defaultValue
  83. }
  84. return val
  85. }
  86. // QueryBoolParam returns the named query parameter parsed as bool, or defaultValue when missing or invalid.
  87. func QueryBoolParam(r *http.Request, param string, defaultValue bool) bool {
  88. value := r.URL.Query().Get(param)
  89. if value == "" {
  90. return defaultValue
  91. }
  92. val, err := strconv.ParseBool(value)
  93. if err != nil {
  94. return defaultValue
  95. }
  96. return val
  97. }
  98. // HasQueryParam reports whether the query string contains the named parameter.
  99. func HasQueryParam(r *http.Request, param string) bool {
  100. values := r.URL.Query()
  101. _, ok := values[param]
  102. return ok
  103. }
  104. func routeParam(r *http.Request, param string) string {
  105. vars := mux.Vars(r)
  106. if value, found := vars[param]; found {
  107. return value
  108. }
  109. return r.PathValue(param)
  110. }