/
opt
/
alt
/
python38
/
lib64
/
python3.8
/
site-packages
/
aiohttp
/
/opt/alt/python38/lib64/python3.8/site-packages/aiohttp
mkdir
upload
Name
Size
Mode
Actions
.hash/
-
0755
rm
__pycache__/
-
0755
rm
abc.py
5247
0644
edit
dl
rm
base_protocol.py
2701
0644
edit
dl
rm
client.py
43916
0644
edit
dl
rm
client_exceptions.py
8529
0644
edit
dl
rm
client_proto.py
8163
0644
edit
dl
rm
client_reqrep.py
36439
0644
edit
dl
rm
client_ws.py
10287
0644
edit
dl
rm
connector.py
42968
0644
edit
dl
rm
cookiejar.py
12163
0644
edit
dl
rm
formdata.py
6080
0644
edit
dl
rm
frozenlist.py
1718
0644
edit
dl
rm
frozenlist.pyi
1434
0644
edit
dl
rm
hdrs.py
3446
0644
edit
dl
rm
helpers.py
22918
0644
edit
dl
rm
http.py
1824
0644
edit
dl
rm
http_exceptions.py
2586
0644
edit
dl
rm
http_parser.py
30781
0644
edit
dl
rm
http_websocket.py
25098
0644
edit
dl
rm
http_writer.py
5341
0644
edit
dl
rm
locks.py
1220
0644
edit
dl
rm
log.py
325
0644
edit
dl
rm
multipart.py
32251
0644
edit
dl
rm
payload.py
13333
0644
edit
dl
rm
payload_streamer.py
2102
0644
edit
dl
rm
py.typed
7
0644
edit
dl
rm
pytest_plugin.py
11009
0644
edit
dl
rm
resolver.py
4608
0644
edit
dl
rm
signals.py
852
0644
edit
dl
rm
signals.pyi
319
0644
edit
dl
rm
streams.py
20530
0644
edit
dl
rm
tcp_helpers.py
962
0644
edit
dl
rm
test_utils.py
20253
0644
edit
dl
rm
tracing.py
14363
0644
edit
dl
rm
typedefs.py
1374
0644
edit
dl
rm
web.py
17881
0644
edit
dl
rm
web_app.py
17053
0644
edit
dl
rm
web_exceptions.py
10106
0644
edit
dl
rm
web_fileresponse.py
9025
0644
edit
dl
rm
web_log.py
7498
0644
edit
dl
rm
web_middlewares.py
4193
0644
edit
dl
rm
web_protocol.py
23251
0644
edit
dl
rm
web_request.py
26454
0644
edit
dl
rm
web_response.py
26202
0644
edit
dl
rm
web_routedef.py
6109
0644
edit
dl
rm
web_runner.py
11194
0644
edit
dl
rm
web_server.py
2058
0644
edit
dl
rm
web_urldispatcher.py
39532
0644
edit
dl
rm
web_ws.py
16783
0644
edit
dl
rm
worker.py
8022
0644
edit
dl
rm
_cparser.pxd
3959
0644
edit
dl
rm
_find_header.c
187570
0644
edit
dl
rm
_find_header.h
170
0644
edit
dl
rm
_find_header.pxd
68
0644
edit
dl
rm
_frozenlist.c
294193
0644
edit
dl
rm
_frozenlist.cpython-38-x86_64-linux-gnu.so
82936
0755
edit
dl
rm
_frozenlist.pyx
2605
0644
edit
dl
rm
_headers.pxi
2007
0644
edit
dl
rm
_helpers.c
211989
0644
edit
dl
rm
_helpers.cpython-38-x86_64-linux-gnu.so
61296
0755
edit
dl
rm
_helpers.pyi
202
0644
edit
dl
rm
_helpers.pyx
1049
0644
edit
dl
rm
_http_parser.c
1011524
0644
edit
dl
rm
_http_parser.cpython-38-x86_64-linux-gnu.so
475376
0755
edit
dl
rm
_http_parser.pyx
29022
0644
edit
dl
rm
_http_writer.c
213020
0644
edit
dl
rm
_http_writer.cpython-38-x86_64-linux-gnu.so
49160
0755
edit
dl
rm
_http_writer.pyx
4200
0644
edit
dl
rm
_websocket.c
137427
0644
edit
dl
rm
_websocket.cpython-38-x86_64-linux-gnu.so
31128
0755
edit
dl
rm
_websocket.pyx
1561
0644
edit
dl
rm
__init__.py
6934
0644
edit
dl
rm
Edit:
/opt/alt/python38/lib64/python3.8/site-packages/aiohttp/web_middlewares.py
(4193B)
import re from typing import TYPE_CHECKING, Awaitable, Callable, Tuple, Type, TypeVar from .web_exceptions import HTTPPermanentRedirect, _HTTPMove from .web_request import Request from .web_response import StreamResponse from .web_urldispatcher import SystemRoute __all__ = ( "middleware", "normalize_path_middleware", ) if TYPE_CHECKING: # pragma: no cover from .web_app import Application _Func = TypeVar("_Func") async def _check_request_resolves(request: Request, path: str) -> Tuple[bool, Request]: alt_request = request.clone(rel_url=path) match_info = await request.app.router.resolve(alt_request) alt_request._match_info = match_info # type: ignore if match_info.http_exception is None: return True, alt_request return False, request def middleware(f: _Func) -> _Func: f.__middleware_version__ = 1 # type: ignore return f _Handler = Callable[[Request], Awaitable[StreamResponse]] _Middleware = Callable[[Request, _Handler], Awaitable[StreamResponse]] def normalize_path_middleware( *, append_slash: bool = True, remove_slash: bool = False, merge_slashes: bool = True, redirect_class: Type[_HTTPMove] = HTTPPermanentRedirect ) -> _Middleware: """ Middleware factory which produces a middleware that normalizes the path of a request. By normalizing it means: - Add or remove a trailing slash to the path. - Double slashes are replaced by one. The middleware returns as soon as it finds a path that resolves correctly. The order if both merge and append/remove are enabled is 1) merge slashes 2) append/remove slash 3) both merge slashes and append/remove slash. If the path resolves with at least one of those conditions, it will redirect to the new path. Only one of `append_slash` and `remove_slash` can be enabled. If both are `True` the factory will raise an assertion error If `append_slash` is `True` the middleware will append a slash when needed. If a resource is defined with trailing slash and the request comes without it, it will append it automatically. If `remove_slash` is `True`, `append_slash` must be `False`. When enabled the middleware will remove trailing slashes and redirect if the resource is defined If merge_slashes is True, merge multiple consecutive slashes in the path into one. """ correct_configuration = not (append_slash and remove_slash) assert correct_configuration, "Cannot both remove and append slash" @middleware async def impl(request: Request, handler: _Handler) -> StreamResponse: if isinstance(request.match_info.route, SystemRoute): paths_to_check = [] if "?" in request.raw_path: path, query = request.raw_path.split("?", 1) query = "?" + query else: query = "" path = request.raw_path if merge_slashes: paths_to_check.append(re.sub("//+", "/", path)) if append_slash and not request.path.endswith("/"): paths_to_check.append(path + "/") if remove_slash and request.path.endswith("/"): paths_to_check.append(path[:-1]) if merge_slashes and append_slash: paths_to_check.append(re.sub("//+", "/", path + "/")) if merge_slashes and remove_slash: merged_slashes = re.sub("//+", "/", path) paths_to_check.append(merged_slashes[:-1]) for path in paths_to_check: path = re.sub("^//+", "/", path) # SECURITY: GHSA-v6wp-4m6f-gcjg resolves, request = await _check_request_resolves(request, path) if resolves: raise redirect_class(request.raw_path + query) return await handler(request) return impl def _fix_request_current_app(app: "Application") -> _Middleware: @middleware async def impl(request: Request, handler: _Handler) -> StreamResponse: with request.match_info.set_current_app(app): return await handler(request) return impl
Save
cmd:
run