openwisp-users 1.2.1__tar.gz → 1.3.0__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.
Files changed (150) hide show
  1. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/CHANGES.rst +98 -0
  2. {openwisp_users-1.2.1/openwisp_users.egg-info → openwisp_users-1.3.0}/PKG-INFO +10 -9
  3. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/README.rst +2 -2
  4. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/__init__.py +1 -1
  5. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/accounts/locale/de/LC_MESSAGES/django.po +56 -0
  6. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/accounts/locale/it/LC_MESSAGES/django.po +53 -0
  7. openwisp_users-1.3.0/openwisp_users/accounts/locale/ru/LC_MESSAGES/django.po +153 -0
  8. openwisp_users-1.3.0/openwisp_users/accounts/locale/sl/LC_MESSAGES/django.po +125 -0
  9. openwisp_users-1.3.0/openwisp_users/accounts/templates/account/email/account_expiration_reminder_message.html +14 -0
  10. openwisp_users-1.3.0/openwisp_users/accounts/templates/account/email/account_expiration_reminder_message.txt +10 -0
  11. openwisp_users-1.3.0/openwisp_users/accounts/templates/account/email/account_expired_message.html +12 -0
  12. openwisp_users-1.3.0/openwisp_users/accounts/templates/account/email/account_expired_message.txt +8 -0
  13. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/accounts/urls.py +8 -9
  14. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/admin.py +235 -33
  15. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/api/serializers.py +97 -4
  16. openwisp_users-1.3.0/openwisp_users/api/throttling.py +18 -0
  17. openwisp_users-1.3.0/openwisp_users/api/urls.py +75 -0
  18. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/api/views.py +90 -14
  19. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/apps.py +35 -0
  20. openwisp_users-1.3.0/openwisp_users/auth.py +135 -0
  21. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/backends.py +1 -1
  22. openwisp_users-1.3.0/openwisp_users/base/forms.py +102 -0
  23. openwisp_users-1.3.0/openwisp_users/base/models.py +573 -0
  24. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/locale/it/LC_MESSAGES/django.po +16 -4
  25. openwisp_users-1.3.0/openwisp_users/management/commands/export_users.py +197 -0
  26. openwisp_users-1.3.0/openwisp_users/middleware.py +129 -0
  27. openwisp_users-1.3.0/openwisp_users/migrations/0022_user_expiration_date.py +31 -0
  28. openwisp_users-1.3.0/openwisp_users/migrations/0023_add_auth_token_permissions_to_admins.py +18 -0
  29. openwisp_users-1.3.0/openwisp_users/migrations/0024_apikey.py +26 -0
  30. openwisp_users-1.3.0/openwisp_users/migrations/0025_alter_organizationuser_is_admin.py +20 -0
  31. openwisp_users-1.3.0/openwisp_users/migrations/0026_user_password_based_token.py +31 -0
  32. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/migrations/__init__.py +27 -0
  33. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/models.py +3 -0
  34. openwisp_users-1.3.0/openwisp_users/settings.py +97 -0
  35. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/static/openwisp-users/css/admin.css +5 -0
  36. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/tasks.py +14 -11
  37. openwisp_users-1.3.0/openwisp_users/templates/admin/action_confirmation.html +1 -0
  38. openwisp_users-1.3.0/openwisp_users/templates/admin/login.html +1 -0
  39. {openwisp_users-1.2.1/openwisp_users/templates/admin → openwisp_users-1.3.0/openwisp_users/templates/admin/openwisp_users}/login.html +1 -0
  40. openwisp_users-1.3.0/openwisp_users/templates/custom_password_reset_email.html +11 -0
  41. openwisp_users-1.3.0/openwisp_users/templates/custom_password_reset_email.txt +8 -0
  42. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/tests/test_accounts.py +88 -2
  43. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/tests/test_admin.py +475 -9
  44. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/tests/test_api/test_api.py +99 -0
  45. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/tests/test_api/test_authentication.py +21 -0
  46. openwisp_users-1.3.0/openwisp_users/tests/test_api/test_password_reset.py +309 -0
  47. openwisp_users-1.3.0/openwisp_users/tests/test_api/test_throttling.py +80 -0
  48. openwisp_users-1.3.0/openwisp_users/tests/test_api/test_urls.py +42 -0
  49. openwisp_users-1.3.0/openwisp_users/tests/test_api/test_views.py +124 -0
  50. openwisp_users-1.3.0/openwisp_users/tests/test_auth.py +203 -0
  51. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/tests/test_backends.py +3 -0
  52. openwisp_users-1.3.0/openwisp_users/tests/test_commands.py +368 -0
  53. openwisp_users-1.3.0/openwisp_users/tests/test_middlewares.py +203 -0
  54. openwisp_users-1.3.0/openwisp_users/tests/test_models.py +1197 -0
  55. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/utils.py +22 -4
  56. {openwisp_users-1.2.1 → openwisp_users-1.3.0/openwisp_users.egg-info}/PKG-INFO +10 -9
  57. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users.egg-info/SOURCES.txt +18 -0
  58. openwisp_users-1.3.0/openwisp_users.egg-info/requires.txt +9 -0
  59. openwisp_users-1.3.0/requirements.txt +9 -0
  60. openwisp_users-1.2.1/openwisp_users/accounts/locale/ru/LC_MESSAGES/django.po +0 -88
  61. openwisp_users-1.2.1/openwisp_users/accounts/locale/sl/LC_MESSAGES/django.po +0 -58
  62. openwisp_users-1.2.1/openwisp_users/api/throttling.py +0 -7
  63. openwisp_users-1.2.1/openwisp_users/api/urls.py +0 -54
  64. openwisp_users-1.2.1/openwisp_users/base/models.py +0 -300
  65. openwisp_users-1.2.1/openwisp_users/management/commands/export_users.py +0 -79
  66. openwisp_users-1.2.1/openwisp_users/middleware.py +0 -49
  67. openwisp_users-1.2.1/openwisp_users/settings.py +0 -60
  68. openwisp_users-1.2.1/openwisp_users/tests/test_api/test_throttling.py +0 -21
  69. openwisp_users-1.2.1/openwisp_users/tests/test_api/test_views.py +0 -26
  70. openwisp_users-1.2.1/openwisp_users/tests/test_commands.py +0 -106
  71. openwisp_users-1.2.1/openwisp_users/tests/test_middlewares.py +0 -49
  72. openwisp_users-1.2.1/openwisp_users/tests/test_models.py +0 -499
  73. openwisp_users-1.2.1/openwisp_users.egg-info/requires.txt +0 -8
  74. openwisp_users-1.2.1/requirements.txt +0 -8
  75. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/LICENSE +0 -0
  76. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/MANIFEST.in +0 -0
  77. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/accounts/__init__.py +0 -0
  78. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/accounts/adapter.py +0 -0
  79. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/accounts/locale/fur/LC_MESSAGES/django.po +0 -0
  80. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/accounts/static/openwisp-users/accounts/css/change-password.css +0 -0
  81. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/accounts/static/openwisp-users/accounts/css/non-admin.css +0 -0
  82. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/accounts/templates/account/email/base_message.txt +0 -0
  83. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/accounts/templates/account/email/email_confirmation_message.html +0 -0
  84. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/accounts/templates/account/email/email_confirmation_message.txt +0 -0
  85. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/accounts/templates/account/email/email_confirmation_signup_message.html +0 -0
  86. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/accounts/templates/account/email/password_expiration_message.html +0 -0
  87. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/accounts/templates/account/email/password_expiration_message.txt +0 -0
  88. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/accounts/templates/account/email_confirm.html +0 -0
  89. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/accounts/templates/account/email_verification_success.html +0 -0
  90. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/accounts/templates/account/login.html +0 -0
  91. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/accounts/templates/account/logout_success.html +0 -0
  92. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/accounts/templates/account/password_change.html +0 -0
  93. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/accounts/templates/account/password_change_success.html +0 -0
  94. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/accounts/templates/account/password_not_required.html +0 -0
  95. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/accounts/templates/allauth/layouts/base.html +0 -0
  96. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/accounts/views.py +0 -0
  97. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/api/__init__.py +0 -0
  98. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/api/authentication.py +0 -0
  99. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/api/filters.py +0 -0
  100. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/api/mixins.py +0 -0
  101. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/api/permissions.py +0 -0
  102. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/api/swagger.py +0 -0
  103. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/base/__init__.py +0 -0
  104. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/locale/de/LC_MESSAGES/django.po +0 -0
  105. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/locale/fur/LC_MESSAGES/django.po +0 -0
  106. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/locale/ru/LC_MESSAGES/django.po +0 -0
  107. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/locale/sl/LC_MESSAGES/django.po +0 -0
  108. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/management/__init__.py +0 -0
  109. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/management/commands/__init__.py +0 -0
  110. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/migrations/0001_initial.py +0 -0
  111. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/migrations/0002_auto_20180508_2017.py +0 -0
  112. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/migrations/0003_default_organization.py +0 -0
  113. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/migrations/0004_default_groups.py +0 -0
  114. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/migrations/0005_user_phone_number.py +0 -0
  115. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/migrations/0006_id_email_index_together.py +0 -0
  116. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/migrations/0007_unique_email.py +0 -0
  117. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/migrations/0008_update_admins_permissions.py +0 -0
  118. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/migrations/0009_create_organization_owners.py +0 -0
  119. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/migrations/0010_allow_admins_change_organization.py +0 -0
  120. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/migrations/0011_user_first_name_150_max_length.py +0 -0
  121. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/migrations/0012_user_location_max_length_256.py +0 -0
  122. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/migrations/0013_user_birth_date.py +0 -0
  123. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/migrations/0014_user_notes.py +0 -0
  124. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/migrations/0015_alter_organization_users_alter_organizationuser_user.py +0 -0
  125. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/migrations/0016_organizationinvitation.py +0 -0
  126. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/migrations/0017_user_language.py +0 -0
  127. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/migrations/0018_allow_operator_view_organisation.py +0 -0
  128. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/migrations/0019_user_password_updated.py +0 -0
  129. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/migrations/0020_populate_password_updated_field.py +0 -0
  130. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/migrations/0021_rename_user_id_email_openwisp_us_id_06c07a_idx.py +0 -0
  131. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/mixins.py +0 -0
  132. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/multitenancy.py +0 -0
  133. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/password_validation.py +0 -0
  134. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/static/openwisp-users/css/change-password.css +0 -0
  135. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/static/openwisp-users/js/addform.js +0 -0
  136. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/static/openwisp-users/js/org-autocomplete.js +0 -0
  137. {openwisp_users-1.2.1/openwisp_users/templates/admin → openwisp_users-1.3.0/openwisp_users/templates/admin/openwisp_users}/action_confirmation.html +0 -0
  138. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/templates/admin/openwisp_users/user/change_form.html +0 -0
  139. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/tests/__init__.py +0 -0
  140. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/tests/test_adapter.py +0 -0
  141. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/tests/test_api/__init__.py +0 -0
  142. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/tests/utils.py +0 -0
  143. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/views.py +0 -0
  144. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users/widgets.py +0 -0
  145. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users.egg-info/dependency_links.txt +0 -0
  146. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users.egg-info/not-zip-safe +0 -0
  147. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/openwisp_users.egg-info/top_level.txt +0 -0
  148. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/pyproject.toml +0 -0
  149. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/setup.cfg +0 -0
  150. {openwisp_users-1.2.1 → openwisp_users-1.3.0}/setup.py +0 -0
@@ -1,6 +1,104 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ Version 1.3.0 [2026-09-02]
5
+ --------------------------
6
+
7
+ Features
8
+ ~~~~~~~~
9
+
10
+ - Added `user account expiration
11
+ <https://github.com/openwisp/openwisp-users/issues/499>`_ with automatic
12
+ deactivation and reminder emails.
13
+ - Allowed `customizing the password reset form
14
+ <https://github.com/openwisp/openwisp-users/issues/511>`_.
15
+ - Added `password self-service REST API endpoints
16
+ <https://github.com/openwisp/openwisp-users/issues/511>`_.
17
+ - Added `API key management to the user admin
18
+ <https://github.com/openwisp/openwisp-users/issues/240>`_. Authorized
19
+ administrators can create and delete API keys for users, while users can
20
+ always delete their own API keys. API keys belonging to other users are
21
+ masked.
22
+ - Added `extensible field serialization to the export_users command
23
+ <https://github.com/openwisp/openwisp-users/issues/497>`_, including
24
+ custom serializers, related object extraction and relation traversal.
25
+
26
+ This changes the structure of the generated CSV output and may require
27
+ updates to scripts which parse it.
28
+
29
+ - Added ``OPENWISP_USERS_SOCIALACCOUNT_ADMIN_NEEDED`` to `support custom
30
+ allauth OAuth/SAML providers
31
+ <https://github.com/openwisp/openwisp-users/issues/501>`_ when automatic
32
+ detection is not sufficient.
33
+
34
+ Changes
35
+ ~~~~~~~
36
+
37
+ Other changes
38
+ +++++++++++++
39
+
40
+ - Improved `password expiration handling with SSO and REST API
41
+ authentication
42
+ <https://github.com/openwisp/openwisp-users/issues/511>`_. Users
43
+ authenticated through passwordless methods such as SAML, OAuth and
44
+ sesame magic links are no longer prompted to update an expired local
45
+ password. REST API clients now receive a JSON ``403`` response instead
46
+ of an HTML redirect.
47
+ - Renamed the `"Is admin" label to "Organization manager"
48
+ <https://github.com/openwisp/openwisp-users/issues/540>`_.
49
+ - Improved `admin theme consistency
50
+ <https://github.com/openwisp/openwisp-users/issues/473>`_ by using
51
+ shared theme colors provided by OpenWISP Utils.
52
+
53
+ Dependencies
54
+ ++++++++++++
55
+
56
+ - Added `dj-rest-auth>=7.2.0,<7.3
57
+ <https://github.com/iMerica/dj-rest-auth/releases/tag/7.2.0>`_.
58
+ - Bumped ``django-organizations`` from ``>=2.5.0,<2.6.0`` to
59
+ `>=2.7.0,<2.8.0
60
+ <https://github.com/bennylope/django-organizations/blob/master/HISTORY.rst>`_.
61
+ - Bumped ``django-extensions`` from ``>=3.2,<4.2`` to `>=4.1,<4.2
62
+ <https://github.com/django-extensions/django-extensions/releases/tag/4.1>`_.
63
+ - Bumped ``django-allauth[socialaccount]`` from ``>=65.12.0,<65.14.0`` to
64
+ `>=65.19.1,<65.20.0
65
+ <https://docs.allauth.org/en/latest/release-notes/recent.html>`_.
66
+ - Bumped ``django-phonenumber-field`` from ``>=8.1.0,<8.2.0`` to
67
+ `>=8.5.0,<8.6.0
68
+ <https://github.com/django-phonenumber-field/django-phonenumber-field/releases/tag/8.5.0>`_.
69
+ - Bumped ``phonenumbers`` from ``>=9.0.10,<9.1.0`` to `>=9.0.38,<9.1.0
70
+ <https://github.com/daviddrysdale/python-phonenumbers/releases/tag/v9.0.38>`_.
71
+ - Bumped ``django-reversion`` from ``~=6.0.0`` to `~=6.3.0
72
+ <https://django-reversion.readthedocs.io/en/latest/changelog.html>`_.
73
+ - Bumped ``django-redis`` from ``~=6.0.0`` to `~=7.0.0
74
+ <https://github.com/jazzband/django-redis/releases/tag/7.0.0>`_.
75
+ - Bumped ``openwisp-utils[rest,celery]`` from ``~=1.2.0`` to `~=1.3.0
76
+ <https://github.com/openwisp/openwisp-utils/releases/tag/1.3.0>`_.
77
+ - Dropped support for Django ``4.2.0``.
78
+ - Dropped support for Python ``3.9``.
79
+
80
+ Bugfixes
81
+ ~~~~~~~~
82
+
83
+ - Fixed `custom REST API view overrides
84
+ <https://github.com/openwisp/openwisp-users/issues/553>`_ so
85
+ ``get_api_urls()`` correctly uses callbacks from custom view modules
86
+ while falling back to the default views when an override is not
87
+ provided.
88
+ - Fixed infinite recursion when custom API views subclass
89
+ ``ChangePasswordView``.
90
+ - Fixed `template loader ordering and template extensibility
91
+ <https://github.com/openwisp/openwisp-users/issues/489>`_.
92
+
93
+ Version 1.2.2 [2026-04-25]
94
+ --------------------------
95
+
96
+ Bugfixes
97
+ ~~~~~~~~
98
+
99
+ - Added SocialAccount inline to UserAdmin when needed `#501
100
+ <https://github.com/openwisp/openwisp-users/issues/501>`_
101
+
4
102
  Version 1.2.1 [2026-04-22]
5
103
  --------------------------
6
104
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openwisp-users
3
- Version: 1.2.1
3
+ Version: 1.3.0
4
4
  Summary: Provides basic multi-tenancy features for OpenWISP (using the Django web-framework)
5
5
  Home-page: http://openwisp.org
6
6
  Download-URL: https://github.com/openwisp/openwisp-users/releases
@@ -18,12 +18,13 @@ Classifier: Operating System :: OS Independent
18
18
  Classifier: Framework :: Django
19
19
  Classifier: Programming Language :: Python :: 3
20
20
  License-File: LICENSE
21
- Requires-Dist: django-organizations<2.6.0,>=2.5.0
22
- Requires-Dist: django-extensions<4.2,>=3.2
23
- Requires-Dist: django-allauth[socialaccount]<65.14.0,>=65.12.0
24
- Requires-Dist: django-phonenumber-field<8.2.0,>=8.1.0
25
- Requires-Dist: phonenumbers<9.1.0,>=9.0.10
26
- Requires-Dist: openwisp-utils[celery,rest]~=1.2.0
21
+ Requires-Dist: django-organizations<2.8.0,>=2.7.0
22
+ Requires-Dist: django-extensions<4.2,>=4.1
23
+ Requires-Dist: django-allauth[socialaccount]<65.20.0,>=65.19.1
24
+ Requires-Dist: dj-rest-auth<7.3,>=7.2.0
25
+ Requires-Dist: django-phonenumber-field<8.6.0,>=8.5.0
26
+ Requires-Dist: phonenumbers<9.1.0,>=9.0.38
27
+ Requires-Dist: openwisp-utils[celery,rest]~=1.3.0
27
28
  Requires-Dist: packaging
28
29
  Requires-Dist: django-sesame<3.3.0,>=3.2.3
29
30
  Dynamic: author
@@ -42,8 +43,8 @@ Dynamic: summary
42
43
  openwisp-users
43
44
  ==============
44
45
 
45
- .. image:: https://github.com/openwisp/openwisp-users/workflows/OpenWISP%20Users%20CI%20Build/badge.svg?branch=master
46
- :target: https://github.com/openwisp/openwisp-users/actions?query=workflow%3A%22OpenWISP+Users+CI+Build%22
46
+ .. image:: https://github.com/openwisp/openwisp-users/actions/workflows/ci.yml/badge.svg
47
+ :target: https://github.com/openwisp/openwisp-users/actions/workflows/ci.yml
47
48
 
48
49
  .. image:: https://coveralls.io/repos/openwisp/openwisp-users/badge.svg
49
50
  :target: https://coveralls.io/r/openwisp/openwisp-users
@@ -1,8 +1,8 @@
1
1
  openwisp-users
2
2
  ==============
3
3
 
4
- .. image:: https://github.com/openwisp/openwisp-users/workflows/OpenWISP%20Users%20CI%20Build/badge.svg?branch=master
5
- :target: https://github.com/openwisp/openwisp-users/actions?query=workflow%3A%22OpenWISP+Users+CI+Build%22
4
+ .. image:: https://github.com/openwisp/openwisp-users/actions/workflows/ci.yml/badge.svg
5
+ :target: https://github.com/openwisp/openwisp-users/actions/workflows/ci.yml
6
6
 
7
7
  .. image:: https://coveralls.io/repos/openwisp/openwisp-users/badge.svg
8
8
  :target: https://coveralls.io/r/openwisp/openwisp-users
@@ -1,4 +1,4 @@
1
- VERSION = (1, 2, 1, "final")
1
+ VERSION = (1, 3, 0, "final")
2
2
  __version__ = VERSION # alias
3
3
 
4
4
 
@@ -24,6 +24,62 @@ msgstr ""
24
24
  "Sie bekommen diese E-Mail, weil diese E-Mail-Adresse von einem Benutzer "
25
25
  "<b>%(user_display)s</b> auf <b>%(site_name)s</b> registriert wurde.\n"
26
26
 
27
+ #: accounts/templates/account/email/account_expiration_reminder_message.html:5
28
+ #, python-format
29
+ msgid ""
30
+ "We inform you that your account <strong>%(username)s</strong> will expire in "
31
+ "%(days)s day on %(expiry_date)s."
32
+ msgid_plural ""
33
+ "We inform you that your account <strong>%(username)s</strong> will expire in "
34
+ "%(days)s days on %(expiry_date)s."
35
+ msgstr[0] ""
36
+ "Wir informieren Sie, dass Ihr Konto <strong>%(username)s</strong> in "
37
+ "%(days)s Tag am %(expiry_date)s abläuft."
38
+ msgstr[1] ""
39
+ "Wir informieren Sie, dass Ihr Konto <strong>%(username)s</strong> in "
40
+ "%(days)s Tagen am %(expiry_date)s abläuft."
41
+
42
+ #: accounts/templates/account/email/account_expiration_reminder_message.html:13
43
+ #: accounts/templates/account/email/account_expiration_reminder_message.txt:10
44
+ msgid "Please contact your administrator if you need to extend your access."
45
+ msgstr ""
46
+ "Bitte kontaktieren Sie Ihren Administrator, wenn Sie Ihren Zugang verlängern "
47
+ "möchten."
48
+
49
+ #: accounts/templates/account/email/account_expiration_reminder_message.txt:4
50
+ #, python-format
51
+ msgid ""
52
+ "We inform you that your account %(username)s will expire in %(days)s day on "
53
+ "%(expiry_date)s."
54
+ msgid_plural ""
55
+ "We inform you that your account %(username)s will expire in %(days)s days on "
56
+ "%(expiry_date)s."
57
+ msgstr[0] ""
58
+ "Wir informieren Sie, dass Ihr Konto %(username)s in %(days)s Tag am "
59
+ "%(expiry_date)s abläuft."
60
+ msgstr[1] ""
61
+ "Wir informieren Sie, dass Ihr Konto %(username)s in %(days)s Tagen am "
62
+ "%(expiry_date)s abläuft."
63
+
64
+ #: accounts/templates/account/email/account_expired_message.html:5
65
+ #: accounts/templates/account/email/account_expired_message.txt:4
66
+ #, python-format
67
+ msgid ""
68
+ "We inform you that your account %(username)s has been deactivated because it "
69
+ "expired on %(expiry_date)s."
70
+ msgstr ""
71
+ "Wir informieren Sie, dass Ihr Konto %(username)s deaktiviert wurde, weil es "
72
+ "am %(expiry_date)s abgelaufen ist."
73
+
74
+ #: accounts/templates/account/email/account_expired_message.html:11
75
+ #: accounts/templates/account/email/account_expired_message.txt:8
76
+ msgid ""
77
+ "Please contact your administrator if you need to reactivate your account."
78
+ msgstr ""
79
+ "Bitte kontaktieren Sie Ihren Administrator, wenn Sie Ihr Konto "
80
+ "reaktivieren möchten."
81
+
82
+
27
83
  #: accounts/templates/account/email/email_confirmation_message.html:9
28
84
  msgid "To confirm this is correct, please click on the button below."
29
85
  msgstr "Um zu bestätigen, dass dies korrekt ist, klicken Sie bitte auf die Schaltfläche unten."
@@ -22,6 +22,59 @@ msgstr "Conferma l'indirizzo E-mail"
22
22
  msgid "Confirm"
23
23
  msgstr "Confermo"
24
24
 
25
+ #: accounts/templates/account/email/account_expiration_reminder_message.html:5
26
+ #, python-format
27
+ msgid ""
28
+ "We inform you that your account <strong>%(username)s</strong> will expire in "
29
+ "%(days)s day on %(expiry_date)s."
30
+ msgid_plural ""
31
+ "We inform you that your account <strong>%(username)s</strong> will expire in "
32
+ "%(days)s days on %(expiry_date)s."
33
+ msgstr[0] ""
34
+ "Ti informiamo che il tuo account <strong>%(username)s</strong> scadrà tra "
35
+ "%(days)s giorno, precisamente il %(expiry_date)s."
36
+ msgstr[1] ""
37
+ "Ti informiamo che il tuo account <strong>%(username)s</strong> scadrà tra "
38
+ "%(days)s giorni, precisamente il %(expiry_date)s."
39
+
40
+ #: accounts/templates/account/email/account_expiration_reminder_message.html:13
41
+ #: accounts/templates/account/email/account_expiration_reminder_message.txt:10
42
+ msgid "Please contact your administrator if you need to extend your access."
43
+ msgstr ""
44
+ "Contatta il tuo amministratore se hai bisogno di estendere il tuo accesso."
45
+
46
+ #: accounts/templates/account/email/account_expiration_reminder_message.txt:4
47
+ #, python-format
48
+ msgid ""
49
+ "We inform you that your account %(username)s will expire in %(days)s day on "
50
+ "%(expiry_date)s."
51
+ msgid_plural ""
52
+ "We inform you that your account %(username)s will expire in %(days)s days on "
53
+ "%(expiry_date)s."
54
+ msgstr[0] ""
55
+ "Ti informiamo che il tuo account %(username)s scadrà tra %(days)s giorno, "
56
+ "precisamente il %(expiry_date)s."
57
+ msgstr[1] ""
58
+ "Ti informiamo che il tuo account %(username)s scadrà tra %(days)s giorni, "
59
+ "precisamente il %(expiry_date)s."
60
+
61
+ #: accounts/templates/account/email/account_expired_message.html:5
62
+ #: accounts/templates/account/email/account_expired_message.txt:4
63
+ #, python-format
64
+ msgid ""
65
+ "We inform you that your account %(username)s has been deactivated because it "
66
+ "expired on %(expiry_date)s."
67
+ msgstr ""
68
+ "Ti informiamo che il tuo account %(username)s è stato disattivato perché è "
69
+ "scaduto il %(expiry_date)s."
70
+
71
+ #: accounts/templates/account/email/account_expired_message.html:11
72
+ #: accounts/templates/account/email/account_expired_message.txt:8
73
+ msgid ""
74
+ "Please contact your administrator if you need to reactivate your account."
75
+ msgstr ""
76
+ "Contatta il tuo amministratore se hai bisogno di riattivare il tuo account."
77
+
25
78
  #: accounts/templates/account/email/base_message.txt:1
26
79
  #, python-format
27
80
  msgid "Welcome to %(site_name)s!"
@@ -0,0 +1,153 @@
1
+ # OpenWISP RADIUS
2
+ # Copyright (C) 2021
3
+ # This file is distributed under the same license as the PACKAGE package.
4
+ # Federico Capoano support@openwisp.io, 2021.
5
+ #
6
+ msgid ""
7
+ msgstr ""
8
+ "POT-Creation-Date: 2021-09-01 18:32-0500\n"
9
+ "Language: ru\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 "
14
+ "&& n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
15
+
16
+ #: templates/account/email/base_message.txt:1
17
+ #, python-format
18
+ msgid "Welcome to %(site_name)s!"
19
+ msgstr "Добро пожаловат на %(site_name)s!"
20
+
21
+ #: templates/account/email/base_message.txt:5
22
+ #, python-format
23
+ msgid ""
24
+ "Thank you for using %(site_name)s!\n"
25
+ "%(site_domain)s"
26
+ msgstr ""
27
+ "Спасибо за использование %(site_name)s!\n"
28
+ "%(site_domain)s"
29
+
30
+ #: accounts/templates/account/email/account_expiration_reminder_message.html:5
31
+ #, python-format
32
+ msgid ""
33
+ "We inform you that your account <strong>%(username)s</strong> will expire in "
34
+ "%(days)s day on %(expiry_date)s."
35
+ msgid_plural ""
36
+ "We inform you that your account <strong>%(username)s</strong> will expire in "
37
+ "%(days)s days on %(expiry_date)s."
38
+ msgstr[0] ""
39
+ "Сообщаем вам, что срок действия вашей учетной записи "
40
+ "<strong>%(username)s</strong> истечет через %(days)s день, а именно "
41
+ "%(expiry_date)s."
42
+ msgstr[1] ""
43
+ "Сообщаем вам, что срок действия вашей учетной записи "
44
+ "<strong>%(username)s</strong> истечет через %(days)s дня, а именно "
45
+ "%(expiry_date)s."
46
+ msgstr[2] ""
47
+ "Сообщаем вам, что срок действия вашей учетной записи "
48
+ "<strong>%(username)s</strong> истечет через %(days)s дней, а именно "
49
+ "%(expiry_date)s."
50
+
51
+ #: accounts/templates/account/email/account_expiration_reminder_message.html:13
52
+ #: accounts/templates/account/email/account_expiration_reminder_message.txt:10
53
+ msgid "Please contact your administrator if you need to extend your access."
54
+ msgstr ""
55
+ "Пожалуйста, свяжитесь с вашим администратором, если вам нужно продлить "
56
+ "доступ."
57
+
58
+ #: accounts/templates/account/email/account_expiration_reminder_message.txt:4
59
+ #, python-format
60
+ msgid ""
61
+ "We inform you that your account %(username)s will expire in %(days)s day on "
62
+ "%(expiry_date)s."
63
+ msgid_plural ""
64
+ "We inform you that your account %(username)s will expire in %(days)s days on "
65
+ "%(expiry_date)s."
66
+ msgstr[0] ""
67
+ "Сообщаем вам, что срок действия вашей учетной записи %(username)s истечет "
68
+ "через %(days)s день, а именно %(expiry_date)s."
69
+ msgstr[1] ""
70
+ "Сообщаем вам, что срок действия вашей учетной записи %(username)s истечет "
71
+ "через %(days)s дня, а именно %(expiry_date)s."
72
+ msgstr[2] ""
73
+ "Сообщаем вам, что срок действия вашей учетной записи %(username)s истечет "
74
+ "через %(days)s дней, а именно %(expiry_date)s."
75
+
76
+ #: accounts/templates/account/email/account_expired_message.html:5
77
+ #: accounts/templates/account/email/account_expired_message.txt:4
78
+ #, python-format
79
+ msgid ""
80
+ "We inform you that your account %(username)s has been deactivated because it "
81
+ "expired on %(expiry_date)s."
82
+ msgstr ""
83
+ "Сообщаем вам, что ваша учетная запись %(username)s была деактивирована, "
84
+ "поскольку срок ее действия истек %(expiry_date)s."
85
+
86
+ #: accounts/templates/account/email/account_expired_message.html:11
87
+ #: accounts/templates/account/email/account_expired_message.txt:8
88
+ msgid ""
89
+ "Please contact your administrator if you need to reactivate your account."
90
+ msgstr ""
91
+ "Пожалуйста, свяжитесь с вашим администратором, если вам нужно "
92
+ "повторно активировать вашу учетную запись."
93
+
94
+ #: accounts/templates/account/email/email_confirmation_message.html:5
95
+ #, python-format
96
+ msgid ""
97
+ "\n"
98
+ "You're receiving this e-mail because user <b>%(user_display)s</b> registered "
99
+ "this e-mail address to create an account on <b>%(site_name)s</b>.\n"
100
+ msgstr ""
101
+ "\n"
102
+ "Вы получаете это письмо, потому что пользователь <b>%(user_display)s</b> зарегистрировал это "
103
+ "емейл на <b>%(site_name)s</b>.\n"
104
+
105
+ #: accounts/templates/account/email/email_confirmation_message.html:9
106
+ msgid "To confirm this is correct, please click on the button below."
107
+ msgstr "Чтобы убедиться, что это правильно, нажмите кнопку ниже."
108
+
109
+ #: templates/account/email_confirm.html:6 templates/account/email_confirm.html:9
110
+ msgid "Confirm E-mail Address"
111
+ msgstr "Подтверждать емейл адрес"
112
+
113
+ #: templates/account/email_confirm.html:15
114
+ #, python-format
115
+ msgid ""
116
+ "Please confirm that <a href=\"mailto:%(email)s\">%(email)s</a> is an e-mail address for "
117
+ "user %(user_display)s."
118
+ msgstr ""
119
+ "Подтвердите, что это <a href=\"mailto:%(email)s\">%(email)s</a> адрес электронной почты "
120
+ "пользователя %(user_display)s."
121
+
122
+ #: templates/account/email_verification_success.html:18
123
+ msgid "Your email has been verified successfully."
124
+ msgstr "Емейл адрес успешно подтверждён"
125
+
126
+ #: templates/account/email_verification_success.html:19
127
+ msgid "This web page can be closed."
128
+ msgstr "Вы можете закрывать страницу"
129
+
130
+ #: templates/account/email_confirm.html:20
131
+ msgid "Confirm"
132
+ msgstr "Подтверждать"
133
+
134
+ #: accounts/templates/account/logout_success.html:18
135
+ msgid "Logout successful."
136
+ msgstr "Выход прошел успешно."
137
+
138
+ #: accounts/templates/account/email/password_expiration_message.html:3
139
+ #: accounts/templates/account/email/password_expiration_message.txt:3
140
+ #, python-format
141
+ msgid ""
142
+ "We inform you that the password for your account %(username)s will expire in "
143
+ "7 days, precisely on %(expiry_date)s."
144
+ msgstr ""
145
+ "Мы информируем вас о том, что пароль для вашей учетной записи %(username)s "
146
+ "истекает через 7 дней, точно %(expiry_date)s."
147
+
148
+ #: accounts/templates/account/email/password_expiration_message.html:5
149
+ #: accounts/templates/account/email/password_expiration_message.txt:5
150
+ msgid ""
151
+ "Kindly proceed with updating your password by clicking on the button below."
152
+ msgstr ""
153
+ "Просим вас обновить ваш пароль, нажав на кнопку ниже."
@@ -0,0 +1,125 @@
1
+ # OpenWISP Users
2
+ # Copyright (C) 2021
3
+ # This file is distributed under the same license as the PACKAGE package.
4
+ # Federico Capoano support@openwisp.io, 2021.
5
+ #
6
+ msgid ""
7
+ msgstr ""
8
+ "Report-Msgid-Bugs-To: \n"
9
+ "POT-Creation-Date: 2021-11-11 21:36-0500\n"
10
+ "Language: sl\n"
11
+ "MIME-Version: 1.0\n"
12
+ "Content-Type: text/plain; charset=UTF-8\n"
13
+ "Content-Transfer-Encoding: 8bit\n"
14
+ "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : "
15
+ "n%100==3 || n%100==4 ? 2 : 3);\n"
16
+
17
+ #: accounts/templates/account/email/email_confirmation_message.html:5
18
+ #, python-format
19
+ msgid ""
20
+ "\n"
21
+ "You're receiving this e-mail because user <b>%(user_display)s</b> registered "
22
+ "this e-mail address to create an account on <b>%(site_name)s</b>.\n"
23
+ msgstr ""
24
+ "\n"
25
+ "To e-pošto ste prejeli, ker je registriran uporabnik <b>%(user_display)s</b>"
26
+ "ta e-poštni naslov za ustvarjanje računa na <b>%(site_name)s</b>.\n"
27
+
28
+ #: accounts/templates/account/email/account_expiration_reminder_message.html:5
29
+ #, python-format
30
+ msgid ""
31
+ "We inform you that your account <strong>%(username)s</strong> will expire in "
32
+ "%(days)s day on %(expiry_date)s."
33
+ msgid_plural ""
34
+ "We inform you that your account <strong>%(username)s</strong> will expire in "
35
+ "%(days)s days on %(expiry_date)s."
36
+ msgstr[0] ""
37
+ "Obveščamo vas, da bo vaš račun <strong>%(username)s</strong> potekel čez "
38
+ "%(days)s dan, in sicer %(expiry_date)s."
39
+ msgstr[1] ""
40
+ "Obveščamo vas, da bo vaš račun <strong>%(username)s</strong> potekel čez "
41
+ "%(days)s dni, in sicer %(expiry_date)s."
42
+ msgstr[2] ""
43
+ "Obveščamo vas, da bo vaš račun <strong>%(username)s</strong> potekel čez "
44
+ "%(days)s dni, in sicer %(expiry_date)s."
45
+ msgstr[3] ""
46
+ "Obveščamo vas, da bo vaš račun <strong>%(username)s</strong> potekel čez "
47
+ "%(days)s dni, in sicer %(expiry_date)s."
48
+
49
+ #: accounts/templates/account/email/account_expiration_reminder_message.html:13
50
+ #: accounts/templates/account/email/account_expiration_reminder_message.txt:10
51
+ msgid "Please contact your administrator if you need to extend your access."
52
+ msgstr ""
53
+ "Če želite podaljšati svoj dostop, se obrnite na svojega administratorja."
54
+
55
+ #: accounts/templates/account/email/account_expiration_reminder_message.txt:4
56
+ #, python-format
57
+ msgid ""
58
+ "We inform you that your account %(username)s will expire in %(days)s day on "
59
+ "%(expiry_date)s."
60
+ msgid_plural ""
61
+ "We inform you that your account %(username)s will expire in %(days)s days on "
62
+ "%(expiry_date)s."
63
+ msgstr[0] ""
64
+ "Obveščamo vas, da bo vaš račun %(username)s potekel čez %(days)s dan, in "
65
+ "sicer %(expiry_date)s."
66
+ msgstr[1] ""
67
+ "Obveščamo vas, da bo vaš račun %(username)s potekel čez %(days)s dni, in "
68
+ "sicer %(expiry_date)s."
69
+ msgstr[2] ""
70
+ "Obveščamo vas, da bo vaš račun %(username)s potekel čez %(days)s dni, in "
71
+ "sicer %(expiry_date)s."
72
+ msgstr[3] ""
73
+ "Obveščamo vas, da bo vaš račun %(username)s potekel čez %(days)s dni, in "
74
+ "sicer %(expiry_date)s."
75
+
76
+ #: accounts/templates/account/email/account_expired_message.html:5
77
+ #: accounts/templates/account/email/account_expired_message.txt:4
78
+ #, python-format
79
+ msgid ""
80
+ "We inform you that your account %(username)s has been deactivated because it "
81
+ "expired on %(expiry_date)s."
82
+ msgstr ""
83
+ "Obveščamo vas, da je bil vaš račun %(username)s deaktiviran, ker je potekel "
84
+ "dne %(expiry_date)s."
85
+
86
+ #: accounts/templates/account/email/account_expired_message.html:11
87
+ #: accounts/templates/account/email/account_expired_message.txt:8
88
+ msgid ""
89
+ "Please contact your administrator if you need to reactivate your account."
90
+ msgstr ""
91
+ "Če želite ponovno aktivirati svoj račun, se obrnite na svojega "
92
+ "administratorja."
93
+
94
+ #: accounts/templates/account/email/email_confirmation_message.html:9
95
+ msgid "To confirm this is correct, please click on the button below."
96
+ msgstr "Če želite potrditi, da je to pravilno, kliknite spodnji gumb."
97
+
98
+ #: accounts/templates/account/email_verification_success.html:18
99
+ msgid "Your email has been verified successfully."
100
+ msgstr "Preverjanje naslova e-pošte je bilo uspešno."
101
+
102
+ #: accounts/templates/account/email_verification_success.html:19
103
+ #: accounts/templates/account/logout_success.html:19
104
+ msgid "This web page can be closed."
105
+ msgstr "Lahko zaprete stran."
106
+
107
+ #: accounts/templates/account/logout_success.html:18
108
+ msgid "Logout successful."
109
+ msgstr "Odjava uspešna."
110
+
111
+ #: accounts/templates/account/email/password_expiration_message.html:3
112
+ #: accounts/templates/account/email/password_expiration_message.txt:3
113
+ #, python-format
114
+ msgid ""
115
+ "We inform you that the password for your account %(username)s will expire in "
116
+ "7 days, precisely on %(expiry_date)s."
117
+ msgstr ""
118
+ "Obveščamo vas, da bo geslo za vaš račun %(username)s poteklo v 7 dneh, natančneje dne %(expiry_date)s."
119
+
120
+ #: accounts/templates/account/email/password_expiration_message.html:5
121
+ #: accounts/templates/account/email/password_expiration_message.txt:5
122
+ msgid ""
123
+ "Kindly proceed with updating your password by clicking on the button below."
124
+ msgstr ""
125
+ "Prosimo, da nadaljujete z posodabljanjem svojega gesla tako, da kliknete na spodnji gumb."
@@ -0,0 +1,14 @@
1
+ {% load i18n %}
2
+ {% load l10n %}
3
+
4
+ <p>
5
+ {% blocktrans trimmed count days=days_remaining with username=username expiry_date=expiration_date|localize %}
6
+ We inform you that your account <strong>{{ username }}</strong> will expire in {{ days }} day on {{ expiry_date }}.
7
+ {% plural %}
8
+ We inform you that your account <strong>{{ username }}</strong> will expire in {{ days }} days on {{ expiry_date }}.
9
+ {% endblocktrans %}
10
+ </p>
11
+
12
+ <p>
13
+ {% trans "Please contact your administrator if you need to extend your access." %}
14
+ </p>
@@ -0,0 +1,10 @@
1
+ {% load i18n %}
2
+ {% load l10n %}
3
+
4
+ {% blocktrans trimmed count days=days_remaining with username=username expiry_date=expiration_date|localize %}
5
+ We inform you that your account "{{ username }}" will expire in {{ days }} day on {{ expiry_date }}.
6
+ {% plural %}
7
+ We inform you that your account "{{ username }}" will expire in {{ days }} days on {{ expiry_date }}.
8
+ {% endblocktrans %}
9
+
10
+ {% trans "Please contact your administrator if you need to extend your access." %}
@@ -0,0 +1,12 @@
1
+ {% load i18n %}
2
+ {% load l10n %}
3
+
4
+ <p>
5
+ {% blocktrans trimmed with username=username expiry_date=expiration_date|localize %}
6
+ We inform you that your account <strong>{{ username }}</strong> has been deactivated because it expired on {{ expiry_date }}.
7
+ {% endblocktrans %}
8
+ </p>
9
+
10
+ <p>
11
+ {% trans "Please contact your administrator if you need to reactivate your account." %}
12
+ </p>
@@ -0,0 +1,8 @@
1
+ {% load i18n %}
2
+ {% load l10n %}
3
+
4
+ {% blocktrans trimmed with username=username expiry_date=expiration_date|localize %}
5
+ We inform you that your account "{{ username }}" has been deactivated because it expired on {{ expiry_date }}.
6
+ {% endblocktrans %}
7
+
8
+ {% trans "Please contact your administrator if you need to reactivate your account." %}
@@ -77,12 +77,11 @@ urlpatterns = [
77
77
 
78
78
  if app_settings.SOCIALACCOUNT_ENABLED:
79
79
  urlpatterns += [path("social/", include("allauth.socialaccount.urls"))]
80
-
81
- for provider in providers.registry.get_class_list():
82
- try:
83
- prov_mod = import_module(provider.get_package() + ".urls")
84
- except ImportError:
85
- continue
86
- prov_urlpatterns = getattr(prov_mod, "urlpatterns", None)
87
- if prov_urlpatterns:
88
- urlpatterns += prov_urlpatterns
80
+ for provider in providers.registry.get_class_list():
81
+ try:
82
+ prov_mod = import_module(provider.get_package() + ".urls")
83
+ except ImportError:
84
+ continue
85
+ prov_urlpatterns = getattr(prov_mod, "urlpatterns", None)
86
+ if prov_urlpatterns:
87
+ urlpatterns += prov_urlpatterns