Flask-Security-Invenio 3.3.2__tar.gz → 3.4.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.
- Flask-Security-Invenio-3.4.0/.git-blame-ignore-revs +1 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/CHANGES +18 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0/Flask_Security_Invenio.egg-info}/PKG-INFO +1 -1
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/Flask_Security_Invenio.egg-info/SOURCES.txt +1 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/Flask_Security_Invenio.egg-info/requires.txt +5 -4
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/MANIFEST.in +1 -0
- {Flask-Security-Invenio-3.3.2/Flask_Security_Invenio.egg-info → Flask-Security-Invenio-3.4.0}/PKG-INFO +1 -1
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/conf.py +49 -34
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/__init__.py +42 -30
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/babel.py +1 -1
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/changeable.py +5 -6
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/cli.py +48 -47
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/confirmable.py +26 -17
- Flask-Security-Invenio-3.4.0/flask_security/core.py +504 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/datastore.py +21 -17
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/decorators.py +20 -11
- Flask-Security-Invenio-3.4.0/flask_security/forms.py +319 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/recoverable.py +27 -14
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/registerable.py +15 -12
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/signals.py +1 -2
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/ca_ES/LC_MESSAGES/flask_security.mo +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/da_DK/LC_MESSAGES/flask_security.mo +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/de_DE/LC_MESSAGES/flask_security.mo +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/es_ES/LC_MESSAGES/flask_security.mo +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/fr_FR/LC_MESSAGES/flask_security.mo +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/ja_JP/LC_MESSAGES/flask_security.mo +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/nl_NL/LC_MESSAGES/flask_security.mo +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/pt_BR/LC_MESSAGES/flask_security.mo +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/pt_PT/LC_MESSAGES/flask_security.mo +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/ru_RU/LC_MESSAGES/flask_security.mo +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/tr_TR/LC_MESSAGES/flask_security.mo +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/zh_Hans_CN/LC_MESSAGES/flask_security.mo +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/utils.py +55 -57
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/views.py +110 -78
- Flask-Security-Invenio-3.4.0/pytest.ini +3 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/setup.cfg +9 -4
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/conftest.py +23 -8
- Flask-Security-Invenio-3.4.0/tests/test_changeable.py +159 -0
- Flask-Security-Invenio-3.4.0/tests/test_cli.py +114 -0
- Flask-Security-Invenio-3.4.0/tests/test_common.py +203 -0
- Flask-Security-Invenio-3.4.0/tests/test_configuration.py +42 -0
- Flask-Security-Invenio-3.4.0/tests/test_confirmable.py +192 -0
- Flask-Security-Invenio-3.4.0/tests/test_context_processors.py +91 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/test_datastore.py +27 -26
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/test_entities.py +9 -9
- Flask-Security-Invenio-3.4.0/tests/test_hashing.py +81 -0
- Flask-Security-Invenio-3.4.0/tests/test_misc.py +303 -0
- Flask-Security-Invenio-3.4.0/tests/test_recoverable.py +221 -0
- Flask-Security-Invenio-3.4.0/tests/test_registerable.py +106 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/test_trackable.py +16 -14
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/utils.py +16 -21
- Flask-Security-Invenio-3.3.2/flask_security/core.py +0 -489
- Flask-Security-Invenio-3.3.2/flask_security/forms.py +0 -283
- Flask-Security-Invenio-3.3.2/pytest.ini +0 -3
- Flask-Security-Invenio-3.3.2/tests/test_changeable.py +0 -132
- Flask-Security-Invenio-3.3.2/tests/test_cli.py +0 -136
- Flask-Security-Invenio-3.3.2/tests/test_common.py +0 -204
- Flask-Security-Invenio-3.3.2/tests/test_configuration.py +0 -37
- Flask-Security-Invenio-3.3.2/tests/test_confirmable.py +0 -200
- Flask-Security-Invenio-3.3.2/tests/test_context_processors.py +0 -90
- Flask-Security-Invenio-3.3.2/tests/test_hashing.py +0 -61
- Flask-Security-Invenio-3.3.2/tests/test_misc.py +0 -280
- Flask-Security-Invenio-3.3.2/tests/test_recoverable.py +0 -244
- Flask-Security-Invenio-3.3.2/tests/test_registerable.py +0 -123
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/.editorconfig +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/AUTHORS +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/Flask_Security_Invenio.egg-info/dependency_links.txt +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/Flask_Security_Invenio.egg-info/not-zip-safe +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/Flask_Security_Invenio.egg-info/top_level.txt +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/LICENSE +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/README.rst +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/artwork/logo-helmet.svg +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/babel.ini +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/Makefile +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/_static/logo-full.png +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/_static/logo-helmet.png +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/_templates/sidebarintro.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/_templates/sidebarlogo.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/api.rst +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/authors.rst +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/changelog.rst +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/configuration.rst +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/contents.rst.inc +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/customizing.rst +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/features.rst +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/index.rst +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/models.rst +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/quickstart.rst +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/docs/requirements.txt +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/_macros.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/_menu.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/_messages.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/change_password.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/email/change_notice.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/email/change_notice.txt +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/email/confirmation_instructions.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/email/confirmation_instructions.txt +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/email/reset_instructions.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/email/reset_instructions.txt +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/email/reset_notice.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/email/reset_notice.txt +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/email/welcome.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/email/welcome.txt +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/forgot_password.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/login_user.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/register_user.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/reset_password.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/templates/security/send_confirmation.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/ca_ES/LC_MESSAGES/flask_security.po +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/da_DK/LC_MESSAGES/flask_security.po +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/de_DE/LC_MESSAGES/flask_security.po +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/es_ES/LC_MESSAGES/flask_security.po +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/flask_security.pot +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/fr_FR/LC_MESSAGES/flask_security.po +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/ja_JP/LC_MESSAGES/flask_security.po +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/nl_NL/LC_MESSAGES/flask_security.po +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/pt_BR/LC_MESSAGES/flask_security.po +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/pt_PT/LC_MESSAGES/flask_security.po +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/ru_RU/LC_MESSAGES/flask_security.po +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/tr_TR/LC_MESSAGES/flask_security.po +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/flask_security/translations/zh_Hans_CN/LC_MESSAGES/flask_security.po +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/pyproject.toml +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/requirements.txt +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/run-tests.sh +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/setup.py +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/_messages.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/_nav.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/custom_security/change_password.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/custom_security/forgot_password.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/custom_security/login_user.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/custom_security/register_user.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/custom_security/reset_password.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/custom_security/send_confirmation.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/custom_security/send_login.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/index.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/register.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/security/email/reset_instructions.html +0 -0
- {Flask-Security-Invenio-3.3.2 → Flask-Security-Invenio-3.4.0}/tests/templates/unauthorized.html +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
9bbfe7fea7cb756778562fed9dd12e54dc4b3de8
|
|
@@ -4,6 +4,24 @@ Flask-Security-Invenio Changelog
|
|
|
4
4
|
Here you can see the full list of changes between each Flask-Security-Invenio
|
|
5
5
|
release.
|
|
6
6
|
|
|
7
|
+
Version 3.4.0
|
|
8
|
+
-------------
|
|
9
|
+
|
|
10
|
+
Released November 19th 2024
|
|
11
|
+
|
|
12
|
+
- i18n-global: add compile-catalog fuzzy
|
|
13
|
+
- setup: remove flask upper pin
|
|
14
|
+
- fix: LegacyAPIWarning
|
|
15
|
+
- tests: move to reusable workflows
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
Version 3.3.3
|
|
19
|
+
-------------
|
|
20
|
+
|
|
21
|
+
Released October 18th 2023
|
|
22
|
+
|
|
23
|
+
- Removes `impesonator_id` from the session on logout.
|
|
24
|
+
|
|
7
25
|
Version 3.3.2
|
|
8
26
|
-------------
|
|
9
27
|
|
|
@@ -5,8 +5,9 @@ Flask-Login>=0.4.1
|
|
|
5
5
|
Flask-Mail>=0.9.1
|
|
6
6
|
Flask-Principal>=0.4.0
|
|
7
7
|
Flask-WTF>=1.1.0
|
|
8
|
-
Flask
|
|
8
|
+
Flask>=1.1.4
|
|
9
9
|
itsdangerous>=2.0
|
|
10
|
+
markupsafe>=2.1.5
|
|
10
11
|
passlib>=1.7
|
|
11
12
|
|
|
12
13
|
[tests]
|
|
@@ -17,11 +18,11 @@ Flask-Sphinx-Themes>=1.0.2
|
|
|
17
18
|
Flask-SQLAlchemy>=2.5.1
|
|
18
19
|
mock>=1.3.0
|
|
19
20
|
msgcheck>=2.9
|
|
21
|
+
pytest-black-ng>=0.4.0
|
|
20
22
|
pytest-cov>=2.10.1
|
|
21
23
|
pytest-flask>=1.0.0
|
|
22
24
|
pytest-isort>=1.2.0
|
|
23
25
|
pytest-pycodestyle>=2.2.0
|
|
24
26
|
pytest-pydocstyle>=2.2.0
|
|
25
|
-
pytest<
|
|
26
|
-
sphinx
|
|
27
|
-
Werkzeug<2.3.0,>=1.0.1
|
|
27
|
+
pytest<9,>=6
|
|
28
|
+
sphinx>=4.2.0
|
|
@@ -20,7 +20,7 @@ from flask_security import __version__
|
|
|
20
20
|
# If extensions (or modules to document with autodoc) are in another directory,
|
|
21
21
|
# add these directories to sys.path here. If the directory is relative to the
|
|
22
22
|
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
|
23
|
-
sys.path.insert(0, os.path.abspath(
|
|
23
|
+
sys.path.insert(0, os.path.abspath(".."))
|
|
24
24
|
|
|
25
25
|
# -- General configuration -----------------------------------------------
|
|
26
26
|
|
|
@@ -29,23 +29,23 @@ sys.path.insert(0, os.path.abspath('..'))
|
|
|
29
29
|
|
|
30
30
|
# Add any Sphinx extension module names here, as strings. They can be
|
|
31
31
|
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
|
32
|
-
extensions = [
|
|
32
|
+
extensions = ["sphinx.ext.autodoc", "sphinx.ext.intersphinx"]
|
|
33
33
|
|
|
34
34
|
# Add any paths that contain templates here, relative to this directory.
|
|
35
|
-
templates_path = [
|
|
35
|
+
templates_path = ["_templates"]
|
|
36
36
|
|
|
37
37
|
# The suffix of source filenames.
|
|
38
|
-
source_suffix =
|
|
38
|
+
source_suffix = ".rst"
|
|
39
39
|
|
|
40
40
|
# The encoding of source files.
|
|
41
41
|
# source_encoding = 'utf-8-sig'
|
|
42
42
|
|
|
43
43
|
# The master toctree document.
|
|
44
|
-
master_doc =
|
|
44
|
+
master_doc = "index"
|
|
45
45
|
|
|
46
46
|
# General information about the project.
|
|
47
|
-
project =
|
|
48
|
-
copyright =
|
|
47
|
+
project = "Flask-Security-Invenio"
|
|
48
|
+
copyright = "2012-2019, Matt Wright, 2022 CERN"
|
|
49
49
|
|
|
50
50
|
# The version info for the project you're documenting, acts as replacement for
|
|
51
51
|
# |version| and |release|, also used in various other places throughout the
|
|
@@ -58,7 +58,7 @@ release = version
|
|
|
58
58
|
|
|
59
59
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
|
60
60
|
# for a list of supported languages.
|
|
61
|
-
|
|
61
|
+
language = "en"
|
|
62
62
|
|
|
63
63
|
# There are two options for replacing |today|: either, you set today to some
|
|
64
64
|
# non-false value, then it is used:
|
|
@@ -68,7 +68,7 @@ release = version
|
|
|
68
68
|
|
|
69
69
|
# List of patterns, relative to source directory, that match files and
|
|
70
70
|
# directories to ignore when looking for source files.
|
|
71
|
-
exclude_patterns = [
|
|
71
|
+
exclude_patterns = ["_build"]
|
|
72
72
|
|
|
73
73
|
# The reST default role (used for this markup: `text`) to use for all
|
|
74
74
|
# documents.
|
|
@@ -86,7 +86,7 @@ exclude_patterns = ['_build']
|
|
|
86
86
|
# show_authors = False
|
|
87
87
|
|
|
88
88
|
# The name of the Pygments (syntax highlighting) style to use.
|
|
89
|
-
pygments_style =
|
|
89
|
+
pygments_style = "sphinx"
|
|
90
90
|
|
|
91
91
|
# A list of ignored prefixes for module index sorting.
|
|
92
92
|
# modindex_common_prefix = []
|
|
@@ -96,20 +96,20 @@ pygments_style = 'sphinx'
|
|
|
96
96
|
|
|
97
97
|
# The theme to use for HTML and HTML Help pages. Major themes that come with
|
|
98
98
|
# Sphinx are currently 'default' and 'sphinxdoc'.
|
|
99
|
-
html_theme =
|
|
99
|
+
html_theme = "flask"
|
|
100
100
|
|
|
101
101
|
# Theme options are theme-specific and customize the look and feel of a theme
|
|
102
102
|
# further. For a list of options available for each theme, see the
|
|
103
103
|
# documentation.
|
|
104
104
|
html_theme_options = {
|
|
105
|
-
|
|
105
|
+
"github_fork": "inveniosoftware/flask-security-invenio",
|
|
106
106
|
# 'index_logo': False
|
|
107
|
-
|
|
108
|
-
|
|
107
|
+
"touch_icon": "touch-icon.png",
|
|
108
|
+
"index_logo": "logo-full.png",
|
|
109
109
|
}
|
|
110
110
|
|
|
111
111
|
# Add any paths that contain custom themes here, relative to this directory.
|
|
112
|
-
html_theme_path = [
|
|
112
|
+
html_theme_path = ["_themes"]
|
|
113
113
|
|
|
114
114
|
# The name for this set of Sphinx documents. If None, it defaults to
|
|
115
115
|
# "<project> v<release> documentation".
|
|
@@ -130,7 +130,7 @@ html_theme_path = ['_themes']
|
|
|
130
130
|
# Add any paths that contain custom static files (such as style sheets) here,
|
|
131
131
|
# relative to this directory. They are copied after the builtin static files,
|
|
132
132
|
# so a file named "default.css" will overwrite the builtin "default.css".
|
|
133
|
-
html_static_path = [
|
|
133
|
+
html_static_path = ["_static"]
|
|
134
134
|
|
|
135
135
|
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
|
136
136
|
# using the given strftime format.
|
|
@@ -142,9 +142,14 @@ html_static_path = ['_static']
|
|
|
142
142
|
|
|
143
143
|
# Custom sidebar templates, maps document names to template names.
|
|
144
144
|
html_sidebars = {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
145
|
+
"index": ["sidebarintro.html", "sourcelink.html", "searchbox.html"],
|
|
146
|
+
"**": [
|
|
147
|
+
"sidebarlogo.html",
|
|
148
|
+
"localtoc.html",
|
|
149
|
+
"relations.html",
|
|
150
|
+
"sourcelink.html",
|
|
151
|
+
"searchbox.html",
|
|
152
|
+
],
|
|
148
153
|
}
|
|
149
154
|
|
|
150
155
|
# Additional templates that should be rendered to pages, maps page names to
|
|
@@ -178,7 +183,7 @@ html_sidebars = {
|
|
|
178
183
|
# html_file_suffix = None
|
|
179
184
|
|
|
180
185
|
# Output file base name for HTML help builder.
|
|
181
|
-
htmlhelp_basename =
|
|
186
|
+
htmlhelp_basename = "Flask-SecurityForkdoc"
|
|
182
187
|
|
|
183
188
|
|
|
184
189
|
# -- Options for LaTeX output --------------------------------------------
|
|
@@ -186,10 +191,8 @@ htmlhelp_basename = 'Flask-SecurityForkdoc'
|
|
|
186
191
|
latex_elements = {
|
|
187
192
|
# The paper size ('letterpaper' or 'a4paper').
|
|
188
193
|
# 'papersize': 'letterpaper',
|
|
189
|
-
|
|
190
194
|
# The font size ('10pt', '11pt' or '12pt').
|
|
191
195
|
# 'pointsize': '10pt',
|
|
192
|
-
|
|
193
196
|
# Additional stuff for the LaTeX preamble.
|
|
194
197
|
# 'preamble': '',
|
|
195
198
|
}
|
|
@@ -198,8 +201,13 @@ latex_elements = {
|
|
|
198
201
|
# (source start file, target name, title, author, documentclass
|
|
199
202
|
# [howto/manual]).
|
|
200
203
|
latex_documents = [
|
|
201
|
-
(
|
|
202
|
-
|
|
204
|
+
(
|
|
205
|
+
"index",
|
|
206
|
+
"Flask-Security-Invenio.tex",
|
|
207
|
+
"Flask-Security-Invenio Documentation",
|
|
208
|
+
"Matt Wright",
|
|
209
|
+
"manual",
|
|
210
|
+
),
|
|
203
211
|
]
|
|
204
212
|
|
|
205
213
|
# The name of an image file (relative to this directory) to place at the top of
|
|
@@ -228,8 +236,7 @@ latex_documents = [
|
|
|
228
236
|
# One entry per manual page. List of tuples
|
|
229
237
|
# (source start file, name, description, authors, manual section).
|
|
230
238
|
man_pages = [
|
|
231
|
-
(
|
|
232
|
-
[u'Matt Wright'], 1)
|
|
239
|
+
("index", "flask-security", "Flask-Security Documentation", ["Matt Wright"], 1)
|
|
233
240
|
]
|
|
234
241
|
|
|
235
242
|
# If true, show URL addresses after external links.
|
|
@@ -242,9 +249,15 @@ man_pages = [
|
|
|
242
249
|
# (source start file, target name, title, author,
|
|
243
250
|
# dir menu entry, description, category)
|
|
244
251
|
texinfo_documents = [
|
|
245
|
-
(
|
|
246
|
-
|
|
247
|
-
|
|
252
|
+
(
|
|
253
|
+
"index",
|
|
254
|
+
"Flask-Security",
|
|
255
|
+
"Flask-Security Documentation",
|
|
256
|
+
"Matt Wright",
|
|
257
|
+
"Flask-Security",
|
|
258
|
+
"One line description of project.",
|
|
259
|
+
"Miscellaneous",
|
|
260
|
+
),
|
|
248
261
|
]
|
|
249
262
|
|
|
250
263
|
# Documents to append as an appendix to all manuals.
|
|
@@ -260,10 +273,10 @@ texinfo_documents = [
|
|
|
260
273
|
# -- Options for Epub output ---------------------------------------------
|
|
261
274
|
|
|
262
275
|
# Bibliographic Dublin Core info.
|
|
263
|
-
epub_title =
|
|
264
|
-
epub_author =
|
|
265
|
-
epub_publisher =
|
|
266
|
-
epub_copyright =
|
|
276
|
+
epub_title = "Flask-Security"
|
|
277
|
+
epub_author = "Matt Wright"
|
|
278
|
+
epub_publisher = "Matt Wright"
|
|
279
|
+
epub_copyright = "2012, Matt Wright"
|
|
267
280
|
|
|
268
281
|
# The language of the text. It defaults to the language option
|
|
269
282
|
# or en if the language is not set.
|
|
@@ -301,4 +314,6 @@ epub_copyright = u'2012, Matt Wright'
|
|
|
301
314
|
|
|
302
315
|
|
|
303
316
|
# Example configuration for intersphinx: refer to the Python standard library.
|
|
304
|
-
intersphinx_mapping = {
|
|
317
|
+
intersphinx_mapping = {
|
|
318
|
+
"python": ("http://docs.python.org/", None),
|
|
319
|
+
}
|
|
@@ -18,12 +18,14 @@
|
|
|
18
18
|
try:
|
|
19
19
|
# Werkzeug <2.1
|
|
20
20
|
from werkzeug import security
|
|
21
|
+
|
|
21
22
|
security.safe_str_cmp
|
|
22
23
|
except AttributeError:
|
|
23
24
|
# Werkzeug >=2.1
|
|
24
25
|
import hmac
|
|
25
26
|
|
|
26
27
|
from werkzeug import security
|
|
28
|
+
|
|
27
29
|
security.safe_str_cmp = hmac.compare_digest
|
|
28
30
|
|
|
29
31
|
from flask_login import login_required
|
|
@@ -31,37 +33,47 @@ from flask_login import login_required
|
|
|
31
33
|
from .core import AnonymousUser, RoleMixin, Security, UserMixin, current_user
|
|
32
34
|
from .datastore import SQLAlchemySessionUserDatastore, SQLAlchemyUserDatastore
|
|
33
35
|
from .decorators import auth_required, roles_accepted, roles_required
|
|
34
|
-
from .forms import
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
from .forms import (
|
|
37
|
+
ConfirmRegisterForm,
|
|
38
|
+
ForgotPasswordForm,
|
|
39
|
+
LoginForm,
|
|
40
|
+
RegisterForm,
|
|
41
|
+
ResetPasswordForm,
|
|
42
|
+
)
|
|
43
|
+
from .signals import (
|
|
44
|
+
confirm_instructions_sent,
|
|
45
|
+
password_reset,
|
|
46
|
+
reset_password_instructions_sent,
|
|
47
|
+
user_confirmed,
|
|
48
|
+
user_registered,
|
|
49
|
+
)
|
|
38
50
|
from .utils import impersonate_user, login_user, logout_user, url_for_security
|
|
39
51
|
|
|
40
|
-
__version__ =
|
|
52
|
+
__version__ = "3.4.0"
|
|
41
53
|
__all__ = (
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
54
|
+
"AnonymousUser",
|
|
55
|
+
"auth_required",
|
|
56
|
+
"confirm_instructions_sent",
|
|
57
|
+
"ConfirmRegisterForm",
|
|
58
|
+
"current_user",
|
|
59
|
+
"ForgotPasswordForm",
|
|
60
|
+
"impersonate_user",
|
|
61
|
+
"login_required",
|
|
62
|
+
"login_user",
|
|
63
|
+
"LoginForm",
|
|
64
|
+
"logout_user",
|
|
65
|
+
"password_reset",
|
|
66
|
+
"RegisterForm",
|
|
67
|
+
"reset_password_instructions_sent",
|
|
68
|
+
"ResetPasswordForm",
|
|
69
|
+
"RoleMixin",
|
|
70
|
+
"roles_accepted",
|
|
71
|
+
"roles_required",
|
|
72
|
+
"Security",
|
|
73
|
+
"SQLAlchemySessionUserDatastore",
|
|
74
|
+
"SQLAlchemyUserDatastore",
|
|
75
|
+
"url_for_security",
|
|
76
|
+
"user_confirmed",
|
|
77
|
+
"user_registered",
|
|
78
|
+
"UserMixin",
|
|
67
79
|
)
|
|
@@ -17,7 +17,7 @@ from .signals import password_changed
|
|
|
17
17
|
from .utils import config_value, hash_password, send_mail
|
|
18
18
|
|
|
19
19
|
# Convenient references
|
|
20
|
-
_security = LocalProxy(lambda: current_app.extensions[
|
|
20
|
+
_security = LocalProxy(lambda: current_app.extensions["security"])
|
|
21
21
|
|
|
22
22
|
_datastore = LocalProxy(lambda: _security.datastore)
|
|
23
23
|
|
|
@@ -27,9 +27,9 @@ def send_password_changed_notice(user):
|
|
|
27
27
|
|
|
28
28
|
:param user: The user to send the notice to
|
|
29
29
|
"""
|
|
30
|
-
if config_value(
|
|
31
|
-
subject = config_value(
|
|
32
|
-
send_mail(subject, user.email,
|
|
30
|
+
if config_value("SEND_PASSWORD_CHANGE_EMAIL"):
|
|
31
|
+
subject = config_value("EMAIL_SUBJECT_PASSWORD_CHANGE_NOTICE")
|
|
32
|
+
send_mail(subject, user.email, "change_notice", user=user)
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
def change_user_password(user, password):
|
|
@@ -41,5 +41,4 @@ def change_user_password(user, password):
|
|
|
41
41
|
user.password = hash_password(password)
|
|
42
42
|
_datastore.put(user)
|
|
43
43
|
send_password_changed_notice(user)
|
|
44
|
-
password_changed.send(current_app._get_current_object(),
|
|
45
|
-
user=user)
|
|
44
|
+
password_changed.send(current_app._get_current_object(), user=user)
|
|
@@ -19,16 +19,18 @@ from werkzeug.local import LocalProxy
|
|
|
19
19
|
|
|
20
20
|
from .utils import hash_password
|
|
21
21
|
|
|
22
|
-
_security = LocalProxy(lambda: current_app.extensions[
|
|
23
|
-
_datastore = LocalProxy(lambda: current_app.extensions[
|
|
22
|
+
_security = LocalProxy(lambda: current_app.extensions["security"])
|
|
23
|
+
_datastore = LocalProxy(lambda: current_app.extensions["security"].datastore)
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
def commit(fn):
|
|
27
27
|
"""Decorator to commit changes in datastore."""
|
|
28
|
+
|
|
28
29
|
@wraps(fn)
|
|
29
30
|
def wrapper(*args, **kwargs):
|
|
30
31
|
fn(*args, **kwargs)
|
|
31
32
|
_datastore.commit()
|
|
33
|
+
|
|
32
34
|
return wrapper
|
|
33
35
|
|
|
34
36
|
|
|
@@ -42,109 +44,108 @@ def roles():
|
|
|
42
44
|
"""Role commands."""
|
|
43
45
|
|
|
44
46
|
|
|
45
|
-
@users.command(
|
|
46
|
-
@click.argument(
|
|
47
|
+
@users.command("create")
|
|
48
|
+
@click.argument("identity")
|
|
47
49
|
@click.password_option()
|
|
48
|
-
@click.option(
|
|
50
|
+
@click.option("-a", "--active", default=False, is_flag=True)
|
|
49
51
|
@with_appcontext
|
|
50
52
|
@commit
|
|
51
53
|
def users_create(identity, password, active):
|
|
52
54
|
"""Create a user."""
|
|
53
55
|
kwargs = {attr: identity for attr in _security.user_identity_attributes}
|
|
54
|
-
kwargs.update(**{
|
|
56
|
+
kwargs.update(**{"password": password, "active": "y" if active else ""})
|
|
55
57
|
|
|
56
|
-
form = _security.confirm_register_form(
|
|
57
|
-
MultiDict(kwargs), meta={'csrf': False}
|
|
58
|
-
)
|
|
58
|
+
form = _security.confirm_register_form(MultiDict(kwargs), meta={"csrf": False})
|
|
59
59
|
|
|
60
60
|
if form.validate():
|
|
61
|
-
kwargs[
|
|
62
|
-
kwargs[
|
|
61
|
+
kwargs["password"] = hash_password(kwargs["password"])
|
|
62
|
+
kwargs["active"] = active
|
|
63
63
|
_datastore.create_user(**kwargs)
|
|
64
|
-
click.secho(
|
|
65
|
-
kwargs[
|
|
64
|
+
click.secho("User created successfully.", fg="green")
|
|
65
|
+
kwargs["password"] = "****"
|
|
66
66
|
click.echo(kwargs)
|
|
67
67
|
else:
|
|
68
|
-
raise click.UsageError(
|
|
68
|
+
raise click.UsageError("Error creating user. %s" % form.errors)
|
|
69
69
|
|
|
70
70
|
|
|
71
|
-
@roles.command(
|
|
72
|
-
@click.argument(
|
|
73
|
-
@click.option(
|
|
71
|
+
@roles.command("create")
|
|
72
|
+
@click.argument("name")
|
|
73
|
+
@click.option("-d", "--description", default=None)
|
|
74
74
|
@with_appcontext
|
|
75
75
|
@commit
|
|
76
76
|
def roles_create(**kwargs):
|
|
77
77
|
"""Create a role."""
|
|
78
78
|
_datastore.create_role(**kwargs)
|
|
79
|
-
click.secho('Role "%(name)s" created successfully.' % kwargs, fg=
|
|
79
|
+
click.secho('Role "%(name)s" created successfully.' % kwargs, fg="green")
|
|
80
80
|
|
|
81
81
|
|
|
82
|
-
@roles.command(
|
|
83
|
-
@click.argument(
|
|
84
|
-
@click.argument(
|
|
82
|
+
@roles.command("add")
|
|
83
|
+
@click.argument("user")
|
|
84
|
+
@click.argument("role")
|
|
85
85
|
@with_appcontext
|
|
86
86
|
@commit
|
|
87
87
|
def roles_add(user, role):
|
|
88
88
|
"""Add user to role."""
|
|
89
89
|
user, role = _datastore._prepare_role_modify_args(user, role)
|
|
90
90
|
if user is None:
|
|
91
|
-
raise click.UsageError(
|
|
91
|
+
raise click.UsageError("Cannot find user.")
|
|
92
92
|
if role is None:
|
|
93
|
-
raise click.UsageError(
|
|
93
|
+
raise click.UsageError("Cannot find role.")
|
|
94
94
|
if _datastore.add_role_to_user(user, role):
|
|
95
|
-
click.secho(
|
|
96
|
-
|
|
95
|
+
click.secho(
|
|
96
|
+
'Role "{0}" added to user "{1}" ' "successfully.".format(role, user),
|
|
97
|
+
fg="green",
|
|
98
|
+
)
|
|
97
99
|
else:
|
|
98
|
-
raise click.UsageError(
|
|
100
|
+
raise click.UsageError("Cannot add role to user.")
|
|
99
101
|
|
|
100
102
|
|
|
101
|
-
@roles.command(
|
|
102
|
-
@click.argument(
|
|
103
|
-
@click.argument(
|
|
103
|
+
@roles.command("remove")
|
|
104
|
+
@click.argument("user")
|
|
105
|
+
@click.argument("role")
|
|
104
106
|
@with_appcontext
|
|
105
107
|
@commit
|
|
106
108
|
def roles_remove(user, role):
|
|
107
109
|
"""Remove user from role."""
|
|
108
110
|
user, role = _datastore._prepare_role_modify_args(user, role)
|
|
109
111
|
if user is None:
|
|
110
|
-
raise click.UsageError(
|
|
112
|
+
raise click.UsageError("Cannot find user.")
|
|
111
113
|
if role is None:
|
|
112
|
-
raise click.UsageError(
|
|
114
|
+
raise click.UsageError("Cannot find role.")
|
|
113
115
|
if _datastore.remove_role_from_user(user, role):
|
|
114
|
-
click.secho(
|
|
115
|
-
|
|
116
|
+
click.secho(
|
|
117
|
+
'Role "{0}" removed from user "{1}" ' "successfully.".format(role, user),
|
|
118
|
+
fg="green",
|
|
119
|
+
)
|
|
116
120
|
else:
|
|
117
|
-
raise click.UsageError(
|
|
121
|
+
raise click.UsageError("Cannot remove role from user.")
|
|
118
122
|
|
|
119
123
|
|
|
120
|
-
@users.command(
|
|
121
|
-
@click.argument(
|
|
124
|
+
@users.command("activate")
|
|
125
|
+
@click.argument("user")
|
|
122
126
|
@with_appcontext
|
|
123
127
|
@commit
|
|
124
128
|
def users_activate(user):
|
|
125
129
|
"""Activate a user."""
|
|
126
130
|
user_obj = _datastore.get_user(user)
|
|
127
131
|
if user_obj is None:
|
|
128
|
-
raise click.UsageError(
|
|
132
|
+
raise click.UsageError("ERROR: User not found.")
|
|
129
133
|
if _datastore.activate_user(user_obj):
|
|
130
|
-
click.secho('User "{0}" has been activated.'.format(user), fg=
|
|
134
|
+
click.secho('User "{0}" has been activated.'.format(user), fg="green")
|
|
131
135
|
else:
|
|
132
|
-
click.secho('User "{0}" was already activated.'.format(user),
|
|
133
|
-
fg='yellow')
|
|
136
|
+
click.secho('User "{0}" was already activated.'.format(user), fg="yellow")
|
|
134
137
|
|
|
135
138
|
|
|
136
|
-
@users.command(
|
|
137
|
-
@click.argument(
|
|
139
|
+
@users.command("deactivate")
|
|
140
|
+
@click.argument("user")
|
|
138
141
|
@with_appcontext
|
|
139
142
|
@commit
|
|
140
143
|
def users_deactivate(user):
|
|
141
144
|
"""Deactivate a user."""
|
|
142
145
|
user_obj = _datastore.get_user(user)
|
|
143
146
|
if user_obj is None:
|
|
144
|
-
raise click.UsageError(
|
|
147
|
+
raise click.UsageError("ERROR: User not found.")
|
|
145
148
|
if _datastore.deactivate_user(user_obj):
|
|
146
|
-
click.secho('User "{0}" has been deactivated.'.format(user),
|
|
147
|
-
fg='green')
|
|
149
|
+
click.secho('User "{0}" has been deactivated.'.format(user), fg="green")
|
|
148
150
|
else:
|
|
149
|
-
click.secho('User "{0}" was already deactivated.'.format(user),
|
|
150
|
-
fg='yellow')
|
|
151
|
+
click.secho('User "{0}" was already deactivated.'.format(user), fg="yellow")
|