(self, flow_id, message)
| 666 | self.view.update([self.flow]) |
| 667 | |
| 668 | def get(self, flow_id, message): |
| 669 | message = getattr(self.flow, message) |
| 670 | assert isinstance(self.flow, HTTPFlow) |
| 671 | |
| 672 | original_cd = message.headers.get("Content-Disposition", None) |
| 673 | filename = None |
| 674 | if original_cd: |
| 675 | if m := re.search(r'filename=([-\w" .()]+)', original_cd): |
| 676 | filename = m.group(1) |
| 677 | if not filename: |
| 678 | filename = self.flow.request.path.split("?")[0].split("/")[-1] |
| 679 | |
| 680 | filename = re.sub(r'[^-\w" .()]', "", filename) |
| 681 | cd = f"attachment; {filename=!s}" |
| 682 | self.set_header("Content-Disposition", cd) |
| 683 | self.set_header("Content-Type", "application/text") |
| 684 | self.set_header("X-Content-Type-Options", "nosniff") |
| 685 | self.set_header("X-Frame-Options", "DENY") |
| 686 | self.write(message.get_content(strict=False)) |
| 687 | |
| 688 | |
| 689 | class FlowContentView(RequestHandler): |
nothing calls this directly
no test coverage detected