123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package rest_http
- import (
- "io"
- "net/http"
- "git.ali33.ru/fcg-xvii/go-tools/json"
- "git.ali33.ru/fcg-xvii/rest"
- )
- // Request реализует объект запроса
- type Request struct {
- *http.Request
- auth json.Map
- data json.Map
- files map[string]io.ReadCloser
- tokenGenerator func(json.Map, int64) (string, error)
- }
- func (s *Request) Root() any {
- return s.Request
- }
- // GenerateToken создает новый токен авторизации. expire - timestamp даты, после которой токен не будет действителен (если указан 0 - токен бессрочный)
- func (s *Request) GenerateToken(data json.Map, expire int64) (string, error) {
- return s.tokenGenerator(data, expire)
- }
- // Возвращает путь (краткий url) запроса
- func (s *Request) Command() string {
- return s.URL.Path
- }
- // Data возвращает словерь json запроса
- func (s *Request) Data() json.Map {
- return s.data
- }
- // FileKeys возвращает все имена файлы, которые доступны в запросе
- func (s *Request) FileKeys() []string {
- res := make([]string, 0, len(s.files))
- for k := range s.files {
- res = append(res, k)
- }
- return res
- }
- // File возвращает файл, принятый в запросе multipart/form-data, если он существует
- func (s *Request) File(name string) (io.Reader, bool) {
- r, check := s.files[name]
- return r, check
- }
- // Auth возвращает словарь с данными об авторизации (при условии, что в заголовке Bearer указан токен и его удалось успешно расшифровать и распарсить)
- func (s *Request) Auth() json.Map {
- return s.auth
- }
- // IsAuth указывает, есть ли словарь авторизации или нет
- func (s *Request) IsAuth() bool {
- return s.auth != nil
- }
- // IsJSON возарвщвет true, если в заголовке ContentType application/json
- func (s *Request) IsJSON() bool {
- return s.Header.Get("Content-Type") == "application/json"
- }
- // // IsForm возарвщвет true, если в заголовке ContentType multipart/form-data
- func (s *Request) IsForm() bool {
- return s.Header.Get("Content-Type") == "application/x-www-form-urlencoded"
- }
- // Close закрывает все открытые ресурсы запоса (файлы)
- func (s *Request) Close() {
- for _, file := range s.files {
- file.Close()
- }
- }
- func (s *Request) ResponseSuccess(data json.Map, files map[string]io.ReadCloser) rest.IResponse {
- return ResponseSuccess(data, files)
- }
- func (s *Request) ResponseError(code int, err rest.IErrorArgs) rest.IResponse {
- return ResponseError(code, err)
- }
|