params.go 3.1 KB

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