Skip to content

Commit d77bd56

Browse files
authored
Fix basic auth user-pass string handling (#530)
1 parent 5cb7608 commit d77bd56

File tree

2 files changed

+7
-17
lines changed

2 files changed

+7
-17
lines changed

aiohttp_remotes/basic_auth.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ async def middleware(
5151
except (UnicodeDecodeError, UnicodeEncodeError, binascii.Error):
5252
return await self.raise_error(request)
5353

54-
credentials = auth_decoded.split(":")
54+
credentials = auth_decoded.split(":", maxsplit=1)
5555

5656
if len(credentials) != 2:
5757
return await self.raise_error(request)

tests/test_basic_auth.py

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
1+
import pytest
2+
13
import aiohttp
24
from aiohttp import web
35
from aiohttp.pytest_plugin import AiohttpClient
46
from aiohttp_remotes import BasicAuth, setup as _setup
57

68

7-
async def test_basic_auth_ok(aiohttp_client: AiohttpClient) -> None:
9+
@pytest.mark.parametrize("password", ["pass", "pass:pass:"])
10+
async def test_basic_auth_ok(aiohttp_client: AiohttpClient, password: str) -> None:
811
async def handler(request: web.Request) -> web.Response:
912
return web.Response()
1013

1114
app = web.Application()
1215
app.router.add_get("/", handler)
13-
await _setup(app, BasicAuth("user", "pass", "realm"))
16+
await _setup(app, BasicAuth("user", password, "realm"))
1417
cl = await aiohttp_client(app)
15-
resp = await cl.get("/", auth=aiohttp.BasicAuth("user", "pass"))
18+
resp = await cl.get("/", auth=aiohttp.BasicAuth("user", password))
1619
assert resp.status == 200
1720

1821

@@ -55,19 +58,6 @@ async def handler(request: web.Request) -> web.Response:
5558
assert resp.headers["WWW-Authenticate"] == "Basic realm=realm"
5659

5760

58-
async def test_basic_auth_malformed_req2(aiohttp_client: AiohttpClient) -> None:
59-
async def handler(request: web.Request) -> web.Response:
60-
return web.Response()
61-
62-
app = web.Application()
63-
app.router.add_get("/", handler)
64-
await _setup(app, BasicAuth("user", "pass", "realm"))
65-
cl = await aiohttp_client(app)
66-
resp = await cl.get("/", headers={"Authorization": "Basic nonbase64"})
67-
assert resp.status == 401
68-
assert resp.headers["WWW-Authenticate"] == "Basic realm=realm"
69-
70-
7161
async def test_basic_auth_white_path(aiohttp_client: AiohttpClient) -> None:
7262
async def handler(request: web.Request) -> web.Response:
7363
return web.Response()

0 commit comments

Comments
 (0)