request.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package rest
  2. import (
  3. "io"
  4. "net/http"
  5. "git.ali33.ru/fcg-xvii/go-tools/json"
  6. )
  7. // Request реализует объект запроса
  8. type Request struct {
  9. *http.Request
  10. auth json.Map
  11. data json.Map
  12. files map[string]io.ReadCloser
  13. tokenGenerator func(json.Map, int64) (string, error)
  14. }
  15. func (s *Request) GenerateToken(data json.Map, expire int64) (string, error) {
  16. return s.tokenGenerator(data, expire)
  17. }
  18. func (s *Request) RPath() string {
  19. return s.URL.Path
  20. }
  21. func (s *Request) Data() json.Map {
  22. return s.data
  23. }
  24. // file keys
  25. func (s *Request) FileKeys() []string {
  26. res := make([]string, 0, len(s.files))
  27. for k := range s.files {
  28. res = append(res, k)
  29. }
  30. return res
  31. }
  32. func (s *Request) File(name string) (io.Reader, bool) {
  33. r, check := s.files[name]
  34. return r, check
  35. }
  36. // Auth returns auth data
  37. func (s *Request) Auth() json.Map {
  38. return s.auth
  39. }
  40. func (s *Request) IsAuth() bool {
  41. return s.auth != nil
  42. }
  43. func (s *Request) IsJSON() bool {
  44. return s.Header.Get("Content-Type") == "application/json"
  45. }
  46. func (s *Request) IsForm() bool {
  47. return s.Header.Get("Content-Type") == "application/x-www-form-urlencoded"
  48. }
  49. func (s *Request) Close() {
  50. for _, file := range s.files {
  51. file.Close()
  52. }
  53. }