pas.plugins.oidc 2.0.0b3__tar.gz → 2.0.0rc1__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.
- pas_plugins_oidc-2.0.0rc1/.gitignore +52 -0
- pas.plugins.oidc-2.0.0b3/CHANGES.md → pas_plugins_oidc-2.0.0rc1/CHANGELOG.md +29 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/PKG-INFO +75 -190
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/README.md +36 -3
- pas_plugins_oidc-2.0.0rc1/dependabot.yml +11 -0
- pas_plugins_oidc-2.0.0rc1/docs/Makefile +107 -0
- pas_plugins_oidc-2.0.0rc1/docs/_static/allowedgroups1.png +0 -0
- pas_plugins_oidc-2.0.0rc1/docs/_static/allowedgroups2.png +0 -0
- pas_plugins_oidc-2.0.0rc1/docs/_static/allowedgroups3.png +0 -0
- pas_plugins_oidc-2.0.0rc1/docs/conf.py +237 -0
- pas_plugins_oidc-2.0.0rc1/docs/index.md +26 -0
- pas_plugins_oidc-2.0.0rc1/docs/pyproject.toml +15 -0
- pas_plugins_oidc-2.0.0rc1/docs/robots.txt +8 -0
- pas_plugins_oidc-2.0.0rc1/docs/uv.lock +692 -0
- pas_plugins_oidc-2.0.0rc1/instance.yaml +3 -0
- pas_plugins_oidc-2.0.0rc1/pyproject.toml +218 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/__init__.py +2 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/browser/configure.zcml +8 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/browser/view.py +37 -14
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/controlpanel/classic.py +8 -1
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/controlpanel/deserializer.py +18 -9
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/interfaces.py +10 -0
- pas.plugins.oidc-2.0.0b3/src/pas/plugins/oidc/locales/update.py → pas_plugins_oidc-2.0.0rc1/src/pas/plugins/oidc/locales/__main__.py +20 -21
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/locales/de/LC_MESSAGES/pas.plugins.oidc.po +37 -17
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/locales/en/LC_MESSAGES/pas.plugins.oidc.po +37 -17
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/locales/es/LC_MESSAGES/pas.plugins.oidc.po +37 -17
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/locales/pas.plugins.oidc.pot +38 -18
- pas_plugins_oidc-2.0.0rc1/src/pas/plugins/oidc/plugins.py +541 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/services/login/get.py +7 -8
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/services/oidc/oidc.py +4 -6
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/utils.py +36 -41
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/tests/conftest.py +8 -10
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/tests/controlpanel/test_controlpanel_api.py +0 -1
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/tests/docker-compose.yml +0 -2
- pas_plugins_oidc-2.0.0rc1/tests/keycloak/import/plone-realm.json +2478 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/tests/plugin/test_plugin.py +3 -3
- pas_plugins_oidc-2.0.0rc1/tests/services/test_services_login_with_allowed_groups.py +36 -0
- pas.plugins.oidc-2.0.0b3/.coveragerc +0 -9
- pas.plugins.oidc-2.0.0b3/.pre-commit-config.yaml +0 -100
- pas.plugins.oidc-2.0.0b3/MANIFEST.in +0 -15
- pas.plugins.oidc-2.0.0b3/Makefile +0 -161
- pas.plugins.oidc-2.0.0b3/constraints.txt +0 -1
- pas.plugins.oidc-2.0.0b3/instance.yaml +0 -8
- pas.plugins.oidc-2.0.0b3/pyproject.toml +0 -180
- pas.plugins.oidc-2.0.0b3/requirements-docs.txt +0 -10
- pas.plugins.oidc-2.0.0b3/requirements.txt +0 -2
- pas.plugins.oidc-2.0.0b3/setup.cfg +0 -4
- pas.plugins.oidc-2.0.0b3/setup.py +0 -91
- pas.plugins.oidc-2.0.0b3/src/pas/plugins/oidc/locales/de/LC_MESSAGES/pas.plugins.oidc.mo +0 -0
- pas.plugins.oidc-2.0.0b3/src/pas/plugins/oidc/locales/en/LC_MESSAGES/pas.plugins.oidc.mo +0 -0
- pas.plugins.oidc-2.0.0b3/src/pas/plugins/oidc/locales/es/LC_MESSAGES/pas.plugins.oidc.mo +0 -0
- pas.plugins.oidc-2.0.0b3/src/pas/plugins/oidc/plugins.py +0 -476
- pas.plugins.oidc-2.0.0b3/src/pas.plugins.oidc.egg-info/PKG-INFO +0 -535
- pas.plugins.oidc-2.0.0b3/src/pas.plugins.oidc.egg-info/SOURCES.txt +0 -90
- pas.plugins.oidc-2.0.0b3/src/pas.plugins.oidc.egg-info/dependency_links.txt +0 -1
- pas.plugins.oidc-2.0.0b3/src/pas.plugins.oidc.egg-info/entry_points.txt +0 -5
- pas.plugins.oidc-2.0.0b3/src/pas.plugins.oidc.egg-info/namespace_packages.txt +0 -2
- pas.plugins.oidc-2.0.0b3/src/pas.plugins.oidc.egg-info/not-zip-safe +0 -1
- pas.plugins.oidc-2.0.0b3/src/pas.plugins.oidc.egg-info/requires.txt +0 -27
- pas.plugins.oidc-2.0.0b3/src/pas.plugins.oidc.egg-info/top_level.txt +0 -1
- pas.plugins.oidc-2.0.0b3/tests/keycloak/import/plone-realm.json +0 -2024
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/CONTRIBUTORS.md +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/LICENSE.GPL +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/LICENSE.md +0 -0
- {pas.plugins.oidc-2.0.0b3/docs → pas_plugins_oidc-2.0.0rc1/docs/_static}/icon.png +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/docs/screenshot-settings.png +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/__init__.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/__init__.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/browser/__init__.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/configure.zcml +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/controlpanel/__init__.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/controlpanel/configure.zcml +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/controlpanel/oidc.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/controlpanel/serializer.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/locales/__init__.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/profiles/default/browserlayer.xml +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/profiles/default/controlpanel.xml +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/profiles/default/metadata.xml +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/profiles/uninstall/browserlayer.xml +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/services/__init__.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/services/configure.zcml +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/services/login/__init__.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/services/login/configure.zcml +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/services/oidc/__init__.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/services/oidc/configure.zcml +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/session.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/setuphandlers.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/testing.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/upgrades/__init__.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/upgrades/configure.zcml +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/src/pas/plugins/oidc/www/oidcPluginForm.zpt +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/tests/controlpanel/conftest.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/tests/functional/conftest.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/tests/functional/test_controlpanel_classic.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/tests/functional/test_functional.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/tests/keycloak/Dockerfile +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/tests/keycloak/import/.gitkeep +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/tests/keycloak/import/plone-test-realm.json +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/tests/services/conftest.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/tests/services/test_services_login_get.py +0 -0
- /pas.plugins.oidc-2.0.0b3/tests/services/test_servides_login_get_multiple_plugins.py → /pas_plugins_oidc-2.0.0rc1/tests/services/test_services_login_get_multiple_plugins.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/tests/services/test_services_oidc_get.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/tests/services/test_services_oidc_post.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/tests/setup/test_setup_install.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/tests/setup/test_setup_uninstall.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/tests/utils/test_utils_flow.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/tests/utils/test_utils_str.py +0 -0
- {pas.plugins.oidc-2.0.0b3 → pas_plugins_oidc-2.0.0rc1}/tests/utils/test_utils_url.py +0 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
*.egg-info
|
|
2
|
+
*.pyc
|
|
3
|
+
*.pyo
|
|
4
|
+
|
|
5
|
+
# translation related
|
|
6
|
+
*.mo
|
|
7
|
+
|
|
8
|
+
# tools related
|
|
9
|
+
build/
|
|
10
|
+
.coverage
|
|
11
|
+
.*project
|
|
12
|
+
coverage.xml
|
|
13
|
+
dist/
|
|
14
|
+
docs/_build
|
|
15
|
+
__pycache__/
|
|
16
|
+
.tox
|
|
17
|
+
node_modules/
|
|
18
|
+
|
|
19
|
+
# venv / buildout related
|
|
20
|
+
bin/
|
|
21
|
+
develop-eggs/
|
|
22
|
+
eggs/
|
|
23
|
+
.eggs/
|
|
24
|
+
etc/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
include/
|
|
27
|
+
lib/
|
|
28
|
+
lib64
|
|
29
|
+
.mr.developer.cfg
|
|
30
|
+
parts/
|
|
31
|
+
pyvenv.cfg
|
|
32
|
+
var/
|
|
33
|
+
local.cfg
|
|
34
|
+
.venv
|
|
35
|
+
|
|
36
|
+
# mxdev
|
|
37
|
+
/instance/
|
|
38
|
+
/.make-sentinels/
|
|
39
|
+
/*-mxdev.txt
|
|
40
|
+
/reports/
|
|
41
|
+
/sources/
|
|
42
|
+
/venv/
|
|
43
|
+
.installed.txt
|
|
44
|
+
constraints*.txt
|
|
45
|
+
requirements*.txt
|
|
46
|
+
|
|
47
|
+
requirements-mxdev.txt
|
|
48
|
+
|
|
49
|
+
/.python-version
|
|
50
|
+
/dependencies.svg
|
|
51
|
+
.pytest_cache
|
|
52
|
+
.ruff_cache
|
|
@@ -9,12 +9,41 @@
|
|
|
9
9
|
|
|
10
10
|
<!-- towncrier release notes start -->
|
|
11
11
|
|
|
12
|
+
## 2.0.0rc1 (2025-03-26)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Breaking changes:
|
|
16
|
+
|
|
17
|
+
- Drop support for Python 3.8 @ericof
|
|
18
|
+
- Drop support for Python 3.9 @ericof
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### New features:
|
|
22
|
+
|
|
23
|
+
- Add support for Plone 6.1 @ericof
|
|
24
|
+
- Add support for Python 3.12 @ericof
|
|
25
|
+
- Add support for Python 3.13 @ericof
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
### Internal:
|
|
29
|
+
|
|
30
|
+
- Move to pyproject.toml, hatchling and uv @ericof [#71](https://github.com/collective/pas.plugins.oidc/issues/71)
|
|
31
|
+
- Update GHA workflows @ericof
|
|
32
|
+
|
|
33
|
+
## 2.0.0b4 (2025-02-28)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
### New features:
|
|
37
|
+
|
|
38
|
+
- Add backchannel logout implementation for classic ui session @mamico [#67](https://github.com/collective/pas.plugins.oidc/issues/67)
|
|
39
|
+
|
|
12
40
|
## 2.0.0b3 (2025-02-03)
|
|
13
41
|
|
|
14
42
|
|
|
15
43
|
### New features:
|
|
16
44
|
|
|
17
45
|
- Register the adapter as needed by the @login endpoint present in plone.restapi @erral [#47](https://github.com/collective/pas.plugins.oidc/issues/47)
|
|
46
|
+
- Changes to make compatible with OAM (Oracle Access Manager) @djay [#65](https://github.com/collective/pas.plugins.oidc/pull/64)
|
|
18
47
|
|
|
19
48
|
|
|
20
49
|
### Internal:
|
|
@@ -1,61 +1,57 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: pas.plugins.oidc
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.0rc1
|
|
4
4
|
Summary: OIDC support for Plone sites
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
Author-email: mauro.amico@gmail.com
|
|
8
|
-
License: GPL version 2
|
|
9
|
-
Project-URL: PyPI, https://pypi.python.org/pypi/pas.plugins.oidc
|
|
5
|
+
Project-URL: Homepage, https://github.com/collective/pas.plugins.oidc
|
|
6
|
+
Project-URL: PyPI, https://pypi.org/project/pas.plugins.oidc
|
|
10
7
|
Project-URL: Source, https://github.com/collective/pas.plugins.oidc
|
|
11
8
|
Project-URL: Tracker, https://github.com/collective/pas.plugins.oidc/issues
|
|
12
|
-
|
|
9
|
+
Author-email: Mauro Amico <mauro.amico@gmail.com>, Érico Andrei <ericof@plone.org>
|
|
10
|
+
License-Expression: GPL-2.0-only
|
|
11
|
+
License-File: LICENSE.GPL
|
|
12
|
+
License-File: LICENSE.md
|
|
13
|
+
Keywords: Authentication,CMS,OAuth,OIDC,PAS,Plone,Python
|
|
13
14
|
Classifier: Development Status :: 4 - Beta
|
|
14
15
|
Classifier: Environment :: Web Environment
|
|
15
16
|
Classifier: Framework :: Plone
|
|
16
|
-
Classifier: Framework :: Plone :: Addon
|
|
17
17
|
Classifier: Framework :: Plone :: 6.0
|
|
18
|
+
Classifier: Framework :: Plone :: 6.1
|
|
19
|
+
Classifier: Framework :: Plone :: Addon
|
|
20
|
+
Classifier: License :: OSI Approved :: GNU General Public License v2 (GPLv2)
|
|
21
|
+
Classifier: Operating System :: OS Independent
|
|
18
22
|
Classifier: Programming Language :: Python
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
20
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
21
23
|
Classifier: Programming Language :: Python :: 3.10
|
|
22
24
|
Classifier: Programming Language :: Python :: 3.11
|
|
23
|
-
Classifier:
|
|
24
|
-
Classifier:
|
|
25
|
-
Requires-Python: >=3.
|
|
26
|
-
Description-Content-Type: text/markdown
|
|
27
|
-
License-File: LICENSE.GPL
|
|
28
|
-
License-File: LICENSE.md
|
|
29
|
-
Requires-Dist: setuptools
|
|
30
|
-
Requires-Dist: Plone
|
|
31
|
-
Requires-Dist: Zope
|
|
32
|
-
Requires-Dist: Products.CMFCore
|
|
33
|
-
Requires-Dist: plone.api
|
|
34
|
-
Requires-Dist: plone.app.registry
|
|
35
|
-
Requires-Dist: plone.base
|
|
36
|
-
Requires-Dist: plone.protect
|
|
37
|
-
Requires-Dist: plone.restapi>=9.10.0
|
|
25
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
26
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
27
|
+
Requires-Python: >=3.10
|
|
38
28
|
Requires-Dist: oic
|
|
29
|
+
Requires-Dist: plone-api
|
|
30
|
+
Requires-Dist: plone-app-registry
|
|
31
|
+
Requires-Dist: plone-base
|
|
32
|
+
Requires-Dist: plone-protect
|
|
33
|
+
Requires-Dist: plone-restapi>=9.10.0
|
|
34
|
+
Requires-Dist: products-cmfcore
|
|
35
|
+
Requires-Dist: products-cmfplone>=6.0
|
|
39
36
|
Requires-Dist: requests
|
|
40
|
-
Requires-Dist: z3c
|
|
37
|
+
Requires-Dist: z3c-form
|
|
38
|
+
Requires-Dist: zope
|
|
41
39
|
Provides-Extra: test
|
|
42
|
-
Requires-Dist:
|
|
43
|
-
Requires-Dist: plone
|
|
44
|
-
Requires-Dist: plone
|
|
45
|
-
Requires-Dist: plone
|
|
46
|
-
Requires-Dist:
|
|
47
|
-
Requires-Dist: pytest-cov; extra ==
|
|
48
|
-
Requires-Dist: pytest-
|
|
49
|
-
Requires-Dist: pytest-
|
|
50
|
-
Requires-Dist: pytest-
|
|
51
|
-
Requires-Dist:
|
|
52
|
-
Requires-Dist: zest
|
|
53
|
-
Requires-Dist: zestreleaser.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
<div align="center"><img alt="pas.plugins.oidc logo" src="https://raw.githubusercontent.com/collective/pas.plugins.oidc/main/docs/icon.png" width="70" /></div>
|
|
40
|
+
Requires-Dist: plone-app-contenttypes; extra == 'test'
|
|
41
|
+
Requires-Dist: plone-app-testing; extra == 'test'
|
|
42
|
+
Requires-Dist: plone-restapi[test]; extra == 'test'
|
|
43
|
+
Requires-Dist: plone-testing; extra == 'test'
|
|
44
|
+
Requires-Dist: pytest; extra == 'test'
|
|
45
|
+
Requires-Dist: pytest-cov; extra == 'test'
|
|
46
|
+
Requires-Dist: pytest-docker; extra == 'test'
|
|
47
|
+
Requires-Dist: pytest-mock; extra == 'test'
|
|
48
|
+
Requires-Dist: pytest-plone>=0.5.0; extra == 'test'
|
|
49
|
+
Requires-Dist: requests-mock; extra == 'test'
|
|
50
|
+
Requires-Dist: zest-releaser[recommended]>=9.5.0; extra == 'test'
|
|
51
|
+
Requires-Dist: zestreleaser-towncrier>=1.3.0; extra == 'test'
|
|
52
|
+
Description-Content-Type: text/markdown
|
|
53
|
+
|
|
54
|
+
<div align="center"><img alt="pas.plugins.oidc logo" src="https://raw.githubusercontent.com/collective/pas.plugins.oidc/main/docs/_static/icon.png" width="70" /></div>
|
|
59
55
|
|
|
60
56
|
<h1 align="center">pas.plugins.oidc</h1>
|
|
61
57
|
|
|
@@ -70,7 +66,7 @@ Requires-Dist: requests-mock; extra == "test"
|
|
|
70
66
|
|
|
71
67
|
[](https://pypi.org/project/pas.plugins.oidc/)
|
|
72
68
|
|
|
73
|
-
[](https://github.com/collective/pas.plugins.oidc/actions/workflows/ci.yml)
|
|
74
70
|

|
|
75
71
|
|
|
76
72
|
[](https://github.com/collective/pas.plugins.oidc)
|
|
@@ -143,7 +139,6 @@ When using this plugin with a [Volto frontend](https://6.docs.plone.org/volto/in
|
|
|
143
139
|
|
|
144
140
|
Also, on the OpenID provider, configure the Redirect URL as **`<Path to your Plone site>`/login-oidc/oidc**.
|
|
145
141
|
|
|
146
|
-
|
|
147
142
|
#### Classic UI
|
|
148
143
|
|
|
149
144
|
When using this plugin with *Plone 6 Classic UI* the standard URLs used for login (`http://localhost:8080/Plone/login`) and logout (`http://localhost:8080/Plone/logout`)
|
|
@@ -270,6 +265,40 @@ Currently, the Plone logout form is unchanged.
|
|
|
270
265
|
Instead, for testing go to the logout page of the plugin: http://localhost:8080/Plone/acl_users/oidc/logout,
|
|
271
266
|
this will take you to Keycloak to logout, and then return to the post-logout redirect URL.
|
|
272
267
|
|
|
268
|
+
#### Backchannel SLO (experimental)
|
|
269
|
+
|
|
270
|
+
OIDC Backchannel Logout is a server-to-server mechanism where the IdP notifies RPs via an HTTP POST request to terminate user sessions upon logout, ensuring secure and seamless Single Logout (SLO) without relying on the user's browser.
|
|
271
|
+
See the specification [OpenID Connect Back-Channel Logout 1.0](https://openid.net/specs/openid-connect-backchannel-1_0.html).
|
|
272
|
+
|
|
273
|
+
Current backchannel logout implementation, in this product, utilizes functionality introduced in plone.session >= 4.0.0 (Plone 6 and later) for server-side session invalidation (see plone.session PR [plone.session#26](https://github.com/plone/plone.session/pull/26)), and, at the moment, applies only to Plone Classic UI.
|
|
274
|
+
|
|
275
|
+
To enable this functionality:
|
|
276
|
+
|
|
277
|
+
1. Navigate to `.../acl_users/session/manage_secret` and enable the `Enable per-user keyring` option.
|
|
278
|
+
|
|
279
|
+
2. Configure the OpenID Provider (e.g., Keycloak) to use the backchannel logout endpoint with the url: `.../acl_users/oidc/backchannel-logout`
|
|
280
|
+
|
|
281
|
+
#### Allowed groups
|
|
282
|
+
|
|
283
|
+
If you need to restrict access to a specific group, you can use the `Allowed groups` field in the plugin configuration. If the user is not in any of the groups listed, the login will be denied.
|
|
284
|
+
|
|
285
|
+
To use this feature, you need to create a new scope in the OIDC Provider (e.g., Keycloak) and add the groups to the user's token.
|
|
286
|
+
|
|
287
|
+
In Keycloak, go to the `Client Scopes` section and create a new scope named `groups`. Then, go to the `Mappers` tab and create a new mapper with the name `groups` and type `Group Membership` (Uncheck the `Full groups path` option).
|
|
288
|
+
You can find this configuration in the `plone` realm in the `tests` directory. The `plone` client is also configured to use the `groups` scope.
|
|
289
|
+
|
|
290
|
+

|
|
291
|
+
|
|
292
|
+

|
|
293
|
+
|
|
294
|
+
After that, go to the `Client Scopes` section and add the new scope to the client you are using with the plugin (for instance, `plone`).
|
|
295
|
+
|
|
296
|
+

|
|
297
|
+
|
|
298
|
+
Finally, in the plugin configuration, add `groups` to the scopes field.
|
|
299
|
+
|
|
300
|
+
In the `Allowed groups` field, you can add the groups that are allowed to log in. For example, in this repository, you could set `Foundation Members`. Users who are not in this group will not be able to log in.
|
|
301
|
+
|
|
273
302
|
## Technical Decisions
|
|
274
303
|
|
|
275
304
|
### Usage of sessions in the login process
|
|
@@ -389,147 +418,3 @@ Run tests named `TestServiceOIDCPost`:
|
|
|
389
418
|
## License
|
|
390
419
|
|
|
391
420
|
The project is licensed under the GPLv2.
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
# Contributors
|
|
395
|
-
|
|
396
|
-
- mamico, mauro.amico@gmail.com
|
|
397
|
-
- erral, Mikel Larreategi
|
|
398
|
-
- alecghica, alec.ghica@eaudeweb.ro
|
|
399
|
-
- macagua, leonardocaballero@gmail.com
|
|
400
|
-
- ericof, ericof@plone.org
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
# Changelog
|
|
404
|
-
|
|
405
|
-
<!--
|
|
406
|
-
You should *NOT* be adding new change log entries to this file.
|
|
407
|
-
You should create a file in the news directory instead.
|
|
408
|
-
For helpful instructions, please see:
|
|
409
|
-
https://github.com/plone/plone.releaser/blob/master/ADD-A-NEWS-ITEM.rst
|
|
410
|
-
-->
|
|
411
|
-
|
|
412
|
-
<!-- towncrier release notes start -->
|
|
413
|
-
|
|
414
|
-
## 2.0.0b3 (2025-02-03)
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
### New features:
|
|
418
|
-
|
|
419
|
-
- Register the adapter as needed by the @login endpoint present in plone.restapi @erral [#47](https://github.com/collective/pas.plugins.oidc/issues/47)
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
### Internal:
|
|
423
|
-
|
|
424
|
-
- Bump plone.restapi to 9.10.0 [@ericof]
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
## 2.0.0b2 (2024-12-09)
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
### New features:
|
|
431
|
-
|
|
432
|
-
- Update the Deutsch translation [macagua] [#60](https://github.com/collective/pas.plugins.oidc/issues/60)
|
|
433
|
-
- Implement control panel to configure pas.plugins.oidc [@ericof] [#65](https://github.com/collective/pas.plugins.oidc/issues/65)
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
### Documentation:
|
|
437
|
-
|
|
438
|
-
- Fixed port numbers on README file [macagua] [#51](https://github.com/collective/pas.plugins.oidc/issues/51)
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
## 2.0.0b1 (2024-06-25)
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
### New features:
|
|
445
|
-
|
|
446
|
-
- Added Deutsch translation
|
|
447
|
-
[@macagua] [#45](https://github.com/collective/pas.plugins.oidc/issues/45)
|
|
448
|
-
- Allow multiple instances of OIDC plugin in a given Plone site @erral [#48](https://github.com/collective/pas.plugins.oidc/issues/48)
|
|
449
|
-
- Notify user events on creation and authentication. [@Arkusm][@ericof] [#53](https://github.com/collective/pas.plugins.oidc/issues/53)
|
|
450
|
-
- Updated the latest .po templates for translate
|
|
451
|
-
Updated Spanish translation
|
|
452
|
-
[@macagua] [#55](https://github.com/collective/pas.plugins.oidc/issues/55)
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
### Internal:
|
|
456
|
-
|
|
457
|
-
- Update configuration files @plone
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
### Documentation:
|
|
461
|
-
|
|
462
|
-
- Recommend using `[pas.plugins.keycloakgroups](https://pypi.org/project/pas.plugins.keycloakgroups/)` for groups support with Keycloak [@ericof] [#42](https://github.com/collective/pas.plugins.oidc/issues/42)
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
## 2.0.0a1 (2023-11-23)
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
### New features:
|
|
469
|
-
|
|
470
|
-
- Implement [plone/meta](https://github.com/plone/meta) and convert documentation to Markdown [@ericof] [#32](https://github.com/collective/pas.plugins.oidc/issues/32)
|
|
471
|
-
- Drop support to Python 2.7 and Plone 5.2 [@ericof] [#33](https://github.com/collective/pas.plugins.oidc/issues/33)
|
|
472
|
-
- Implement restapi services to handle authentication flow [@ericof] [#38](https://github.com/collective/pas.plugins.oidc/issues/38)
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
### Internal:
|
|
476
|
-
|
|
477
|
-
- Rewrite tests from unittest to pytest with [pytest-plone](https://pypi.org/project/pytest-plone/) [@ericof] [#34](https://github.com/collective/pas.plugins.oidc/issues/34)
|
|
478
|
-
- Allow dict instances to hold userinfo [@erral] [#35](https://github.com/collective/pas.plugins.oidc/issues/35)
|
|
479
|
-
- Declare the minimum requirements for Plone/python in the readme [mamico] [#36](https://github.com/collective/pas.plugins.oidc/issues/36)
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
## 1.0.0 (2023-11-11)
|
|
483
|
-
|
|
484
|
-
- Allow dict instances to hold userinfo [@erral]
|
|
485
|
-
|
|
486
|
-
## 1.0a6 (2023-07-20)
|
|
487
|
-
|
|
488
|
-
- Added Spanish translation [@macagua]
|
|
489
|
-
|
|
490
|
-
- Added improvements about i18n support [macagua]
|
|
491
|
-
|
|
492
|
-
- Drop python 2.7 and Plone 4 support [@erral]
|
|
493
|
-
|
|
494
|
-
- Add support for the post_logout parameter for logout api. [@ramiroluz]
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
## 1.0a5 (2023-04-05)
|
|
498
|
-
|
|
499
|
-
- Catch exceptions during the OAuth process [@erral]
|
|
500
|
-
|
|
501
|
-
- Update the plugin to make challenges.
|
|
502
|
-
An anonymous user who visits a page for which you have to be authenticated,
|
|
503
|
-
is redirected to the new require_login view on the plugin.
|
|
504
|
-
This works the same way as the standard require_login page of Plone.
|
|
505
|
-
[@maurits]
|
|
506
|
-
|
|
507
|
-
- Add a property for the default userinfo instead of using only sub. [@eikichi18]
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
## 1.0a4 (2023-01-16)
|
|
511
|
-
|
|
512
|
-
- Call getProperty only once when getting redirect_uris or scope. [@maurits]
|
|
513
|
-
|
|
514
|
-
- use getProperty accessor [@mamico]
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
## 1.0a3 (2022-10-30)
|
|
518
|
-
|
|
519
|
-
- Removed the hardcoded auth cookie name [@alecghica]
|
|
520
|
-
|
|
521
|
-
- Fixed Python compatibility with version >= 3.6 [@alecghica]
|
|
522
|
-
|
|
523
|
-
- check if url is in portal before redirect #2 [@erral]
|
|
524
|
-
|
|
525
|
-
- manage came_from [@mamico]
|
|
526
|
-
|
|
527
|
-
## 1.0a2 (unreleased)
|
|
528
|
-
|
|
529
|
-
- do userinforequest if there is a client.userinfo_endpoint [@mamico]
|
|
530
|
-
|
|
531
|
-
## 1.0a1 (unreleased)
|
|
532
|
-
|
|
533
|
-
- Initial release. [@mamico]
|
|
534
|
-
|
|
535
|
-
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<div align="center"><img alt="pas.plugins.oidc logo" src="https://raw.githubusercontent.com/collective/pas.plugins.oidc/main/docs/icon.png" width="70" /></div>
|
|
1
|
+
<div align="center"><img alt="pas.plugins.oidc logo" src="https://raw.githubusercontent.com/collective/pas.plugins.oidc/main/docs/_static/icon.png" width="70" /></div>
|
|
2
2
|
|
|
3
3
|
<h1 align="center">pas.plugins.oidc</h1>
|
|
4
4
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
[](https://pypi.org/project/pas.plugins.oidc/)
|
|
15
15
|
|
|
16
|
-
[](https://github.com/collective/pas.plugins.oidc/actions/workflows/ci.yml)
|
|
17
17
|

|
|
18
18
|
|
|
19
19
|
[](https://github.com/collective/pas.plugins.oidc)
|
|
@@ -86,7 +86,6 @@ When using this plugin with a [Volto frontend](https://6.docs.plone.org/volto/in
|
|
|
86
86
|
|
|
87
87
|
Also, on the OpenID provider, configure the Redirect URL as **`<Path to your Plone site>`/login-oidc/oidc**.
|
|
88
88
|
|
|
89
|
-
|
|
90
89
|
#### Classic UI
|
|
91
90
|
|
|
92
91
|
When using this plugin with *Plone 6 Classic UI* the standard URLs used for login (`http://localhost:8080/Plone/login`) and logout (`http://localhost:8080/Plone/logout`)
|
|
@@ -213,6 +212,40 @@ Currently, the Plone logout form is unchanged.
|
|
|
213
212
|
Instead, for testing go to the logout page of the plugin: http://localhost:8080/Plone/acl_users/oidc/logout,
|
|
214
213
|
this will take you to Keycloak to logout, and then return to the post-logout redirect URL.
|
|
215
214
|
|
|
215
|
+
#### Backchannel SLO (experimental)
|
|
216
|
+
|
|
217
|
+
OIDC Backchannel Logout is a server-to-server mechanism where the IdP notifies RPs via an HTTP POST request to terminate user sessions upon logout, ensuring secure and seamless Single Logout (SLO) without relying on the user's browser.
|
|
218
|
+
See the specification [OpenID Connect Back-Channel Logout 1.0](https://openid.net/specs/openid-connect-backchannel-1_0.html).
|
|
219
|
+
|
|
220
|
+
Current backchannel logout implementation, in this product, utilizes functionality introduced in plone.session >= 4.0.0 (Plone 6 and later) for server-side session invalidation (see plone.session PR [plone.session#26](https://github.com/plone/plone.session/pull/26)), and, at the moment, applies only to Plone Classic UI.
|
|
221
|
+
|
|
222
|
+
To enable this functionality:
|
|
223
|
+
|
|
224
|
+
1. Navigate to `.../acl_users/session/manage_secret` and enable the `Enable per-user keyring` option.
|
|
225
|
+
|
|
226
|
+
2. Configure the OpenID Provider (e.g., Keycloak) to use the backchannel logout endpoint with the url: `.../acl_users/oidc/backchannel-logout`
|
|
227
|
+
|
|
228
|
+
#### Allowed groups
|
|
229
|
+
|
|
230
|
+
If you need to restrict access to a specific group, you can use the `Allowed groups` field in the plugin configuration. If the user is not in any of the groups listed, the login will be denied.
|
|
231
|
+
|
|
232
|
+
To use this feature, you need to create a new scope in the OIDC Provider (e.g., Keycloak) and add the groups to the user's token.
|
|
233
|
+
|
|
234
|
+
In Keycloak, go to the `Client Scopes` section and create a new scope named `groups`. Then, go to the `Mappers` tab and create a new mapper with the name `groups` and type `Group Membership` (Uncheck the `Full groups path` option).
|
|
235
|
+
You can find this configuration in the `plone` realm in the `tests` directory. The `plone` client is also configured to use the `groups` scope.
|
|
236
|
+
|
|
237
|
+

|
|
238
|
+
|
|
239
|
+

|
|
240
|
+
|
|
241
|
+
After that, go to the `Client Scopes` section and add the new scope to the client you are using with the plugin (for instance, `plone`).
|
|
242
|
+
|
|
243
|
+

|
|
244
|
+
|
|
245
|
+
Finally, in the plugin configuration, add `groups` to the scopes field.
|
|
246
|
+
|
|
247
|
+
In the `Allowed groups` field, you can add the groups that are allowed to log in. For example, in this repository, you could set `Foundation Members`. Users who are not in this group will not be able to log in.
|
|
248
|
+
|
|
216
249
|
## Technical Decisions
|
|
217
250
|
|
|
218
251
|
### Usage of sessions in the login process
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Generated from:
|
|
2
|
+
# https://github.com/plone/meta/tree/main/config/default
|
|
3
|
+
# See the inline comments on how to expand/tweak this configuration file
|
|
4
|
+
version: 2
|
|
5
|
+
updates:
|
|
6
|
+
|
|
7
|
+
- package-ecosystem: "github-actions"
|
|
8
|
+
directory: "/"
|
|
9
|
+
schedule:
|
|
10
|
+
# Check for updates to GitHub Actions every week
|
|
11
|
+
interval: "weekly"
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
### Defensive settings for make:
|
|
2
|
+
# https://tech.davis-hansson.com/p/make/
|
|
3
|
+
SHELL:=bash
|
|
4
|
+
.ONESHELL:
|
|
5
|
+
.SHELLFLAGS:=-xeu -o pipefail -O inherit_errexit -c
|
|
6
|
+
.SILENT:
|
|
7
|
+
.DELETE_ON_ERROR:
|
|
8
|
+
MAKEFLAGS+=--warn-undefined-variables
|
|
9
|
+
MAKEFLAGS+=--no-builtin-rules
|
|
10
|
+
|
|
11
|
+
# Python checks
|
|
12
|
+
UV?=uv
|
|
13
|
+
|
|
14
|
+
# installed?
|
|
15
|
+
ifeq (, $(shell which $(UV) ))
|
|
16
|
+
$(error "UV=$(UV) not found in $(PATH)")
|
|
17
|
+
endif
|
|
18
|
+
|
|
19
|
+
DOCS_FOLDER=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
|
|
20
|
+
|
|
21
|
+
VENV_FOLDER=$(DOCS_FOLDER)/.venv
|
|
22
|
+
BIN_FOLDER=$(VENV_FOLDER)/bin
|
|
23
|
+
|
|
24
|
+
# Sphinx variables
|
|
25
|
+
# You can set these variables from the command line.
|
|
26
|
+
SPHINXOPTS ?=
|
|
27
|
+
VALEOPTS ?=
|
|
28
|
+
# Internal variables.
|
|
29
|
+
BUILDDIR = $(DOCS_FOLDER)/_build/
|
|
30
|
+
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(SPHINXOPTS) .
|
|
31
|
+
VALEFILES := $(shell find $(DOCS_FOLDER) -type f -name "*.md" -print)
|
|
32
|
+
|
|
33
|
+
# We like colors
|
|
34
|
+
# From: https://coderwall.com/p/izxssa/colored-makefile-for-golang-projects
|
|
35
|
+
RED=`tput setaf 1`
|
|
36
|
+
GREEN=`tput setaf 2`
|
|
37
|
+
RESET=`tput sgr0`
|
|
38
|
+
YELLOW=`tput setaf 3`
|
|
39
|
+
|
|
40
|
+
.PHONY: all
|
|
41
|
+
all: install
|
|
42
|
+
|
|
43
|
+
# Add the following 'help' target to your Makefile
|
|
44
|
+
# And add help text after each target name starting with '\#\#'
|
|
45
|
+
.PHONY: help
|
|
46
|
+
help: ## This help message
|
|
47
|
+
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
|
|
48
|
+
|
|
49
|
+
$(VENV_FOLDER): ## Install dependencies
|
|
50
|
+
@echo "$(GREEN)==> Install environment$(RESET)"
|
|
51
|
+
@uv sync
|
|
52
|
+
|
|
53
|
+
.PHONY: install
|
|
54
|
+
install: $(VENV_FOLDER) ## Install dependencies
|
|
55
|
+
|
|
56
|
+
.PHONY: sync
|
|
57
|
+
sync: ## Install dependencies
|
|
58
|
+
@echo "$(GREEN)==> Sync environment$(RESET)"
|
|
59
|
+
@uv sync
|
|
60
|
+
|
|
61
|
+
.PHONY: clean
|
|
62
|
+
clean: ## Clean current and legacy docs build directories, and Python virtual environment
|
|
63
|
+
rm -rf $(VENV_FOLDER) .python-version
|
|
64
|
+
rm -rf $(BUILDDIR)
|
|
65
|
+
|
|
66
|
+
.PHONY: html
|
|
67
|
+
html: $(VENV_FOLDER) ## Build html
|
|
68
|
+
@uv run sphinx-build -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
|
69
|
+
@echo
|
|
70
|
+
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
|
71
|
+
|
|
72
|
+
.PHONY: build
|
|
73
|
+
build: html ## Build html
|
|
74
|
+
|
|
75
|
+
.PHONY: livehtml
|
|
76
|
+
livehtml: $(VENV_FOLDER) ## Rebuild Sphinx documentation on changes, with live-reload in the browser
|
|
77
|
+
@uv run sphinx-autobuild --ignore "*.swp" -b html . "$(BUILDDIR)/html" $(SPHINXOPTS)
|
|
78
|
+
|
|
79
|
+
.PHONY: linkcheck
|
|
80
|
+
linkcheck: $(VENV_FOLDER) ## Run linkcheck
|
|
81
|
+
@uv run sphinxbuild-b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
|
|
82
|
+
@echo
|
|
83
|
+
@echo "Link check complete; look for any errors in the above output " \
|
|
84
|
+
"or in $(BUILDDIR)/linkcheck/ ."
|
|
85
|
+
|
|
86
|
+
.PHONY: linkcheckbroken
|
|
87
|
+
linkcheckbroken: $(VENV_FOLDER) ## Run linkcheck and show only broken links
|
|
88
|
+
@uv run sphinxbuild-b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck | GREP_COLORS='0;31' grep -wi "broken\|redirect" --color=always | GREP_COLORS='0;31' grep -vi "https://github.com/plone/volto/issues/" --color=always && if test $$? -eq 0; then exit 1; fi || test $$? -ne 0
|
|
89
|
+
|
|
90
|
+
.PHONY: vale
|
|
91
|
+
vale: $(VENV_FOLDER) ## Install (once) and run Vale style, grammar, and spell checks
|
|
92
|
+
@uv run vale sync
|
|
93
|
+
@uv run vale --no-wrap $(VALEOPTS) $(VALEFILES)
|
|
94
|
+
@echo
|
|
95
|
+
@echo "Vale is finished; look for any errors in the above output."
|
|
96
|
+
|
|
97
|
+
.PHONY: rtd-pr-preview
|
|
98
|
+
rtd-pr-preview: ## Build previews of pull requests that have documentation changes on Read the Docs via CI
|
|
99
|
+
@pip install uv
|
|
100
|
+
@uv sync
|
|
101
|
+
@uv run sphinx-build -b html $(ALLSPHINXOPTS) ${READTHEDOCS_OUTPUT}/html/
|
|
102
|
+
|
|
103
|
+
.PHONY: rtd-build
|
|
104
|
+
rtd-build: ## Build Volto Light Theme docs on RTD
|
|
105
|
+
@pip install uv
|
|
106
|
+
@uv sync
|
|
107
|
+
@uv run sphinx-build -b html $(ALLSPHINXOPTS) ${READTHEDOCS_OUTPUT}/html/
|
|
Binary file
|
|
Binary file
|
|
Binary file
|