params.go 2.5 KB

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