params.go 2.7 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. "github.com/gorilla/mux"
  9. )
  10. // FormInt64Value returns a form value as integer.
  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 an URL route parameter as int64.
  20. func RouteInt64Param(r *http.Request, param string) int64 {
  21. vars := mux.Vars(r)
  22. value, err := strconv.ParseInt(vars[param], 10, 64)
  23. if err != nil {
  24. return 0
  25. }
  26. if value < 0 {
  27. return 0
  28. }
  29. return value
  30. }
  31. // RouteStringParam returns a URL route parameter as string.
  32. func RouteStringParam(r *http.Request, param string) string {
  33. vars := mux.Vars(r)
  34. return vars[param]
  35. }
  36. // QueryStringParam returns a query string parameter as string.
  37. func QueryStringParam(r *http.Request, param, defaultValue string) string {
  38. value := r.URL.Query().Get(param)
  39. if value == "" {
  40. value = defaultValue
  41. }
  42. return value
  43. }
  44. // QueryStringParamList returns all values associated to the parameter.
  45. func QueryStringParamList(r *http.Request, param string) []string {
  46. var results []string
  47. values := r.URL.Query()
  48. if _, found := values[param]; found {
  49. for _, value := range values[param] {
  50. value = strings.TrimSpace(value)
  51. if value != "" {
  52. results = append(results, value)
  53. }
  54. }
  55. }
  56. return results
  57. }
  58. // QueryIntParam returns a query string parameter as integer.
  59. func QueryIntParam(r *http.Request, param string, defaultValue int) int {
  60. value := r.URL.Query().Get(param)
  61. if value == "" {
  62. return defaultValue
  63. }
  64. val, err := strconv.ParseInt(value, 10, 0)
  65. if err != nil {
  66. return defaultValue
  67. }
  68. if val < 0 {
  69. return defaultValue
  70. }
  71. return int(val)
  72. }
  73. // QueryInt64Param returns a query string parameter as int64.
  74. func QueryInt64Param(r *http.Request, param string, defaultValue int64) int64 {
  75. value := r.URL.Query().Get(param)
  76. if value == "" {
  77. return defaultValue
  78. }
  79. val, err := strconv.ParseInt(value, 10, 64)
  80. if err != nil {
  81. return defaultValue
  82. }
  83. if val < 0 {
  84. return defaultValue
  85. }
  86. return val
  87. }
  88. // QueryBoolParam returns a query string parameter as bool.
  89. func QueryBoolParam(r *http.Request, param string, defaultValue bool) bool {
  90. value := r.URL.Query().Get(param)
  91. if value == "" {
  92. return defaultValue
  93. }
  94. val, err := strconv.ParseBool(value)
  95. if err != nil {
  96. return defaultValue
  97. }
  98. return val
  99. }
  100. // HasQueryParam checks if the query string contains the given parameter.
  101. func HasQueryParam(r *http.Request, param string) bool {
  102. values := r.URL.Query()
  103. _, ok := values[param]
  104. return ok
  105. }