14
14
import json
15
15
import uuid
16
16
17
+ from datetime import timedelta
18
+
17
19
import freezegun
18
20
import pretend
19
21
import pytest
48
50
)
49
51
from warehouse .accounts .views import (
50
52
REMEMBER_DEVICE_COOKIE ,
51
- REMEMBER_DEVICE_SECONDS ,
52
53
two_factor_and_totp_validate ,
53
54
)
54
55
from warehouse .admin .flags import AdminFlag , AdminFlagValue
@@ -600,7 +601,7 @@ def test_get_returns_totp_form(self, pyramid_request, redirect_url):
600
601
ITokenService : token_service ,
601
602
IUserService : user_service ,
602
603
}[interface ]
603
-
604
+ pyramid_request . registry . settings = { "remember_device.days" : 30 }
604
605
pyramid_request .query_string = pretend .stub ()
605
606
606
607
form_obj = pretend .stub ()
@@ -613,7 +614,7 @@ def test_get_returns_totp_form(self, pyramid_request, redirect_url):
613
614
assert token_service .loads .calls == [
614
615
pretend .call (pyramid_request .query_string , return_timestamp = True )
615
616
]
616
- assert result == {"totp_form" : form_obj }
617
+ assert result == {"totp_form" : form_obj , "remember_device_days" : 30 }
617
618
assert form_class .calls == [
618
619
pretend .call (
619
620
pyramid_request .POST ,
@@ -653,16 +654,17 @@ def test_get_returns_webauthn(self, pyramid_request, redirect_url):
653
654
ITokenService : token_service ,
654
655
IUserService : user_service ,
655
656
}[interface ]
656
-
657
+ pyramid_request . registry . settings = { "remember_device.days" : 30 }
657
658
pyramid_request .query_string = pretend .stub ()
659
+
658
660
result = views .two_factor_and_totp_validate (
659
661
pyramid_request , _form_class = pretend .stub ()
660
662
)
661
663
662
664
assert token_service .loads .calls == [
663
665
pretend .call (pyramid_request .query_string , return_timestamp = True )
664
666
]
665
- assert result == {"has_webauthn" : True }
667
+ assert result == {"has_webauthn" : True , "remember_device_days" : 30 }
666
668
667
669
@pytest .mark .parametrize ("redirect_url" , [None , "/foo/bar/" , "/wat/" ])
668
670
def test_get_returns_recovery_code_status (self , pyramid_request , redirect_url ):
@@ -693,7 +695,7 @@ def test_get_returns_recovery_code_status(self, pyramid_request, redirect_url):
693
695
ITokenService : token_service ,
694
696
IUserService : user_service ,
695
697
}[interface ]
696
-
698
+ pyramid_request . registry . settings = { "remember_device.days" : 30 }
697
699
pyramid_request .query_string = pretend .stub ()
698
700
result = views .two_factor_and_totp_validate (
699
701
pyramid_request , _form_class = pretend .stub ()
@@ -702,7 +704,7 @@ def test_get_returns_recovery_code_status(self, pyramid_request, redirect_url):
702
704
assert token_service .loads .calls == [
703
705
pretend .call (pyramid_request .query_string , return_timestamp = True )
704
706
]
705
- assert result == {"has_recovery_codes" : True }
707
+ assert result == {"has_recovery_codes" : True , "remember_device_days" : 30 }
706
708
707
709
@pytest .mark .parametrize ("redirect_url" , ["test_redirect_url" , None ])
708
710
@pytest .mark .parametrize ("has_recovery_codes" , [True , False ])
@@ -770,6 +772,7 @@ def test_totp_auth(
770
772
lambda * args : None
771
773
)
772
774
pyramid_request .session .record_password_timestamp = lambda timestamp : None
775
+ pyramid_request .registry .settings = {"remember_device.days" : 30 }
773
776
774
777
form_obj = pretend .stub (
775
778
validate = pretend .call_recorder (lambda : True ),
@@ -862,6 +865,7 @@ def test_totp_form_invalid(self):
862
865
IUserService : user_service ,
863
866
}[interface ],
864
867
query_string = pretend .stub (),
868
+ registry = pretend .stub (settings = {"remember_device.days" : 30 }),
865
869
)
866
870
867
871
form_obj = pretend .stub (
@@ -875,7 +879,7 @@ def test_totp_form_invalid(self):
875
879
assert token_service .loads .calls == [
876
880
pretend .call (request .query_string , return_timestamp = True )
877
881
]
878
- assert result == {"totp_form" : form_obj }
882
+ assert result == {"totp_form" : form_obj , "remember_device_days" : 30 }
879
883
880
884
def test_two_factor_token_missing_userid (self , pyramid_request ):
881
885
token_service = pretend .stub (
@@ -1149,7 +1153,7 @@ def test_check_remember_device_token_invalid_wrong_user(self):
1149
1153
)
1150
1154
assert not views ._check_remember_device_token (request , 1 )
1151
1155
1152
- def test_remember_device (self , monkeypatch , pyramid_request ):
1156
+ def test_remember_device (self ):
1153
1157
token_service = pretend .stub (dumps = lambda * a : "token_data" )
1154
1158
pyramid_request = pretend .stub (
1155
1159
find_service = lambda interface , ** kwargs : {
@@ -1160,6 +1164,9 @@ def test_remember_device(self, monkeypatch, pyramid_request):
1160
1164
user = pretend .stub (
1161
1165
record_event = pretend .call_recorder (lambda * a , ** kw : None )
1162
1166
),
1167
+ registry = pretend .stub (
1168
+ settings = {"remember_device.seconds" : timedelta (days = 30 ).total_seconds ()}
1169
+ ),
1163
1170
)
1164
1171
response = pretend .stub (set_cookie = pretend .call_recorder (lambda * a , ** kw : None ))
1165
1172
@@ -1169,10 +1176,10 @@ def test_remember_device(self, monkeypatch, pyramid_request):
1169
1176
pretend .call (
1170
1177
REMEMBER_DEVICE_COOKIE ,
1171
1178
"token_data" ,
1172
- max_age = REMEMBER_DEVICE_SECONDS ,
1179
+ max_age = timedelta ( days = 30 ). total_seconds () ,
1173
1180
httponly = True ,
1174
1181
secure = True ,
1175
- samesite = b"lax " ,
1182
+ samesite = b"strict " ,
1176
1183
path = "/accounts/login" ,
1177
1184
)
1178
1185
]
@@ -1236,7 +1243,6 @@ def test_get_returns_form(self, pyramid_request):
1236
1243
ITokenService : token_service ,
1237
1244
IUserService : user_service ,
1238
1245
}[interface ]
1239
-
1240
1246
pyramid_request .query_string = pretend .stub ()
1241
1247
1242
1248
form_obj = pretend .stub ()
@@ -1383,6 +1389,7 @@ def test_recovery_code_form_invalid(self):
1383
1389
IUserService : user_service ,
1384
1390
}[interface ],
1385
1391
query_string = pretend .stub (),
1392
+ # registry=pretend.stub(settings={"remember_device.days": 30}),
1386
1393
)
1387
1394
1388
1395
form_obj = pretend .stub (
0 commit comments