Skip to content

Commit c4ed539

Browse files
authored
scope basic auth to specific routes (#7186)
1 parent 2f86d8b commit c4ed539

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

tests/unit/accounts/test_core.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,23 @@
3333

3434

3535
class TestLogin:
36+
def test_invalid_route(self, pyramid_request, pyramid_services):
37+
service = pretend.stub(find_userid=pretend.call_recorder(lambda username: None))
38+
pyramid_services.register_service(IUserService, None, service)
39+
pyramid_services.register_service(
40+
IPasswordBreachedService, None, pretend.stub()
41+
)
42+
pyramid_request.matched_route = pretend.stub(name="route_name")
43+
assert accounts._basic_auth_login("myuser", "mypass", pyramid_request) is None
44+
assert service.find_userid.calls == []
45+
3646
def test_with_no_user(self, pyramid_request, pyramid_services):
3747
service = pretend.stub(find_userid=pretend.call_recorder(lambda username: None))
3848
pyramid_services.register_service(IUserService, None, service)
3949
pyramid_services.register_service(
4050
IPasswordBreachedService, None, pretend.stub()
4151
)
52+
pyramid_request.matched_route = pretend.stub(name="forklift.legacy.file_upload")
4253
assert accounts._basic_auth_login("myuser", "mypass", pyramid_request) is None
4354
assert service.find_userid.calls == [pretend.call("myuser")]
4455

@@ -56,6 +67,7 @@ def test_with_invalid_password(self, pyramid_request, pyramid_services):
5667
pyramid_services.register_service(
5768
IPasswordBreachedService, None, pretend.stub()
5869
)
70+
pyramid_request.matched_route = pretend.stub(name="forklift.legacy.file_upload")
5971
assert accounts._basic_auth_login("myuser", "mypass", pyramid_request) is None
6072
assert service.find_userid.calls == [pretend.call("myuser")]
6173
assert service.get_user.calls == [pretend.call(1)]
@@ -78,6 +90,7 @@ def test_with_disabled_user_no_reason(self, pyramid_request, pyramid_services):
7890
pyramid_services.register_service(
7991
IPasswordBreachedService, None, pretend.stub()
8092
)
93+
pyramid_request.matched_route = pretend.stub(name="forklift.legacy.file_upload")
8194
assert accounts._basic_auth_login("myuser", "mypass", pyramid_request) is None
8295
assert service.find_userid.calls == [pretend.call("myuser")]
8396
assert service.get_user.calls == [pretend.call(1)]
@@ -104,6 +117,7 @@ def test_with_disabled_user_compromised_pw(self, pyramid_request, pyramid_servic
104117
None,
105118
pretend.stub(failure_message_plain="Bad Password!"),
106119
)
120+
pyramid_request.matched_route = pretend.stub(name="forklift.legacy.file_upload")
107121

108122
with pytest.raises(BasicAuthBreachedPassword) as excinfo:
109123
assert (
@@ -140,6 +154,8 @@ def test_with_valid_password(self, monkeypatch, pyramid_request, pyramid_service
140154
IPasswordBreachedService, None, breach_service
141155
)
142156

157+
pyramid_request.matched_route = pretend.stub(name="forklift.legacy.file_upload")
158+
143159
now = datetime.datetime.utcnow()
144160

145161
with freezegun.freeze_time(now):
@@ -188,6 +204,8 @@ def test_via_basic_auth_compromised(
188204
IPasswordBreachedService, None, breach_service
189205
)
190206

207+
pyramid_request.matched_route = pretend.stub(name="forklift.legacy.file_upload")
208+
191209
with pytest.raises(BasicAuthBreachedPassword) as excinfo:
192210
accounts._basic_auth_login("myuser", "mypass", pyramid_request)
193211

warehouse/accounts/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ def _format_exc_status(exc, message):
5151

5252

5353
def _basic_auth_login(username, password, request):
54+
if request.matched_route.name not in ["forklift.legacy.file_upload"]:
55+
return
56+
5457
login_service = request.find_service(IUserService, context=None)
5558
breach_service = request.find_service(IPasswordBreachedService, context=None)
5659

0 commit comments

Comments
 (0)