django-pfx 1.4.dev38__tar.gz → 1.4.dev42__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/PKG-INFO +1 -1
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/django_pfx.egg-info/PKG-INFO +1 -1
- django_pfx-1.4.dev42/pfx/pfxcore/locale/fr/LC_MESSAGES/django.mo +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/locale/fr/LC_MESSAGES/django.po +8 -8
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/models/login_ban.py +3 -1
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/authentication_views.py +2 -2
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/tests/test_auth_api.py +20 -4
- django_pfx-1.4.dev38/pfx/pfxcore/locale/fr/LC_MESSAGES/django.mo +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/.gitignore +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/.gitlab-ci.yml +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/.pre-commit-config.yaml +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/LICENSE +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/MANIFEST.in +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/README.md +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/django_pfx.egg-info/SOURCES.txt +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/django_pfx.egg-info/dependency_links.txt +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/django_pfx.egg-info/requires.txt +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/django_pfx.egg-info/top_level.txt +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/doc/Makefile +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/doc/conf.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/doc/index.rst +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/doc/source/api.views.rst +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/doc/source/authentication.md +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/doc/source/decorator.md +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/doc/source/generate_openapi.md +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/doc/source/getting_started.md +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/doc/source/internationalisation.md +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/doc/source/model.md +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/doc/source/pfx_views.md +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/doc/source/profiling.md +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/doc/source/settings.md +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/doc/source/testing.md +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/img/pfx.png +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/img/pfx.svg +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/make_messages +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/manage.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/__init__.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/__init__.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/apidoc/__init__.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/apidoc/parameters.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/apidoc/schema.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/apidoc/tags.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/apps.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/decorator/__init__.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/decorator/rest.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/default_settings.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/exceptions.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/fields.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/http/__init__.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/http/json_response.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/management/__init__.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/management/commands/__init__.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/management/commands/makeapidoc.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/management/commands/profile.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/middleware/__init__.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/middleware/authentication.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/middleware/locale.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/middleware/profiling.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/migrations/0001_initial.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/migrations/__init__.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/models/__init__.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/models/abstract_pfx_base_user.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/models/cache_mixins.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/models/not_null_fields.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/models/otp_user_mixin.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/models/pfx_models.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/models/pfx_user.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/models/user_filtered_queryset_mixin.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/serializers/__init__.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/serializers/json.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/settings.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/shortcuts.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/storage/__init__.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/storage/s3_storage.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/templates/registration/otp_code_email.txt +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/templates/registration/otp_code_subject.txt +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/templates/registration/password_reset_email.txt +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/templates/registration/password_reset_subject.txt +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/templates/registration/welcome_email.txt +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/templates/registration/welcome_subject.txt +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/test.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/urls.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/__init__.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/fields.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/filters_views.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/locale_views.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/parameters/__init__.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/parameters/date_format.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/parameters/groups.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/parameters/list_count.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/parameters/list_items.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/parameters/list_mode.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/parameters/list_order.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/parameters/list_search.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/parameters/media_redirect.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/parameters/meta_fields.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/parameters/meta_filters.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/parameters/meta_orders.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/parameters/subset.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/parameters/subset_limit.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/parameters/subset_offset.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/parameters/subset_page.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/parameters/subset_page_size.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/parameters/subset_page_subset.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/rest_views.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/settings/__init__.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/settings/dev.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pyproject.toml +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/requirements.txt +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/serve-doc +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/setup.cfg +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/setup.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/__init__.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/locale/fr/LC_MESSAGES/django.po +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/models.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/settings/__init__.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/settings/ci.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/settings/common.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/settings/dev.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/settings/dev_custom_example.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/settings/dev_default.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/tests/__init__.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/tests/basic_api_errors.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/tests/basic_api_test.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/tests/test_api_doc.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/tests/test_body_mixin.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/tests/test_cache.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/tests/test_client.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/tests/test_fields.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/tests/test_filters.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/tests/test_locale_api.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/tests/test_perm_tests.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/tests/test_perms_api.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/tests/test_profiling_middleware.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/tests/test_settings.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/tests/test_shortcuts.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/tests/test_timezone_middleware.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/tests/test_tools.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/tests/test_user_queryset.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/tests/test_view_decorators.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/tests/test_view_fields.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/urls.py +0 -0
- {django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/tests/views.py +0 -0
|
Binary file
|
|
@@ -7,7 +7,7 @@ msgid ""
|
|
|
7
7
|
msgstr ""
|
|
8
8
|
"Project-Id-Version: \n"
|
|
9
9
|
"Report-Msgid-Bugs-To: \n"
|
|
10
|
-
"POT-Creation-Date: 2024-04-
|
|
10
|
+
"POT-Creation-Date: 2024-04-22 11:49+0200\n"
|
|
11
11
|
"PO-Revision-Date: 2021-06-22 23:31+0200\n"
|
|
12
12
|
"Last-Translator: \n"
|
|
13
13
|
"Language-Team: \n"
|
|
@@ -59,23 +59,23 @@ msgstr ""
|
|
|
59
59
|
"Format non valide, il peut s’agir d’un nombre en heures, « 1:05 », « :05 », "
|
|
60
60
|
"« 1h 5m », « 1.5h » ou « 30m »."
|
|
61
61
|
|
|
62
|
-
#: models/login_ban.py:
|
|
62
|
+
#: models/login_ban.py:45
|
|
63
63
|
msgid "Username"
|
|
64
64
|
msgstr "Nom d’utilisateur"
|
|
65
65
|
|
|
66
|
-
#: models/login_ban.py:
|
|
66
|
+
#: models/login_ban.py:46
|
|
67
67
|
msgid "Failed counter"
|
|
68
68
|
msgstr "Compteur d’échec"
|
|
69
69
|
|
|
70
|
-
#: models/login_ban.py:
|
|
70
|
+
#: models/login_ban.py:47
|
|
71
71
|
msgid "Last failed"
|
|
72
72
|
msgstr "Dernier échec"
|
|
73
73
|
|
|
74
|
-
#: models/login_ban.py:
|
|
74
|
+
#: models/login_ban.py:52
|
|
75
75
|
msgid "Login ban"
|
|
76
76
|
msgstr "Login banni"
|
|
77
77
|
|
|
78
|
-
#: models/login_ban.py:
|
|
78
|
+
#: models/login_ban.py:53
|
|
79
79
|
msgid "Login bans"
|
|
80
80
|
msgstr "Login bannis"
|
|
81
81
|
|
|
@@ -230,8 +230,8 @@ msgid "OTP is already enabled"
|
|
|
230
230
|
msgstr "OTP est déjà activé"
|
|
231
231
|
|
|
232
232
|
#: views/authentication_views.py:490 views/authentication_views.py:524
|
|
233
|
-
msgid "Invalid
|
|
234
|
-
msgstr "Code
|
|
233
|
+
msgid "Invalid code"
|
|
234
|
+
msgstr "Code invalide"
|
|
235
235
|
|
|
236
236
|
#: views/authentication_views.py:523
|
|
237
237
|
msgid "OTP disabled"
|
|
@@ -17,7 +17,9 @@ class LoginBanQuerySet(models.QuerySet):
|
|
|
17
17
|
return False
|
|
18
18
|
if ban.failed_counter % settings.PFX_LOGIN_BAN_FAILED_NUMBER == 0:
|
|
19
19
|
seconds = settings.PFX_LOGIN_BAN_SECONDS_START + (
|
|
20
|
-
settings.PFX_LOGIN_BAN_SECONDS_STEP * (
|
|
20
|
+
settings.PFX_LOGIN_BAN_SECONDS_STEP * (
|
|
21
|
+
ban.failed_counter //
|
|
22
|
+
settings.PFX_LOGIN_BAN_FAILED_NUMBER - 1))
|
|
21
23
|
ban_time = ban.last_failed + timedelta(seconds=seconds)
|
|
22
24
|
now = timezone.now()
|
|
23
25
|
if now < ban_time:
|
|
@@ -487,7 +487,7 @@ class AuthenticationView(
|
|
|
487
487
|
data = self.deserialize_body()
|
|
488
488
|
if self.request.user.confirm_otp(data.get('otp_code')):
|
|
489
489
|
return JsonResponse(dict(message=_("OTP enabled")))
|
|
490
|
-
return JsonResponse(dict(
|
|
490
|
+
return JsonResponse(dict(otp_code=[_("Invalid code")]), status=422)
|
|
491
491
|
|
|
492
492
|
@method_decorator(never_cache)
|
|
493
493
|
@rest_api("/otp/disable", public=False, method="put", priority_doc=54)
|
|
@@ -521,7 +521,7 @@ class AuthenticationView(
|
|
|
521
521
|
if self.request.user.is_otp_valid(data.get('otp_code')):
|
|
522
522
|
self.request.user.disable_otp()
|
|
523
523
|
return JsonResponse(dict(message=_("OTP disabled")))
|
|
524
|
-
return JsonResponse(dict(
|
|
524
|
+
return JsonResponse(dict(otp_code=[_("Invalid code")]), status=422)
|
|
525
525
|
|
|
526
526
|
@method_decorator(never_cache)
|
|
527
527
|
@rest_api(
|
|
@@ -88,7 +88,7 @@ class AuthAPITest(TestAssertMixin, TransactionTestCase):
|
|
|
88
88
|
|
|
89
89
|
@override_settings(
|
|
90
90
|
PFX_TOKEN_SHORT_VALIDITY={'minutes': 30},
|
|
91
|
-
PFX_LOGIN_BAN_FAILED_NUMBER=
|
|
91
|
+
PFX_LOGIN_BAN_FAILED_NUMBER=2,
|
|
92
92
|
PFX_LOGIN_BAN_SECONDS_START=30,
|
|
93
93
|
PFX_LOGIN_BAN_SECONDS_STEP=60)
|
|
94
94
|
def test_login_ban(self):
|
|
@@ -98,6 +98,11 @@ class AuthAPITest(TestAssertMixin, TransactionTestCase):
|
|
|
98
98
|
'username': 'jrr.tolkien',
|
|
99
99
|
'password': 'BAD PASSWORD'})
|
|
100
100
|
self.assertRC(response, 422)
|
|
101
|
+
response = self.client.post(
|
|
102
|
+
'/api/auth/login', {
|
|
103
|
+
'username': 'jrr.tolkien',
|
|
104
|
+
'password': 'BAD PASSWORD'})
|
|
105
|
+
self.assertRC(response, 422)
|
|
101
106
|
|
|
102
107
|
response = self.client.post(
|
|
103
108
|
'/api/auth/login', {
|
|
@@ -128,6 +133,11 @@ class AuthAPITest(TestAssertMixin, TransactionTestCase):
|
|
|
128
133
|
'username': 'jrr.tolkien',
|
|
129
134
|
'password': 'BAD PASSWORD'})
|
|
130
135
|
self.assertRC(response, 422)
|
|
136
|
+
response = self.client.post(
|
|
137
|
+
'/api/auth/login', {
|
|
138
|
+
'username': 'jrr.tolkien',
|
|
139
|
+
'password': 'BAD PASSWORD'})
|
|
140
|
+
self.assertRC(response, 422)
|
|
131
141
|
|
|
132
142
|
response = self.client.post(
|
|
133
143
|
'/api/auth/login', {
|
|
@@ -921,7 +931,7 @@ class AuthAPITest(TestAssertMixin, TransactionTestCase):
|
|
|
921
931
|
response = self.client.put('/api/auth/otp/enable', dict(
|
|
922
932
|
otp_code='-'))
|
|
923
933
|
self.assertRC(response, 422)
|
|
924
|
-
self.assertJE(response, '
|
|
934
|
+
self.assertJE(response, 'otp_code.@0', "Invalid code")
|
|
925
935
|
self.user1.refresh_from_db()
|
|
926
936
|
self.assertIsNone(self.user1.otp_secret_token)
|
|
927
937
|
self.assertEqual(len(self.user1.otp_secret_token_tmp), 32)
|
|
@@ -983,7 +993,7 @@ class AuthAPITest(TestAssertMixin, TransactionTestCase):
|
|
|
983
993
|
response = self.client.put('/api/auth/otp/disable', dict(
|
|
984
994
|
otp_code='-'))
|
|
985
995
|
self.assertRC(response, 422)
|
|
986
|
-
self.assertJE(response, '
|
|
996
|
+
self.assertJE(response, 'otp_code.@0', "Invalid code")
|
|
987
997
|
self.user1.refresh_from_db()
|
|
988
998
|
self.assertEqual(len(self.user1.otp_secret_token), 32)
|
|
989
999
|
self.assertIsNone(self.user1.otp_secret_token_tmp)
|
|
@@ -1072,7 +1082,7 @@ class AuthAPITest(TestAssertMixin, TransactionTestCase):
|
|
|
1072
1082
|
|
|
1073
1083
|
@override_settings(
|
|
1074
1084
|
PFX_TOKEN_SHORT_VALIDITY={'minutes': 30},
|
|
1075
|
-
PFX_LOGIN_BAN_FAILED_NUMBER=
|
|
1085
|
+
PFX_LOGIN_BAN_FAILED_NUMBER=2,
|
|
1076
1086
|
PFX_LOGIN_BAN_SECONDS_START=30,
|
|
1077
1087
|
PFX_LOGIN_BAN_SECONDS_STEP=60)
|
|
1078
1088
|
def test_otp_login_ban(self):
|
|
@@ -1085,6 +1095,9 @@ class AuthAPITest(TestAssertMixin, TransactionTestCase):
|
|
|
1085
1095
|
self.assertRC(response, 200)
|
|
1086
1096
|
token = self.get_val(response, 'token')
|
|
1087
1097
|
|
|
1098
|
+
response = self.client.post('/api/auth/otp/login', dict(
|
|
1099
|
+
token=token, otp_code='-'))
|
|
1100
|
+
self.assertRC(response, 422)
|
|
1088
1101
|
response = self.client.post('/api/auth/otp/login', dict(
|
|
1089
1102
|
token=token, otp_code='-'))
|
|
1090
1103
|
self.assertRC(response, 422)
|
|
@@ -1112,6 +1125,9 @@ class AuthAPITest(TestAssertMixin, TransactionTestCase):
|
|
|
1112
1125
|
response = self.client.post('/api/auth/otp/login', dict(
|
|
1113
1126
|
token=token, otp_code='-'))
|
|
1114
1127
|
self.assertRC(response, 422)
|
|
1128
|
+
response = self.client.post('/api/auth/otp/login', dict(
|
|
1129
|
+
token=token, otp_code='-'))
|
|
1130
|
+
self.assertRC(response, 422)
|
|
1115
1131
|
|
|
1116
1132
|
response = self.client.post('/api/auth/otp/login', dict(
|
|
1117
1133
|
token=token, otp_code='-'))
|
|
Binary file
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/models/user_filtered_queryset_mixin.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/templates/registration/otp_code_email.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/templates/registration/welcome_email.txt
RENAMED
|
File without changes
|
{django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/templates/registration/welcome_subject.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/parameters/media_redirect.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/parameters/subset_page_size.py
RENAMED
|
File without changes
|
{django_pfx-1.4.dev38 → django_pfx-1.4.dev42}/pfx/pfxcore/views/parameters/subset_page_subset.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|