diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bf3bd09bf..971b4f64b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -23,12 +23,12 @@ jobs: - name: Install dependencies run: | python -m pip install -U pip - python -m pip install -U setuptools twine wheel + python -m pip install -U setuptools build twine - name: Build package run: | - python setup.py --version - python setup.py sdist --format=gztar bdist_wheel + python -m build --version + python -m build twine check dist/* - name: Upload packages to Jazzband diff --git a/.gitignore b/.gitignore index 7cd853fbb..6232ea83e 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ example/settings_private.py /.tox/ /htmlcov/ /docs/_build/ +/dist/ .eggs/ .idea/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 70fcf8f01..3fd2d8ea3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ ### Changed - Allow django-phonenumber-field 8.x.x. +### Added +- Support confirmation for Django 5.1. + +### Removed +- Dropped support for Django <4.2. + ## 1.16.0 ### Fixed - Avoid potentially empty `
settings_private.py
file? By doing so, the example app will be "
"able to call and text you to verify your authentication tokens. Otherwise, "
"the tokens will be shown on the screen."
-msgstr "Vlořili jste vaše Twilio údaje do souboru settings_private.py
? S němi vám bude moc vzorová aplikace zavolat a posílat SMS zprávy k ověřování vašich tokenů. Jinak vám tokeny budou zobrazeny na obrazovce."
+msgstr "Vložili jste své Twilio údaje do souboru settings_private.py
? S nimi vám bude moct vzorová aplikace zavolat a posílat SMS zprávy k ověřování vašich tokenů. Jinak vám tokeny budou zobrazeny na obrazovce."
#: templates/home.html:26
msgid "Next steps:"
@@ -100,12 +101,12 @@ msgstr "Začněte registrací účtu."
#: templates/home.html:30
#, python-format
msgid "Login to your account."
-msgstr "Přihlašte se do vašeho účtu."
+msgstr "Přihlašte se do svého účtu."
#: templates/home.html:32
#, python-format
msgid "Enable two-factor authentication."
-msgstr "Zapnout dvoufázové ovšření"
+msgstr "Zapnout dvoufázové ověření"
#: templates/home.html:34
#, python-format
@@ -113,14 +114,14 @@ msgid ""
"Then, logout and login once more to your account to see two-factor"
" authentication at work."
-msgstr "Potom se opět odhlašte a přihlašte do vašeho účtu, abyste viděli dvoufázové ověření v praxi."
+msgstr "Potom se opět odhlaste a přihlaste do vašeho účtu, abyste viděli dvoufázové ověření v praxi."
#: templates/home.html:37
#, python-format
msgid ""
"At last, you've gained access to the secret "
"page! :-)"
-msgstr "Konečně, byl vám umožněn přístup k tajné stránce! :-)"
+msgstr "Konečně vám byl umožněn přístup k tajné stránce! :-)"
#: templates/registration.html:5
msgid "Registration"
@@ -150,4 +151,4 @@ msgstr "Blahopřejeme, váš účet byl úspěšně zaregistrován."
msgid ""
"Congratulations, you've made it. You have successfully enabled two-factor "
"authentication and logged in with your token."
-msgstr "Blahopřejeme, zvládli jste to. Úspěšně jste zapnulu dvoufázové ověření, a přihlísili jste se se svým tokenem."
+msgstr "Blahopřejeme, zvládli jste to. Úspěšně jste zapnuli dvoufázové ověření, a přihlásili jste se se svým tokenem."
diff --git a/pyproject.toml b/pyproject.toml
index d7f441cc7..d9e56c15a 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -17,7 +17,7 @@ maintainers = [
license = {text = "MIT"}
requires-python = ">= 3.8"
dependencies = [
- "Django>=3.2",
+ "Django>=4.2",
"django_otp>=0.8.0",
"qrcode>=4.0.0,<7.99",
"django-phonenumber-field<9",
@@ -28,11 +28,9 @@ classifiers = [
"Development Status :: 5 - Production/Stable",
"Environment :: Web Environment",
"Framework :: Django",
- "Framework :: Django :: 3.2",
- "Framework :: Django :: 4.0",
- "Framework :: Django :: 4.1",
"Framework :: Django :: 4.2",
"Framework :: Django :: 5.0",
+ "Framework :: Django :: 5.1",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
diff --git a/tox.ini b/tox.ini
index 980b519e8..a5289e9a0 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,8 +1,7 @@
[tox]
envlist =
- py{38,39,310}-dj32-{normal,yubikey,custom_user,webauthn}
- py{38,39,310,311}-dj{40,41,42}-{normal,yubikey,custom_user,webauthn}
- py{310,311,312}-dj{50,main}-{normal,yubikey,custom_user,webauthn}
+ py{38,39,310,311,312}-dj42-{normal,yubikey,custom_user,webauthn}
+ py{310,311,312}-dj{50,51,main}-{normal,yubikey,custom_user,webauthn}
[gh-actions]
python =
@@ -14,11 +13,9 @@ python =
[gh-actions:env]
DJANGO =
- 3.2: dj32
- 4.0: dj40
- 4.1: dj41
4.2: dj42
5.0: dj50
+ 5.1: dj51
main: djmain
VARIANT =
normal: normal
@@ -41,11 +38,9 @@ basepython =
py311: python3.11
py312: python3.12
deps =
- dj32: Django<4.0
- dj40: Django<4.1
- dj41: Django<4.2
dj42: Django<5.0
dj50: Django<5.1
+ dj51: Django<5.2
djmain: https://github.com/django/django/archive/main.tar.gz
webauthn: -rrequirements_e2e.txt
extras =
diff --git a/two_factor/__init__.py b/two_factor/__init__.py
index 9144e571b..8b1378917 100644
--- a/two_factor/__init__.py
+++ b/two_factor/__init__.py
@@ -1,4 +1 @@
-import django
-if django.VERSION <= (3, 2):
- default_app_config = 'two_factor.apps.TwoFactorConfig'
diff --git a/two_factor/locale/cs/LC_MESSAGES/django.mo b/two_factor/locale/cs/LC_MESSAGES/django.mo
index 32ece39b1..59527213e 100644
Binary files a/two_factor/locale/cs/LC_MESSAGES/django.mo and b/two_factor/locale/cs/LC_MESSAGES/django.mo differ
diff --git a/two_factor/locale/cs/LC_MESSAGES/django.po b/two_factor/locale/cs/LC_MESSAGES/django.po
index a85108e36..19c37b9a0 100644
--- a/two_factor/locale/cs/LC_MESSAGES/django.po
+++ b/two_factor/locale/cs/LC_MESSAGES/django.po
@@ -5,13 +5,14 @@
# Translators:
# Adam Tran, 2023
# Jonas Vacek, 2022
+# Pavel Mises, 2024
msgid ""
msgstr ""
"Project-Id-Version: django-two-factor-auth\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-01-18 18:32+0100\n"
"PO-Revision-Date: 2013-11-19 18:12+0000\n"
-"Last-Translator: Adam Tran, 2023\n"
+"Last-Translator: Pavel Mises, 2024\n"
"Language-Team: Czech (http://app.transifex.com/Bouke/django-two-factor-auth/language/cs/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -61,20 +62,20 @@ msgstr "en"
#: plugins/email/forms.py:11
msgid "Email address"
-msgstr "Emailová adresa"
+msgstr "E-mailová adresa"
#: plugins/email/method.py:12
msgid "Email"
-msgstr "Email"
+msgstr "E-mail"
#: plugins/email/method.py:41
#, python-format
msgid "Send email to %s"
-msgstr "Poslat email na %s"
+msgstr "Poslat e-mail na %s"
#: plugins/email/method.py:44
msgid "We sent you an email, please enter the token we sent."
-msgstr "Poslali jsme vám email, zadejte prosím token, který jsme vám poslali."
+msgstr "Poslali jsme vám e-mail, zadejte prosím zaslaný token."
#: plugins/phonenumber/forms.py:10 plugins/phonenumber/forms.py:25
msgid "Phone Number"
@@ -94,11 +95,11 @@ msgstr "Zavolat na %s"
#: plugins/phonenumber/method.py:38
msgid "We sent you a text message, please enter the token we sent."
-msgstr "Poslali jsme vám SMS zprávu, zadejte prosím token, který jsme vám poslali."
+msgstr "Poslali jsme vám SMS zprávu, zadejte prosím zaslaný token."
#: plugins/phonenumber/method.py:40 templates/two_factor/core/setup.html:37
msgid "We are calling your phone right now, please enter the digits you hear."
-msgstr "Voláme vám, zadejte prosím čísla která slyšíte."
+msgstr "Voláme vám, zadejte prosím čísla, která slyšíte."
#: plugins/phonenumber/method.py:45 plugins/phonenumber/utils.py:25
msgid "Phone call"
@@ -209,11 +210,11 @@ msgstr "Nemáte zatím žádné záložní tokeny."
#: templates/two_factor/core/setup_complete.html:12
#: templates/two_factor/core/setup_complete.html:19
msgid "Back to Account Security"
-msgstr "Zpět do Bezpečnost Účtu"
+msgstr "Zpět do Bezpečnosti účtu"
#: templates/two_factor/core/backup_tokens.html:26
msgid "Generate Tokens"
-msgstr "Vygenerovat Tokeny"
+msgstr "Vygenerovat tokeny"
#: templates/two_factor/core/login.html:10
msgid "Login"
@@ -221,7 +222,7 @@ msgstr "Přihlásit"
#: templates/two_factor/core/login.html:13
msgid "Enter your credentials."
-msgstr "Vložte vaše přihlašovací údaje."
+msgstr "Vložte své přihlašovací údaje."
#: templates/two_factor/core/login.html:17
msgid ""
@@ -251,14 +252,14 @@ msgid ""
"The page you requested, enforces users to verify using two-factor "
"authentication for security reasons. You need to enable these security "
"features in order to access this page."
-msgstr "Stránka, kterou jste požadovali, nutí uživatele k ověření pomocí dvoufaktorového ověřování z bezpečnostních důvodů. Chcete-li získat přístup k této stránce, musíte tyto funkce zabezpečení povolit."
+msgstr "Stránka, kterou jste požadovali, vybízí uživatele k potvrzení pomocí dvoufázového ověřování z bezpečnostních důvodů. Chcete-li získat přístup k této stránce, musíte si zapnout tento způsob zabezpečení."
#: templates/two_factor/core/otp_required.html:11
#: templates/two_factor/profile/profile.html:51
msgid ""
"Two-factor authentication is not enabled for your account. Enable two-factor"
" authentication for enhanced account security."
-msgstr "Dvou-faktorové ověřování není pro váš účet povoleno. Povolte dvou-faktorové ověřování pro lepší zabezpečení účtu."
+msgstr "Dvoufázové ověřování není pro váš účet zapnuto. Zapněte dvoufázové ověřování pro lepší zabezpečení účtu."
#: templates/two_factor/core/otp_required.html:16
msgid "Go back"
@@ -291,7 +292,7 @@ msgstr "Na vaše telefonní číslo jsme odeslali token. Zadejte token, který j
msgid ""
"You are about to take your account security to the next level. Follow the "
"steps in this wizard to enable two-factor authentication."
-msgstr "Chystáte se posunout zabezpečení svého účtu na další úroveň. Chcete-li povolit dvou-faktorové ověřování, postupujte podle kroků v tomto průvodci."
+msgstr "Chystáte se posunout zabezpečení svého účtu na další úroveň. Chcete-li povolit dvoufázové ověřování, postupujte podle kroků v tomto průvodci."
#: templates/two_factor/core/setup.html:15
msgid "Please select which authentication method you would like to use."
@@ -307,11 +308,11 @@ msgstr "Chcete-li začít používat generátor tokenů, naskenujte pomocí smar
msgid ""
"Alternatively you can use the following secret to setup TOTP in your "
"authenticator or password manager manually."
-msgstr "Alternativně můžete použít následující secret TOTP ve vašem autentizátoru nebo k manuálně ve správci hesel."
+msgstr "Případně můžete použít následující časově omezené jednorázové heslo (TOTP) ve vašem autentizátoru nebo k manuálně ve správci hesel."
#: templates/two_factor/core/setup.html:24
msgid "TOTP Secret:"
-msgstr "TOTP Secret:"
+msgstr "TOTP klíč:"
#: templates/two_factor/core/setup.html:25
msgid "Then, enter the token generated by the app."
@@ -350,18 +351,18 @@ msgstr "Pro identifikaci a ověření vašeho YubiKey vložte token do pole ní
#: templates/two_factor/core/setup_complete.html:7
msgid ""
"Congratulations, you've successfully enabled two-factor authentication."
-msgstr "Blahopřejeme, ůspěšně jste zapli dvoufázové ověřování"
+msgstr "Blahopřejeme, úspěšně jste zapnuli dvoufázové ověřování."
#: templates/two_factor/core/setup_complete.html:14
msgid ""
"However, it might happen that you don't have access to your primary token "
"device. To enable account recovery, add a phone number."
-msgstr "Může se však stát, že nebudete mít přístup ke svému primárnímu tokenovému zařízení. Chcete-li povolit obnovení účtu, přidejte telefonní číslo."
+msgstr "Může se však stát, že nebudete mít přístup ke svému primárnímu autorizačnímu zařízení. Chcete-li povolit obnovení účtu, přidejte telefonní číslo."
#: templates/two_factor/core/setup_complete.html:21
#: templates/two_factor/profile/profile.html:29
msgid "Add Phone Number"
-msgstr "Přidat Telefonní Číslo"
+msgstr "Přidat telefonní číslo"
#: templates/two_factor/profile/disable.html:5
msgid "Disable Two-factor Authentication"
@@ -371,7 +372,7 @@ msgstr "Vypnout dvoufázové ověřování"
msgid ""
"You are about to disable two-factor authentication. This weakens your "
"account security, are you sure?"
-msgstr "Chystáte se vypnout dvou-faktorové ověřování. To oslabuje zabezpečení vašeho účtu, jste si jistý/á?"
+msgstr "Chystáte se vypnout dvoufázové ověřování. To oslabí zabezpečení vašeho účtu, jste si tím jistí?"
#: templates/two_factor/profile/disable.html:12
msgid "Disable"
@@ -379,16 +380,16 @@ msgstr "Vypnout"
#: templates/two_factor/profile/profile.html:6
msgid "Account Security"
-msgstr "Bezpečnost Účtu"
+msgstr "Bezpečnost účtu"
#: templates/two_factor/profile/profile.html:9
#, python-format
msgid "Primary method: %(primary)s"
-msgstr "Provřadná metoda: %(primary)s"
+msgstr "Primární metoda: %(primary)s"
#: templates/two_factor/profile/profile.html:12
msgid "Backup Phone Numbers"
-msgstr "Záložní Telefonní Čísla"
+msgstr "Záložní telefonní čísla"
#: templates/two_factor/profile/profile.html:13
msgid ""
@@ -398,7 +399,7 @@ msgstr "Pokud vaše primární metoda není k dispozici, jsme schopni zaslat zá
#: templates/two_factor/profile/profile.html:20
msgid "Are you sure?"
-msgstr "Jste si jistý/á?"
+msgstr "Jste si jistí?"
#: templates/two_factor/profile/profile.html:23
msgid "Unregister"
@@ -408,7 +409,7 @@ msgstr "Odregistrovat"
msgid ""
"If you don't have any device with you, you can access your account using "
"backup tokens."
-msgstr "Nemaáte-li žádné zařízení s vámi, můžete také použít záložní tokeny."
+msgstr "Nemáte-li u sebe žádné zařízení, můžete také použít záložní tokeny."
#: templates/two_factor/profile/profile.html:36
#, python-format
@@ -432,16 +433,16 @@ msgstr "Vypnout dvoufázové ověření"
msgid ""
"However we strongly discourage you to do so, you can also disable two-factor"
" authentication for your account."
-msgstr "Opravdu vám to nedoporučujeme dělat, můžete také vypnout dvoufázové ověřování pro váš účet."
+msgstr "Přestože vám to nedoporučujeme, můžete také vypnout dvoufázové ověřování pro váš účet."
#: templates/two_factor/twilio/sms_message.html:2
#, python-format
msgid "Your OTP token is %(token)s"
-msgstr "Váš OTP token je %(token)s"
+msgstr "Váš jednorázový token je %(token)s"
#: views/core.py:274
msgid "Your session has timed out. Please login again."
-msgstr "Vaše relace vypršela. Prosím opět se přihlašte."
+msgstr "Vaše relace vypršela. Opět se prosím přihlaste."
#: views/utils.py:153
msgid "ManagementForm data is missing or has been tampered with"
diff --git a/two_factor/plugins/yubikey/__init__.py b/two_factor/plugins/yubikey/__init__.py
index cdfd190ea..8b1378917 100644
--- a/two_factor/plugins/yubikey/__init__.py
+++ b/two_factor/plugins/yubikey/__init__.py
@@ -1,4 +1 @@
-import django
-if django.VERSION <= (3, 2):
- default_app_config = 'two_factor.plugins.yubikey.apps.TwoFactorYubikeyConfig'
diff --git a/two_factor/views/core.py b/two_factor/views/core.py
index 0afb1a68b..d37c95329 100644
--- a/two_factor/views/core.py
+++ b/two_factor/views/core.py
@@ -13,6 +13,7 @@
from django.contrib.auth import REDIRECT_FIELD_NAME, login
from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import AuthenticationForm
+from django.contrib.auth.views import RedirectURLMixin
from django.contrib.sites.shortcuts import get_current_site
from django.core.signing import BadSignature
from django.forms import Form, ValidationError
@@ -50,12 +51,6 @@
get_remember_device_cookie, validate_remember_device_cookie,
)
-try:
- from django.contrib.auth.views import RedirectURLMixin
-except ImportError: # django<4.1
- from django.contrib.auth.views import (
- SuccessURLAllowedHostsMixin as RedirectURLMixin,
- )
logger = logging.getLogger(__name__)
REMEMBER_COOKIE_PREFIX = getattr(settings, 'TWO_FACTOR_REMEMBER_COOKIE_PREFIX', 'remember-cookie_')
diff --git a/two_factor/views/utils.py b/two_factor/views/utils.py
index f6fc8072e..456e6cbd9 100644
--- a/two_factor/views/utils.py
+++ b/two_factor/views/utils.py
@@ -5,7 +5,9 @@
from django.conf import settings
from django.contrib.auth import load_backend
from django.core.exceptions import SuspiciousOperation
-from django.core.signing import BadSignature, SignatureExpired
+from django.core.signing import (
+ BadSignature, SignatureExpired, b62_decode, b62_encode,
+)
from django.utils.crypto import salted_hmac
from django.utils.decorators import method_decorator
from django.utils.encoding import force_bytes
@@ -14,14 +16,6 @@
from formtools.wizard.storage.session import SessionStorage
from formtools.wizard.views import SessionWizardView
-try:
- from django.core.signing import b62_decode, b62_encode
-except ImportError: # Django < 4.0
- # Deprecated in Django 4.0, removed in Django 5.0
- from django.utils import baseconv
- b62_decode = baseconv.base62.decode
- b62_encode = baseconv.base62.encode
-
logger = logging.getLogger(__name__)