pas.plugins.oidc 2.0.0a1__tar.gz → 2.0.0b2__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 (98) hide show
  1. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/.pre-commit-config.yaml +6 -6
  2. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/CHANGES.md +38 -0
  3. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/MANIFEST.in +2 -0
  4. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/PKG-INFO +67 -18
  5. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/README.md +16 -13
  6. pas.plugins.oidc-2.0.0b2/docs/screenshot-settings.png +0 -0
  7. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/pyproject.toml +11 -4
  8. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/setup.py +14 -5
  9. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas/plugins/oidc/__init__.py +3 -1
  10. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas/plugins/oidc/configure.zcml +2 -7
  11. pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/controlpanel/classic.py +166 -0
  12. pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/controlpanel/configure.zcml +27 -0
  13. pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/controlpanel/deserializer.py +80 -0
  14. pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/controlpanel/oidc.py +20 -0
  15. pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/controlpanel/serializer.py +45 -0
  16. pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/interfaces.py +124 -0
  17. pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/locales/de/LC_MESSAGES/pas.plugins.oidc.mo +0 -0
  18. pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/locales/de/LC_MESSAGES/pas.plugins.oidc.po +167 -0
  19. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas/plugins/oidc/locales/en/LC_MESSAGES/pas.plugins.oidc.mo +0 -0
  20. pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/locales/en/LC_MESSAGES/pas.plugins.oidc.po +164 -0
  21. pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/locales/es/LC_MESSAGES/pas.plugins.oidc.mo +0 -0
  22. pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/locales/es/LC_MESSAGES/pas.plugins.oidc.po +169 -0
  23. pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/locales/pas.plugins.oidc.pot +171 -0
  24. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas/plugins/oidc/locales/update.py +1 -0
  25. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas/plugins/oidc/plugins.py +36 -8
  26. pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/profiles/default/controlpanel.xml +21 -0
  27. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas/plugins/oidc/profiles/default/metadata.xml +1 -1
  28. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas/plugins/oidc/services/login/get.py +13 -8
  29. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas/plugins/oidc/services/oidc/oidc.py +8 -6
  30. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas/plugins/oidc/setuphandlers.py +5 -13
  31. pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/upgrades/__init__.py +0 -0
  32. pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/upgrades/configure.zcml +25 -0
  33. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas/plugins/oidc/utils.py +9 -4
  34. pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/www/oidcPluginForm.zpt +66 -0
  35. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas.plugins.oidc.egg-info/PKG-INFO +67 -18
  36. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas.plugins.oidc.egg-info/SOURCES.txt +16 -0
  37. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas.plugins.oidc.egg-info/requires.txt +9 -1
  38. pas.plugins.oidc-2.0.0b2/tests/controlpanel/conftest.py +59 -0
  39. pas.plugins.oidc-2.0.0b2/tests/controlpanel/test_controlpanel_api.py +24 -0
  40. pas.plugins.oidc-2.0.0b2/tests/functional/test_controlpanel_classic.py +19 -0
  41. pas.plugins.oidc-2.0.0b2/tests/keycloak/import/.gitkeep +0 -0
  42. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/tests/keycloak/import/plone-realm.json +255 -23
  43. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/tests/keycloak/import/plone-test-realm.json +267 -24
  44. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/tests/services/conftest.py +12 -0
  45. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/tests/services/test_services_login_get.py +1 -1
  46. pas.plugins.oidc-2.0.0b2/tests/services/test_servides_login_get_multiple_plugins.py +33 -0
  47. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/tests/setup/test_setup_install.py +1 -1
  48. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/tests/utils/test_utils_flow.py +1 -1
  49. pas.plugins.oidc-2.0.0a1/docs/screenshot-settings.png +0 -0
  50. pas.plugins.oidc-2.0.0a1/src/pas/plugins/oidc/interfaces.py +0 -6
  51. pas.plugins.oidc-2.0.0a1/src/pas/plugins/oidc/locales/en/LC_MESSAGES/pas.plugins.oidc.po +0 -35
  52. pas.plugins.oidc-2.0.0a1/src/pas/plugins/oidc/locales/es/LC_MESSAGES/pas.plugins.oidc.mo +0 -0
  53. pas.plugins.oidc-2.0.0a1/src/pas/plugins/oidc/locales/es/LC_MESSAGES/pas.plugins.oidc.po +0 -39
  54. pas.plugins.oidc-2.0.0a1/src/pas/plugins/oidc/locales/pas.plugins.oidc.pot +0 -38
  55. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/.coveragerc +0 -0
  56. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/CONTRIBUTORS.md +0 -0
  57. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/LICENSE.GPL +0 -0
  58. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/LICENSE.md +0 -0
  59. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/Makefile +0 -0
  60. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/constraints.txt +0 -0
  61. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/docs/icon.png +0 -0
  62. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/instance.yaml +0 -0
  63. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/requirements-docs.txt +0 -0
  64. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/requirements.txt +0 -0
  65. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/setup.cfg +0 -0
  66. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas/__init__.py +0 -0
  67. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas/plugins/__init__.py +0 -0
  68. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas/plugins/oidc/browser/__init__.py +0 -0
  69. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas/plugins/oidc/browser/configure.zcml +0 -0
  70. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas/plugins/oidc/browser/view.py +0 -0
  71. {pas.plugins.oidc-2.0.0a1/src/pas/plugins/oidc/locales → pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/controlpanel}/__init__.py +0 -0
  72. {pas.plugins.oidc-2.0.0a1/src/pas/plugins/oidc/services → pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/locales}/__init__.py +0 -0
  73. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas/plugins/oidc/profiles/default/browserlayer.xml +0 -0
  74. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas/plugins/oidc/profiles/uninstall/browserlayer.xml +0 -0
  75. {pas.plugins.oidc-2.0.0a1/src/pas/plugins/oidc/services/login → pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/services}/__init__.py +0 -0
  76. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas/plugins/oidc/services/configure.zcml +0 -0
  77. {pas.plugins.oidc-2.0.0a1/src/pas/plugins/oidc/services/oidc → pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/services/login}/__init__.py +0 -0
  78. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas/plugins/oidc/services/login/configure.zcml +0 -0
  79. /pas.plugins.oidc-2.0.0a1/tests/keycloak/import/.gitkeep → /pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/services/oidc/__init__.py +0 -0
  80. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas/plugins/oidc/services/oidc/configure.zcml +0 -0
  81. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas/plugins/oidc/session.py +0 -0
  82. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas/plugins/oidc/testing.py +0 -0
  83. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas.plugins.oidc.egg-info/dependency_links.txt +0 -0
  84. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas.plugins.oidc.egg-info/entry_points.txt +0 -0
  85. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas.plugins.oidc.egg-info/namespace_packages.txt +0 -0
  86. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas.plugins.oidc.egg-info/not-zip-safe +0 -0
  87. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/src/pas.plugins.oidc.egg-info/top_level.txt +0 -0
  88. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/tests/conftest.py +0 -0
  89. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/tests/docker-compose.yml +0 -0
  90. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/tests/functional/conftest.py +0 -0
  91. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/tests/functional/test_functional.py +0 -0
  92. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/tests/keycloak/Dockerfile +0 -0
  93. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/tests/plugin/test_plugin.py +0 -0
  94. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/tests/services/test_services_oidc_get.py +0 -0
  95. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/tests/services/test_services_oidc_post.py +0 -0
  96. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/tests/setup/test_setup_uninstall.py +0 -0
  97. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/tests/utils/test_utils_str.py +0 -0
  98. {pas.plugins.oidc-2.0.0a1 → pas.plugins.oidc-2.0.0b2}/tests/utils/test_utils_url.py +0 -0
@@ -1,5 +1,5 @@
1
1
  # Generated from:
2
- # https://github.com/plone/meta/tree/master/config/default
2
+ # https://github.com/plone/meta/tree/main/config/default
3
3
  # See the inline comments on how to expand/tweak this configuration file
4
4
  ci:
5
5
  autofix_prs: false
@@ -7,16 +7,16 @@ ci:
7
7
 
8
8
  repos:
9
9
  - repo: https://github.com/asottile/pyupgrade
10
- rev: v3.15.0
10
+ rev: v3.15.2
11
11
  hooks:
12
12
  - id: pyupgrade
13
13
  args: [--py38-plus]
14
14
  - repo: https://github.com/pycqa/isort
15
- rev: 5.12.0
15
+ rev: 5.13.2
16
16
  hooks:
17
17
  - id: isort
18
18
  - repo: https://github.com/psf/black
19
- rev: 23.10.1
19
+ rev: 24.4.2
20
20
  hooks:
21
21
  - id: black
22
22
  - repo: https://github.com/collective/zpretty
@@ -32,7 +32,7 @@ repos:
32
32
  # """
33
33
  ##
34
34
  - repo: https://github.com/PyCQA/flake8
35
- rev: 6.1.0
35
+ rev: 7.0.0
36
36
  hooks:
37
37
  - id: flake8
38
38
 
@@ -71,7 +71,7 @@ repos:
71
71
  - id: check-python-versions
72
72
  args: ['--only', 'setup.py,pyproject.toml']
73
73
  - repo: https://github.com/collective/i18ndude
74
- rev: "6.1.0"
74
+ rev: "6.2.0"
75
75
  hooks:
76
76
  - id: i18ndude
77
77
 
@@ -9,6 +9,44 @@
9
9
 
10
10
  <!-- towncrier release notes start -->
11
11
 
12
+ ## 2.0.0b2 (2024-12-09)
13
+
14
+
15
+ ### New features:
16
+
17
+ - Update the Deutsch translation [macagua] [#60](https://github.com/collective/pas.plugins.oidc/issues/60)
18
+ - Implement control panel to configure pas.plugins.oidc [@ericof] [#65](https://github.com/collective/pas.plugins.oidc/issues/65)
19
+
20
+
21
+ ### Documentation:
22
+
23
+ - Fixed port numbers on README file [macagua] [#51](https://github.com/collective/pas.plugins.oidc/issues/51)
24
+
25
+
26
+ ## 2.0.0b1 (2024-06-25)
27
+
28
+
29
+ ### New features:
30
+
31
+ - Added Deutsch translation
32
+ [@macagua] [#45](https://github.com/collective/pas.plugins.oidc/issues/45)
33
+ - Allow multiple instances of OIDC plugin in a given Plone site @erral [#48](https://github.com/collective/pas.plugins.oidc/issues/48)
34
+ - Notify user events on creation and authentication. [@Arkusm][@ericof] [#53](https://github.com/collective/pas.plugins.oidc/issues/53)
35
+ - Updated the latest .po templates for translate
36
+ Updated Spanish translation
37
+ [@macagua] [#55](https://github.com/collective/pas.plugins.oidc/issues/55)
38
+
39
+
40
+ ### Internal:
41
+
42
+ - Update configuration files @plone
43
+
44
+
45
+ ### Documentation:
46
+
47
+ - 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)
48
+
49
+
12
50
  ## 2.0.0a1 (2023-11-23)
13
51
 
14
52
 
@@ -10,4 +10,6 @@ recursive-include tests *.py
10
10
  recursive-include tests *.gitkeep
11
11
  recursive-include tests *.json
12
12
  recursive-include tests *.yml
13
+ recursive-exclude docs/_build *
14
+ recursive-exclude docs/ .DS_Store
13
15
  include tests/keycloak/Dockerfile
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pas.plugins.oidc
3
- Version: 2.0.0a1
4
- Summary: An add-on for Plone
3
+ Version: 2.0.0b2
4
+ Summary: OIDC support for Plone sites
5
5
  Home-page: https://github.com/collective/pas.plugins.oidc
6
6
  Author: mamico
7
7
  Author-email: mauro.amico@gmail.com
@@ -9,8 +9,8 @@ License: GPL version 2
9
9
  Project-URL: PyPI, https://pypi.python.org/pypi/pas.plugins.oidc
10
10
  Project-URL: Source, https://github.com/collective/pas.plugins.oidc
11
11
  Project-URL: Tracker, https://github.com/collective/pas.plugins.oidc/issues
12
- Keywords: Python Plone CMS
13
- Classifier: Development Status :: 3 - Alpha
12
+ Keywords: Python Plone CMS PAS Authentication OAuth OIDC
13
+ Classifier: Development Status :: 4 - Beta
14
14
  Classifier: Environment :: Web Environment
15
15
  Classifier: Framework :: Plone
16
16
  Classifier: Framework :: Plone :: Addon
@@ -28,13 +28,21 @@ License-File: LICENSE.GPL
28
28
  License-File: LICENSE.md
29
29
  Requires-Dist: setuptools
30
30
  Requires-Dist: Plone
31
+ Requires-Dist: Zope
32
+ Requires-Dist: Products.CMFCore
31
33
  Requires-Dist: plone.api
34
+ Requires-Dist: plone.app.registry
35
+ Requires-Dist: plone.base
36
+ Requires-Dist: plone.protect
32
37
  Requires-Dist: plone.restapi>=8.34.0
33
38
  Requires-Dist: oic
39
+ Requires-Dist: z3c.form
34
40
  Provides-Extra: test
35
- Requires-Dist: gocept.pytestlayer; extra == "test"
41
+ Requires-Dist: zope.pytestlayer; extra == "test"
42
+ Requires-Dist: plone.app.contenttypes; extra == "test"
36
43
  Requires-Dist: plone.app.testing; extra == "test"
37
44
  Requires-Dist: plone.restapi[test]; extra == "test"
45
+ Requires-Dist: plone.testing; extra == "test"
38
46
  Requires-Dist: pytest-cov; extra == "test"
39
47
  Requires-Dist: pytest-plone>=0.2.0; extra == "test"
40
48
  Requires-Dist: pytest-docker; extra == "test"
@@ -46,7 +54,7 @@ Requires-Dist: pytest-mock; extra == "test"
46
54
  Requires-Dist: requests-mock; extra == "test"
47
55
 
48
56
 
49
- <div align="center"><img alt="logo" src="./docs/icon.png" width="70" /></div>
57
+ <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>
50
58
 
51
59
  <h1 align="center">pas.plugins.oidc</h1>
52
60
 
@@ -78,10 +86,13 @@ OAuth 2.0 should work as well because OpenID Connect is built on top of this pro
78
86
  - PAS plugin, although currently no interfaces are activated.
79
87
  - Three browser views for this PAS plugin, which are the main interaction with the outside world.
80
88
 
89
+ ### Group Enumeration
90
+
91
+ If you need to support group enumeration from a Keycloak server, we recommend installing the package [pas.plugins.keycloakgroups](https://pypi.org/project/pas.plugins.keycloakgroups/).
81
92
 
82
93
  ## Installation
83
94
 
84
- This package supports Plone sites using Volto and ClassicUI.
95
+ This package supports Plone sites using Volto and Classic UI.
85
96
 
86
97
  For proper Volto support, the requirements are:
87
98
 
@@ -129,7 +140,7 @@ When using this plugin with a [Volto frontend](https://6.docs.plone.org/volto/in
129
140
  * **Login URL**: `<Path to your Plone site>`/login
130
141
  * **Logout URL**: `<Path to your Plone site>`/logout
131
142
 
132
- Also, on the OpenID provider, configure the Redirect URL as **`<Path to your Plone site>`/login_oidc/oidc**.
143
+ Also, on the OpenID provider, configure the Redirect URL as **`<Path to your Plone site>`/login-oidc/oidc**.
133
144
 
134
145
 
135
146
  #### Classic UI
@@ -209,9 +220,9 @@ So, for Keycloak, it does not matter if we use the default or legacy mode if the
209
220
  *Notes:*
210
221
 
211
222
  * If legacy `redirect_uri` parameter is disabled in Keycloak, this is the default since version 18 of Keycloak according
212
- to this comment in *Starck Overflow*: https://stackoverflow.com/a/72142887.
223
+ to this comment in *Stack Overflow*: https://stackoverflow.com/a/72142887.
213
224
  * The plugin will work only if the `Use deprecated redirect_uri for logout url(/Plone/acl_users/oidc/logout)`
214
- option is un-checked at the plugin properties at http://localhost:8081/Plone/acl_users/oidc/manage_propertiesForm.
225
+ option is un-checked at the plugin properties at http://localhost:8080/Plone/acl_users/oidc/manage_propertiesForm.
215
226
 
216
227
  #### Additional Documentation
217
228
 
@@ -223,9 +234,9 @@ Specifically, here we will use a Docker image, so follow the instructions on how
223
234
  * Make sure **pas.plugins.oidc** is installed.
224
235
  * Start Plone and create a Plone site with id Plone.
225
236
  * In the Add-ons control panel, install `pas.plugins.oidc`.
226
- * In the ZMI go to the plugin properties at http://localhost:8081/Plone/acl_users/oidc/manage_propertiesForm
237
+ * In the ZMI go to the plugin properties at http://localhost:8080/Plone/acl_users/oidc/manage_propertiesForm
227
238
  * Set these properties:
228
- * `OIDC/Oauth2 Issuer`: http://127.0.0.1:8081/realms/plone/
239
+ * `OIDC/Oauth2 Issuer`: http://127.0.0.1:8180/realms/plone/
229
240
  * `Client ID`: *plone* (**Warning:** This property must match the `Client ID` you have set in Keycloak.)
230
241
  * `Client secret`: *12345678* (**Warning:** This property must match the `Client secret` you have get in Keycloak.)
231
242
  * `Use deprecated redirect_uri for logout url` checked. Use this if you need to run old versions of Keycloak.
@@ -239,14 +250,14 @@ Specifically, here we will use a Docker image, so follow the instructions on how
239
250
 
240
251
  See this screenshot:
241
252
 
242
- .. image:: docs/screenshot-settings.png
253
+ ![](https://raw.githubusercontent.com/collective/pas.plugins.oidc/main/docs/screenshot-settings.png "Setup Plone as a client")
243
254
 
244
255
  #### Login
245
256
 
246
- Go to the other browser, or logout as admin from [Keycloak Admin Console](http://localhost:8080/admin).
257
+ Go to the other browser, or logout as admin from [Keycloak Admin Console](http://127.0.0.1:8180/admin).
247
258
  Currently, the Plone login form is unchanged.
248
259
 
249
- Instead, for testing go to the login page of the plugin: http://localhost:8081/Plone/acl_users/oidc/login,
260
+ Instead, for testing go to the login page of the plugin: http://localhost:8080/Plone/acl_users/oidc/login,
250
261
  this will take you to Keycloak to login, and then return. You should now be logged in to Plone, and see the
251
262
  *full name* and *email*, if you have set this in Keycloak.
252
263
 
@@ -255,7 +266,7 @@ this will take you to Keycloak to login, and then return. You should now be logg
255
266
  If the login did work as expected you can try to Plone logout.
256
267
  Currently, the Plone logout form is unchanged.
257
268
 
258
- Instead, for testing go to the logout page of the plugin: http://localhost:8081/Plone/acl_users/oidc/logout,
269
+ Instead, for testing go to the logout page of the plugin: http://localhost:8080/Plone/acl_users/oidc/logout,
259
270
  this will take you to Keycloak to logout, and then return to the post-logout redirect URL.
260
271
 
261
272
  ## Technical Decisions
@@ -268,8 +279,8 @@ and comes back from there.
268
279
  The plugin has 2 ways of working with sessions:
269
280
 
270
281
  - Use the Zope Session Management: if the `Use Zope session data manager` option in the plugin configuration is enabled,
271
- the plugin will use the sessioning configuration configured in Zope. To do so we advise using [Products.mcdutils](https://pypi.org/project/Products.mcdutils/)
272
- to save the session data in a memcached based storage. Otherwise Zope will try to use ZODB based sessioning
282
+ the plugin will use the session configuration configured in Zope. To do so we advise using [Products.mcdutils](https://pypi.org/project/Products.mcdutils/)
283
+ to save the session data in a memcached based storage. Otherwise, Zope will try to use a ZODB-based session
273
284
  which has shown several problems in the past.
274
285
 
275
286
  - Use the cookie-based session management: if the `Use Zope session data manager` option in the plugin
@@ -399,6 +410,44 @@ The project is licensed under the GPLv2.
399
410
 
400
411
  <!-- towncrier release notes start -->
401
412
 
413
+ ## 2.0.0b2 (2024-12-09)
414
+
415
+
416
+ ### New features:
417
+
418
+ - Update the Deutsch translation [macagua] [#60](https://github.com/collective/pas.plugins.oidc/issues/60)
419
+ - Implement control panel to configure pas.plugins.oidc [@ericof] [#65](https://github.com/collective/pas.plugins.oidc/issues/65)
420
+
421
+
422
+ ### Documentation:
423
+
424
+ - Fixed port numbers on README file [macagua] [#51](https://github.com/collective/pas.plugins.oidc/issues/51)
425
+
426
+
427
+ ## 2.0.0b1 (2024-06-25)
428
+
429
+
430
+ ### New features:
431
+
432
+ - Added Deutsch translation
433
+ [@macagua] [#45](https://github.com/collective/pas.plugins.oidc/issues/45)
434
+ - Allow multiple instances of OIDC plugin in a given Plone site @erral [#48](https://github.com/collective/pas.plugins.oidc/issues/48)
435
+ - Notify user events on creation and authentication. [@Arkusm][@ericof] [#53](https://github.com/collective/pas.plugins.oidc/issues/53)
436
+ - Updated the latest .po templates for translate
437
+ Updated Spanish translation
438
+ [@macagua] [#55](https://github.com/collective/pas.plugins.oidc/issues/55)
439
+
440
+
441
+ ### Internal:
442
+
443
+ - Update configuration files @plone
444
+
445
+
446
+ ### Documentation:
447
+
448
+ - 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)
449
+
450
+
402
451
  ## 2.0.0a1 (2023-11-23)
403
452
 
404
453
 
@@ -1,4 +1,4 @@
1
- <div align="center"><img alt="logo" src="./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/icon.png" width="70" /></div>
2
2
 
3
3
  <h1 align="center">pas.plugins.oidc</h1>
4
4
 
@@ -30,10 +30,13 @@ OAuth 2.0 should work as well because OpenID Connect is built on top of this pro
30
30
  - PAS plugin, although currently no interfaces are activated.
31
31
  - Three browser views for this PAS plugin, which are the main interaction with the outside world.
32
32
 
33
+ ### Group Enumeration
34
+
35
+ If you need to support group enumeration from a Keycloak server, we recommend installing the package [pas.plugins.keycloakgroups](https://pypi.org/project/pas.plugins.keycloakgroups/).
33
36
 
34
37
  ## Installation
35
38
 
36
- This package supports Plone sites using Volto and ClassicUI.
39
+ This package supports Plone sites using Volto and Classic UI.
37
40
 
38
41
  For proper Volto support, the requirements are:
39
42
 
@@ -81,7 +84,7 @@ When using this plugin with a [Volto frontend](https://6.docs.plone.org/volto/in
81
84
  * **Login URL**: `<Path to your Plone site>`/login
82
85
  * **Logout URL**: `<Path to your Plone site>`/logout
83
86
 
84
- Also, on the OpenID provider, configure the Redirect URL as **`<Path to your Plone site>`/login_oidc/oidc**.
87
+ Also, on the OpenID provider, configure the Redirect URL as **`<Path to your Plone site>`/login-oidc/oidc**.
85
88
 
86
89
 
87
90
  #### Classic UI
@@ -161,9 +164,9 @@ So, for Keycloak, it does not matter if we use the default or legacy mode if the
161
164
  *Notes:*
162
165
 
163
166
  * If legacy `redirect_uri` parameter is disabled in Keycloak, this is the default since version 18 of Keycloak according
164
- to this comment in *Starck Overflow*: https://stackoverflow.com/a/72142887.
167
+ to this comment in *Stack Overflow*: https://stackoverflow.com/a/72142887.
165
168
  * The plugin will work only if the `Use deprecated redirect_uri for logout url(/Plone/acl_users/oidc/logout)`
166
- option is un-checked at the plugin properties at http://localhost:8081/Plone/acl_users/oidc/manage_propertiesForm.
169
+ option is un-checked at the plugin properties at http://localhost:8080/Plone/acl_users/oidc/manage_propertiesForm.
167
170
 
168
171
  #### Additional Documentation
169
172
 
@@ -175,9 +178,9 @@ Specifically, here we will use a Docker image, so follow the instructions on how
175
178
  * Make sure **pas.plugins.oidc** is installed.
176
179
  * Start Plone and create a Plone site with id Plone.
177
180
  * In the Add-ons control panel, install `pas.plugins.oidc`.
178
- * In the ZMI go to the plugin properties at http://localhost:8081/Plone/acl_users/oidc/manage_propertiesForm
181
+ * In the ZMI go to the plugin properties at http://localhost:8080/Plone/acl_users/oidc/manage_propertiesForm
179
182
  * Set these properties:
180
- * `OIDC/Oauth2 Issuer`: http://127.0.0.1:8081/realms/plone/
183
+ * `OIDC/Oauth2 Issuer`: http://127.0.0.1:8180/realms/plone/
181
184
  * `Client ID`: *plone* (**Warning:** This property must match the `Client ID` you have set in Keycloak.)
182
185
  * `Client secret`: *12345678* (**Warning:** This property must match the `Client secret` you have get in Keycloak.)
183
186
  * `Use deprecated redirect_uri for logout url` checked. Use this if you need to run old versions of Keycloak.
@@ -191,14 +194,14 @@ Specifically, here we will use a Docker image, so follow the instructions on how
191
194
 
192
195
  See this screenshot:
193
196
 
194
- .. image:: docs/screenshot-settings.png
197
+ ![](https://raw.githubusercontent.com/collective/pas.plugins.oidc/main/docs/screenshot-settings.png "Setup Plone as a client")
195
198
 
196
199
  #### Login
197
200
 
198
- Go to the other browser, or logout as admin from [Keycloak Admin Console](http://localhost:8080/admin).
201
+ Go to the other browser, or logout as admin from [Keycloak Admin Console](http://127.0.0.1:8180/admin).
199
202
  Currently, the Plone login form is unchanged.
200
203
 
201
- Instead, for testing go to the login page of the plugin: http://localhost:8081/Plone/acl_users/oidc/login,
204
+ Instead, for testing go to the login page of the plugin: http://localhost:8080/Plone/acl_users/oidc/login,
202
205
  this will take you to Keycloak to login, and then return. You should now be logged in to Plone, and see the
203
206
  *full name* and *email*, if you have set this in Keycloak.
204
207
 
@@ -207,7 +210,7 @@ this will take you to Keycloak to login, and then return. You should now be logg
207
210
  If the login did work as expected you can try to Plone logout.
208
211
  Currently, the Plone logout form is unchanged.
209
212
 
210
- Instead, for testing go to the logout page of the plugin: http://localhost:8081/Plone/acl_users/oidc/logout,
213
+ Instead, for testing go to the logout page of the plugin: http://localhost:8080/Plone/acl_users/oidc/logout,
211
214
  this will take you to Keycloak to logout, and then return to the post-logout redirect URL.
212
215
 
213
216
  ## Technical Decisions
@@ -220,8 +223,8 @@ and comes back from there.
220
223
  The plugin has 2 ways of working with sessions:
221
224
 
222
225
  - Use the Zope Session Management: if the `Use Zope session data manager` option in the plugin configuration is enabled,
223
- the plugin will use the sessioning configuration configured in Zope. To do so we advise using [Products.mcdutils](https://pypi.org/project/Products.mcdutils/)
224
- to save the session data in a memcached based storage. Otherwise Zope will try to use ZODB based sessioning
226
+ the plugin will use the session configuration configured in Zope. To do so we advise using [Products.mcdutils](https://pypi.org/project/Products.mcdutils/)
227
+ to save the session data in a memcached based storage. Otherwise, Zope will try to use a ZODB-based session
225
228
  which has shown several problems in the past.
226
229
 
227
230
  - Use the cookie-based session management: if the `Use Zope session data manager` option in the plugin
@@ -1,5 +1,5 @@
1
1
  # Generated from:
2
- # https://github.com/plone/meta/tree/master/config/default
2
+ # https://github.com/plone/meta/tree/main/config/default
3
3
  # See the inline comments on how to expand/tweak this configuration file
4
4
  [build-system]
5
5
  requires = ["setuptools>=68.2"]
@@ -122,7 +122,7 @@ Zope = [
122
122
  'Products.CMFCore', 'Products.CMFDynamicViewFTI',
123
123
  ]
124
124
  python-dateutil = ['dateutil']
125
- ignore-packages = ['plone.restapi', 'plone.volto', 'zestreleaser.towncrier', 'zest.releaser', 'pytest', 'pytest-cov', 'pytest-plone', 'pytest-docker', 'pytest-vcr', 'pytest-mock', 'gocept.pytestlayer', 'requests-mock', 'vcrpy']
125
+ ignore-packages = ['plone.restapi', 'plone.volto', 'zestreleaser.towncrier', 'zest.releaser', 'pytest', 'pytest-cov', 'pytest-plone', 'pytest-docker', 'pytest-vcr', 'pytest-mock', 'zope.pytestlayer', 'requests-mock', 'vcrpy']
126
126
  Plone = ['Products.CMFPlone', 'Products.CMFCore', 'Products.GenericSetup', 'Products.PluggableAuthService', 'Products.PlonePAS']
127
127
 
128
128
  ##
@@ -138,16 +138,18 @@ Plone = ['Products.CMFPlone', 'Products.CMFCore', 'Products.GenericSetup', 'Prod
138
138
  [tool.check-manifest]
139
139
  ignore = [
140
140
  ".editorconfig",
141
+ ".flake8",
141
142
  ".meta.toml",
142
143
  ".pre-commit-config.yaml",
143
- "tox.ini",
144
- ".flake8",
144
+ "dependabot.yml",
145
145
  "mx.ini",
146
+ "tox.ini",
146
147
  "news/*",
147
148
  "constraints-mxdev.txt",
148
149
  "requirements-mxdev.txt",
149
150
 
150
151
  ]
152
+
151
153
  ##
152
154
  # Add extra configuration options in .meta.toml:
153
155
  # [pyproject]
@@ -155,6 +157,11 @@ ignore = [
155
157
  # "*.map.js",
156
158
  # "*.pyc",
157
159
  # """
160
+ # check_manifest_extra_lines = """
161
+ # ignore-bad-ideas = [
162
+ # "some/test/file/PKG-INFO",
163
+ # ]
164
+ # """
158
165
  ##
159
166
 
160
167
  [tool.coverage.run]
@@ -1,4 +1,5 @@
1
1
  """Installer for the pas.plugins.oidc package."""
2
+
2
3
  from pathlib import Path
3
4
  from setuptools import find_packages
4
5
  from setuptools import setup
@@ -13,13 +14,13 @@ long_description = f"""
13
14
 
14
15
  setup(
15
16
  name="pas.plugins.oidc",
16
- version="2.0.0a1",
17
- description="An add-on for Plone",
17
+ version="2.0.0b2",
18
+ description="OIDC support for Plone sites",
18
19
  long_description=long_description,
19
20
  long_description_content_type="text/markdown",
20
21
  # Get more from https://pypi.org/classifiers/
21
22
  classifiers=[
22
- "Development Status :: 3 - Alpha",
23
+ "Development Status :: 4 - Beta",
23
24
  "Environment :: Web Environment",
24
25
  "Framework :: Plone",
25
26
  "Framework :: Plone :: Addon",
@@ -32,7 +33,7 @@ setup(
32
33
  "Operating System :: OS Independent",
33
34
  "License :: OSI Approved :: GNU General Public License v2 (GPLv2)",
34
35
  ],
35
- keywords="Python Plone CMS",
36
+ keywords="Python Plone CMS PAS Authentication OAuth OIDC",
36
37
  author="mamico",
37
38
  author_email="mauro.amico@gmail.com",
38
39
  url="https://github.com/collective/pas.plugins.oidc",
@@ -52,15 +53,23 @@ setup(
52
53
  install_requires=[
53
54
  "setuptools",
54
55
  "Plone",
56
+ "Zope",
57
+ "Products.CMFCore",
55
58
  "plone.api",
59
+ "plone.app.registry",
60
+ "plone.base",
61
+ "plone.protect",
56
62
  "plone.restapi>=8.34.0",
57
63
  "oic",
64
+ "z3c.form",
58
65
  ],
59
66
  extras_require={
60
67
  "test": [
61
- "gocept.pytestlayer",
68
+ "zope.pytestlayer",
69
+ "plone.app.contenttypes",
62
70
  "plone.app.testing",
63
71
  "plone.restapi[test]",
72
+ "plone.testing",
64
73
  "pytest-cov",
65
74
  "pytest-plone>=0.2.0",
66
75
  "pytest-docker",
@@ -1,4 +1,5 @@
1
1
  """Init and utils."""
2
+
2
3
  from AccessControl.Permissions import manage_users as ManageUsers
3
4
  from Products.PluggableAuthService import PluggableAuthService as PAS
4
5
  from zope.i18nmessageid import MessageFactory
@@ -23,5 +24,6 @@ def initialize(context): # pragma: no cover
23
24
  context.registerClass(
24
25
  plugins.OIDCPlugin,
25
26
  permission=ManageUsers,
26
- constructors=(plugins.add_oidc_plugin,),
27
+ constructors=(plugins.manage_addOIDCPluginForm, plugins.addOIDCPlugin),
28
+ visibility=None,
27
29
  )
@@ -20,6 +20,7 @@
20
20
  <i18n:registerTranslations directory="locales" />
21
21
 
22
22
  <include package=".browser" />
23
+ <include package=".controlpanel" />
23
24
  <include package=".services" />
24
25
 
25
26
  <genericsetup:registerProfile
@@ -40,13 +41,7 @@
40
41
  post_handler=".setuphandlers.uninstall"
41
42
  />
42
43
 
43
- <genericsetup:upgradeStep
44
- title="Activate challenge plugin"
45
- profile="pas.plugins.oidc:default"
46
- source="1000"
47
- destination="1001"
48
- handler=".setuphandlers.activate_challenge_plugin"
49
- />
44
+ <include package=".upgrades" />
50
45
 
51
46
  <utility
52
47
  factory=".setuphandlers.HiddenProfiles"