(self, request: Request)
| 191 | self._nonce_count = 1 |
| 192 | |
| 193 | def auth_flow(self, request: Request) -> typing.Generator[Request, Response, None]: |
| 194 | if self._last_challenge: |
| 195 | request.headers[class="st">"Authorization"] = self._build_auth_header( |
| 196 | request, self._last_challenge |
| 197 | ) |
| 198 | |
| 199 | response = yield request |
| 200 | |
| 201 | if response.status_code != 401 or class="st">"www-authenticate" not in response.headers: |
| 202 | class="cm"># If the response is not a 401 then we don't |
| 203 | class="cm"># need to build an authenticated request. |
| 204 | return |
| 205 | |
| 206 | for auth_header in response.headers.get_list(class="st">"www-authenticate"): |
| 207 | if auth_header.lower().startswith(class="st">"digest "): |
| 208 | break |
| 209 | else: |
| 210 | class="cm"># If the response does not include a class="st">'WWW-Authenticate: Digest ...' |
| 211 | class="cm"># header, then we don't need to build an authenticated request. |
| 212 | return |
| 213 | |
| 214 | self._last_challenge = self._parse_challenge(request, response, auth_header) |
| 215 | self._nonce_count = 1 |
| 216 | |
| 217 | request.headers[class="st">"Authorization"] = self._build_auth_header( |
| 218 | request, self._last_challenge |
| 219 | ) |
| 220 | if response.cookies: |
| 221 | Cookies(response.cookies).set_cookie_header(request=request) |
| 222 | yield request |
| 223 | |
| 224 | def _parse_challenge( |
| 225 | self, request: Request, response: Response, auth_header: str |
nothing calls this directly
no test coverage detected