request.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. // Copyright 2017 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 core
  5. import (
  6. "fmt"
  7. "io"
  8. "log"
  9. "mime/multipart"
  10. "net/http"
  11. "strconv"
  12. "github.com/gorilla/mux"
  13. )
  14. type Request struct {
  15. writer http.ResponseWriter
  16. request *http.Request
  17. }
  18. func (r *Request) GetRequest() *http.Request {
  19. return r.request
  20. }
  21. func (r *Request) GetBody() io.ReadCloser {
  22. return r.request.Body
  23. }
  24. func (r *Request) GetHeaders() http.Header {
  25. return r.request.Header
  26. }
  27. func (r *Request) GetScheme() string {
  28. return r.request.URL.Scheme
  29. }
  30. func (r *Request) GetFile(name string) (multipart.File, *multipart.FileHeader, error) {
  31. return r.request.FormFile(name)
  32. }
  33. func (r *Request) IsHTTPS() bool {
  34. return r.request.URL.Scheme == "https"
  35. }
  36. func (r *Request) GetCookie(name string) string {
  37. cookie, err := r.request.Cookie(name)
  38. if err == http.ErrNoCookie {
  39. return ""
  40. }
  41. return cookie.Value
  42. }
  43. func (r *Request) GetIntegerParam(param string) (int64, error) {
  44. vars := mux.Vars(r.request)
  45. value, err := strconv.Atoi(vars[param])
  46. if err != nil {
  47. log.Println(err)
  48. return 0, fmt.Errorf("%s parameter is not an integer", param)
  49. }
  50. if value < 0 {
  51. return 0, nil
  52. }
  53. return int64(value), nil
  54. }
  55. func (r *Request) GetStringParam(param, defaultValue string) string {
  56. vars := mux.Vars(r.request)
  57. value := vars[param]
  58. if value == "" {
  59. value = defaultValue
  60. }
  61. return value
  62. }
  63. func (r *Request) GetQueryStringParam(param, defaultValue string) string {
  64. value := r.request.URL.Query().Get(param)
  65. if value == "" {
  66. value = defaultValue
  67. }
  68. return value
  69. }
  70. func (r *Request) GetQueryIntegerParam(param string, defaultValue int) int {
  71. value := r.request.URL.Query().Get(param)
  72. if value == "" {
  73. return defaultValue
  74. }
  75. val, err := strconv.Atoi(value)
  76. if err != nil {
  77. return defaultValue
  78. }
  79. if val < 0 {
  80. return defaultValue
  81. }
  82. return val
  83. }
  84. func NewRequest(w http.ResponseWriter, r *http.Request) *Request {
  85. return &Request{writer: w, request: r}
  86. }