(res *http.Response)
| 130 | } |
| 131 | |
| 132 | func newHTTPFromResponse(res *http.Response) *types.HTTP { |
| 133 | var ( |
| 134 | detected string |
| 135 | contentLength = int32(res.ContentLength) |
| 136 | ) |
| 137 | |
| 138 | // read body data |
| 139 | body, err := ioutil.ReadAll(res.Body) |
| 140 | if err == nil { |
| 141 | |
| 142 | if contentLength == -1 { |
| 143 | // determine length manually |
| 144 | contentLength = int32(len(body)) |
| 145 | } |
| 146 | |
| 147 | // decompress payload if required |
| 148 | if res.Header.Get(headerContentEncoding) == "gzip" { |
| 149 | r, errReader := gzip.NewReader(bytes.NewReader(body)) |
| 150 | if errReader == nil { |
| 151 | body, err = ioutil.ReadAll(r) |
| 152 | if err == nil { |
| 153 | detected = http.DetectContentType(body) |
| 154 | } |
| 155 | } |
| 156 | } else { |
| 157 | detected = http.DetectContentType(body) |
| 158 | } |
| 159 | } |
| 160 | |
| 161 | return &types.HTTP{ |
| 162 | ResContentLength: contentLength, |
| 163 | ResContentType: res.Header.Get(headerContentType), |
| 164 | StatusCode: int32(res.StatusCode), |
| 165 | ServerName: res.Header.Get("Server"), |
| 166 | ResContentEncoding: res.Header.Get(headerContentEncoding), |
| 167 | ResContentTypeDetected: detected, |
| 168 | ResCookies: readCookies(res.Cookies()), |
| 169 | ResponseHeader: readHeader(res.Header), |
| 170 | // Security headers from response |
| 171 | StrictTransportSecurity: res.Header.Get("Strict-Transport-Security"), |
| 172 | ContentSecurityPolicy: res.Header.Get("Content-Security-Policy"), |
| 173 | XContentTypeOptions: res.Header.Get("X-Content-Type-Options"), |
| 174 | XFrameOptions: res.Header.Get("X-Frame-Options"), |
| 175 | XXSSProtection: res.Header.Get("X-XSS-Protection"), |
| 176 | ReferrerPolicy: res.Header.Get("Referrer-Policy"), |
| 177 | AccessControlAllowOrigin: res.Header.Get("Access-Control-Allow-Origin"), |
| 178 | HasServerTiming: res.Header.Get("Server-Timing") != "", |
| 179 | Server: res.Header.Get("Server"), |
| 180 | XPoweredBy: res.Header.Get("X-Powered-By"), |
| 181 | } |
| 182 | } |
| 183 | |
| 184 | // extractAuthType extracts the authorization type from the Authorization header |
| 185 | func extractAuthType(authHeader string) string { |
no test coverage detected