request.go 1.2 KB

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