pas.plugins.oidc 2.0.0b2__tar.gz → 2.0.0b3__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 (94) hide show
  1. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/CHANGES.md +13 -0
  2. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/PKG-INFO +16 -2
  3. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/setup.py +3 -2
  4. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/controlpanel/classic.py +8 -0
  5. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/interfaces.py +7 -0
  6. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/plugins.py +43 -1
  7. pas.plugins.oidc-2.0.0b3/src/pas/plugins/oidc/services/login/configure.zcml +11 -0
  8. pas.plugins.oidc-2.0.0b3/src/pas/plugins/oidc/services/login/get.py +29 -0
  9. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/utils.py +2 -0
  10. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas.plugins.oidc.egg-info/PKG-INFO +16 -2
  11. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas.plugins.oidc.egg-info/requires.txt +2 -1
  12. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/services/conftest.py +1 -0
  13. pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/services/login/configure.zcml +0 -15
  14. pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/services/login/get.py +0 -42
  15. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/.coveragerc +0 -0
  16. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/.pre-commit-config.yaml +0 -0
  17. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/CONTRIBUTORS.md +0 -0
  18. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/LICENSE.GPL +0 -0
  19. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/LICENSE.md +0 -0
  20. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/MANIFEST.in +0 -0
  21. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/Makefile +0 -0
  22. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/README.md +0 -0
  23. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/constraints.txt +0 -0
  24. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/docs/icon.png +0 -0
  25. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/docs/screenshot-settings.png +0 -0
  26. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/instance.yaml +0 -0
  27. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/pyproject.toml +0 -0
  28. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/requirements-docs.txt +0 -0
  29. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/requirements.txt +0 -0
  30. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/setup.cfg +0 -0
  31. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/__init__.py +0 -0
  32. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/__init__.py +0 -0
  33. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/__init__.py +0 -0
  34. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/browser/__init__.py +0 -0
  35. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/browser/configure.zcml +0 -0
  36. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/browser/view.py +0 -0
  37. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/configure.zcml +0 -0
  38. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/controlpanel/__init__.py +0 -0
  39. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/controlpanel/configure.zcml +0 -0
  40. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/controlpanel/deserializer.py +0 -0
  41. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/controlpanel/oidc.py +0 -0
  42. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/controlpanel/serializer.py +0 -0
  43. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/locales/__init__.py +0 -0
  44. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/locales/de/LC_MESSAGES/pas.plugins.oidc.mo +0 -0
  45. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/locales/de/LC_MESSAGES/pas.plugins.oidc.po +0 -0
  46. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/locales/en/LC_MESSAGES/pas.plugins.oidc.mo +0 -0
  47. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/locales/en/LC_MESSAGES/pas.plugins.oidc.po +0 -0
  48. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/locales/es/LC_MESSAGES/pas.plugins.oidc.mo +0 -0
  49. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/locales/es/LC_MESSAGES/pas.plugins.oidc.po +0 -0
  50. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/locales/pas.plugins.oidc.pot +0 -0
  51. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/locales/update.py +0 -0
  52. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/profiles/default/browserlayer.xml +0 -0
  53. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/profiles/default/controlpanel.xml +0 -0
  54. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/profiles/default/metadata.xml +0 -0
  55. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/profiles/uninstall/browserlayer.xml +0 -0
  56. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/services/__init__.py +0 -0
  57. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/services/configure.zcml +0 -0
  58. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/services/login/__init__.py +0 -0
  59. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/services/oidc/__init__.py +0 -0
  60. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/services/oidc/configure.zcml +0 -0
  61. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/services/oidc/oidc.py +0 -0
  62. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/session.py +0 -0
  63. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/setuphandlers.py +0 -0
  64. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/testing.py +0 -0
  65. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/upgrades/__init__.py +0 -0
  66. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/upgrades/configure.zcml +0 -0
  67. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/www/oidcPluginForm.zpt +0 -0
  68. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas.plugins.oidc.egg-info/SOURCES.txt +0 -0
  69. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas.plugins.oidc.egg-info/dependency_links.txt +0 -0
  70. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas.plugins.oidc.egg-info/entry_points.txt +0 -0
  71. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas.plugins.oidc.egg-info/namespace_packages.txt +0 -0
  72. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas.plugins.oidc.egg-info/not-zip-safe +0 -0
  73. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas.plugins.oidc.egg-info/top_level.txt +0 -0
  74. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/conftest.py +0 -0
  75. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/controlpanel/conftest.py +0 -0
  76. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/controlpanel/test_controlpanel_api.py +0 -0
  77. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/docker-compose.yml +0 -0
  78. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/functional/conftest.py +0 -0
  79. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/functional/test_controlpanel_classic.py +0 -0
  80. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/functional/test_functional.py +0 -0
  81. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/keycloak/Dockerfile +0 -0
  82. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/keycloak/import/.gitkeep +0 -0
  83. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/keycloak/import/plone-realm.json +0 -0
  84. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/keycloak/import/plone-test-realm.json +0 -0
  85. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/plugin/test_plugin.py +0 -0
  86. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/services/test_services_login_get.py +0 -0
  87. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/services/test_services_oidc_get.py +0 -0
  88. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/services/test_services_oidc_post.py +0 -0
  89. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/services/test_servides_login_get_multiple_plugins.py +0 -0
  90. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/setup/test_setup_install.py +0 -0
  91. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/setup/test_setup_uninstall.py +0 -0
  92. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/utils/test_utils_flow.py +0 -0
  93. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/utils/test_utils_str.py +0 -0
  94. {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/utils/test_utils_url.py +0 -0
@@ -9,6 +9,19 @@
9
9
 
10
10
  <!-- towncrier release notes start -->
11
11
 
12
+ ## 2.0.0b3 (2025-02-03)
13
+
14
+
15
+ ### New features:
16
+
17
+ - Register the adapter as needed by the @login endpoint present in plone.restapi @erral [#47](https://github.com/collective/pas.plugins.oidc/issues/47)
18
+
19
+
20
+ ### Internal:
21
+
22
+ - Bump plone.restapi to 9.10.0 [@ericof]
23
+
24
+
12
25
  ## 2.0.0b2 (2024-12-09)
13
26
 
14
27
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pas.plugins.oidc
3
- Version: 2.0.0b2
3
+ Version: 2.0.0b3
4
4
  Summary: OIDC support for Plone sites
5
5
  Home-page: https://github.com/collective/pas.plugins.oidc
6
6
  Author: mamico
@@ -34,8 +34,9 @@ Requires-Dist: plone.api
34
34
  Requires-Dist: plone.app.registry
35
35
  Requires-Dist: plone.base
36
36
  Requires-Dist: plone.protect
37
- Requires-Dist: plone.restapi>=8.34.0
37
+ Requires-Dist: plone.restapi>=9.10.0
38
38
  Requires-Dist: oic
39
+ Requires-Dist: requests
39
40
  Requires-Dist: z3c.form
40
41
  Provides-Extra: test
41
42
  Requires-Dist: zope.pytestlayer; extra == "test"
@@ -410,6 +411,19 @@ The project is licensed under the GPLv2.
410
411
 
411
412
  <!-- towncrier release notes start -->
412
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
+
413
427
  ## 2.0.0b2 (2024-12-09)
414
428
 
415
429
 
@@ -14,7 +14,7 @@ long_description = f"""
14
14
 
15
15
  setup(
16
16
  name="pas.plugins.oidc",
17
- version="2.0.0b2",
17
+ version="2.0.0b3",
18
18
  description="OIDC support for Plone sites",
19
19
  long_description=long_description,
20
20
  long_description_content_type="text/markdown",
@@ -59,8 +59,9 @@ setup(
59
59
  "plone.app.registry",
60
60
  "plone.base",
61
61
  "plone.protect",
62
- "plone.restapi>=8.34.0",
62
+ "plone.restapi>=9.10.0",
63
63
  "oic",
64
+ "requests",
64
65
  "z3c.form",
65
66
  ],
66
67
  extras_require={
@@ -138,6 +138,14 @@ class OIDCControlPanelAdapter:
138
138
  def user_property_as_userid(self, value):
139
139
  self.settings.user_property_as_userid = value
140
140
 
141
+ @property
142
+ def identity_domain_name(self):
143
+ return self.settings.identity_domain_name
144
+
145
+ @identity_domain_name.setter
146
+ def identity_domain_name(self, value):
147
+ self.settings.identity_domain_name = value
148
+
141
149
 
142
150
  class OIDCSettingsForm(controlpanel.RegistryEditForm):
143
151
  schema = IOIDCSettings
@@ -119,6 +119,13 @@ class IOIDCSettings(Interface):
119
119
  default="sub",
120
120
  )
121
121
 
122
+ identity_domain_name = schema.TextLine(
123
+ title=_("Identity Domain Name"),
124
+ description=_("Required for Oracle Authentication Manager only"),
125
+ required=False,
126
+ default="",
127
+ )
128
+
122
129
 
123
130
  class IOIDCControlpanel(IControlpanel):
124
131
  """OIDC Control panel"""
@@ -27,6 +27,7 @@ from zope.interface import Interface
27
27
 
28
28
  import itertools
29
29
  import plone.api as api
30
+ import requests
30
31
  import string
31
32
 
32
33
 
@@ -69,6 +70,29 @@ class IOIDCPlugin(Interface):
69
70
  """ """
70
71
 
71
72
 
73
+ class OAMClient(Client):
74
+ """Override so we can adjust the jwks_uri to add domain needed for OAM"""
75
+
76
+ def __init__(self, *args, domain=None, **xargs):
77
+ super().__init__(self, *args, **xargs)
78
+ self.domain = domain
79
+ if domain:
80
+ session = requests.Session()
81
+ session.headers.update({"x-oauth-identity-domain-name": domain})
82
+ self.settings.requests_session = session
83
+
84
+ def handle_provider_config(self, pcr, issuer, keys=True, endpoints=True):
85
+ domain = self.domain
86
+ if domain:
87
+ # we need to modify jwks_uri in the provider_info to add the identityDomain for OAM
88
+ # gets used in https://github.com/CZ-NIC/pyoidc/blob/0bd1eadcefc5ccb7ef6c69d9b631537a7d3cfe30/src/oic/oauth2/__init__.py#L1132
89
+ url = pcr["jwks_uri"]
90
+ req = requests.PreparedRequest()
91
+ req.prepare_url(url, dict(identityDomainName=domain))
92
+ pcr["jwks_uri"] = req.url
93
+ return super().handle_provider_config(pcr, issuer, keys, endpoints)
94
+
95
+
72
96
  @implementer(IOIDCPlugin)
73
97
  class OIDCPlugin(BasePlugin):
74
98
  """PAS Plugin OpenID Connect."""
@@ -92,6 +116,7 @@ class OIDCPlugin(BasePlugin):
92
116
  use_deprecated_redirect_uri_for_logout = False
93
117
  use_modified_openid_schema = False
94
118
  user_property_as_userid = "sub"
119
+ identity_domain_name = ""
95
120
 
96
121
  _properties = (
97
122
  dict(id="title", type="string", mode="w", label="Title"),
@@ -160,6 +185,12 @@ class OIDCPlugin(BasePlugin):
160
185
  mode="w",
161
186
  label="User info property used as userid, default 'sub'",
162
187
  ),
188
+ dict(
189
+ id="identity_domain_name",
190
+ type="string",
191
+ mode="w",
192
+ label="Identity Domain Name (required for Oracle Authentication Manager only)",
193
+ ),
163
194
  )
164
195
 
165
196
  def __init__(self, id, title=None):
@@ -331,8 +362,19 @@ class OIDCPlugin(BasePlugin):
331
362
 
332
363
  # TODO: memoize (?)
333
364
  def get_oauth2_client(self):
365
+ domain = self.getProperty("identity_domain_name")
334
366
  try:
335
- client = Client(client_authn_method=CLIENT_AUTHN_METHOD)
367
+ if domain:
368
+ client = OAMClient(
369
+ client_authn_method=CLIENT_AUTHN_METHOD,
370
+ domain=domain,
371
+ )
372
+ else:
373
+ client = Client(client_authn_method=CLIENT_AUTHN_METHOD)
374
+ client.allow["issuer_mismatch"] = (
375
+ True # Some providers aren't configured with configured and issuer urls the same even though they should.
376
+ )
377
+
336
378
  # registration_response = client.register(provider_info["registration_endpoint"], redirect_uris=...)
337
379
  # ... oic.exception.RegistrationError: {'error': 'insufficient_scope',
338
380
  # 'error_description': "Policy 'Trusted Hosts' rejected request to client-registration service. Details: Host not trusted."}
@@ -0,0 +1,11 @@
1
+ <configure
2
+ xmlns="http://namespaces.zope.org/zope"
3
+ xmlns:plone="http://namespaces.plone.org/plone"
4
+ >
5
+
6
+ <!-- Login options -->
7
+ <adapter
8
+ factory=".get.OIDCLoginProviders"
9
+ name="pas-plugins-oidc-providers"
10
+ />
11
+ </configure>
@@ -0,0 +1,29 @@
1
+ from pas.plugins.oidc.plugins import OIDCPlugin
2
+ from plone import api
3
+ from plone.base.interfaces import IPloneSiteRoot
4
+ from plone.restapi.interfaces import ILoginProviders
5
+ from zope.component import adapter
6
+ from zope.interface import implementer
7
+
8
+
9
+ @adapter(IPloneSiteRoot)
10
+ @implementer(ILoginProviders)
11
+ class OIDCLoginProviders:
12
+ def __init__(self, context):
13
+ self.context = context
14
+
15
+ def get_providers(self):
16
+ options = []
17
+ acl_users = api.portal.get_tool("acl_users")
18
+ for plugin in acl_users.objectValues():
19
+ if isinstance(plugin, OIDCPlugin):
20
+ options.append(
21
+ {
22
+ "id": plugin.getId(),
23
+ "plugin": "oidc",
24
+ "title": plugin.title,
25
+ "url": f"{self.context.absolute_url()}/@login-oidc/{plugin.getId()}",
26
+ }
27
+ )
28
+
29
+ return options
@@ -127,6 +127,8 @@ def authorization_flow_args(plugin: plugins.OIDCPlugin, session: Session) -> dic
127
127
  "nonce": session.get("nonce"),
128
128
  "redirect_uri": plugin.get_redirect_uris(),
129
129
  }
130
+ if plugin.getProperty("identity_domain_name"):
131
+ args["domain"] = plugin.getProperty("identity_domain_name", "")
130
132
  if plugin.getProperty("use_pkce"):
131
133
  # Build a random string of 43 to 128 characters
132
134
  # and send it in the request as a base64-encoded urlsafe string of the sha256 hash of that string
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pas.plugins.oidc
3
- Version: 2.0.0b2
3
+ Version: 2.0.0b3
4
4
  Summary: OIDC support for Plone sites
5
5
  Home-page: https://github.com/collective/pas.plugins.oidc
6
6
  Author: mamico
@@ -34,8 +34,9 @@ Requires-Dist: plone.api
34
34
  Requires-Dist: plone.app.registry
35
35
  Requires-Dist: plone.base
36
36
  Requires-Dist: plone.protect
37
- Requires-Dist: plone.restapi>=8.34.0
37
+ Requires-Dist: plone.restapi>=9.10.0
38
38
  Requires-Dist: oic
39
+ Requires-Dist: requests
39
40
  Requires-Dist: z3c.form
40
41
  Provides-Extra: test
41
42
  Requires-Dist: zope.pytestlayer; extra == "test"
@@ -410,6 +411,19 @@ The project is licensed under the GPLv2.
410
411
 
411
412
  <!-- towncrier release notes start -->
412
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
+
413
427
  ## 2.0.0b2 (2024-12-09)
414
428
 
415
429
 
@@ -6,8 +6,9 @@ plone.api
6
6
  plone.app.registry
7
7
  plone.base
8
8
  plone.protect
9
- plone.restapi>=8.34.0
9
+ plone.restapi>=9.10.0
10
10
  oic
11
+ requests
11
12
  z3c.form
12
13
 
13
14
  [test]
@@ -23,6 +23,7 @@ def keycloak(keycloak_service):
23
23
  "scope": ("openid", "profile", "email"),
24
24
  "redirect_uris": ("/login_oidc/oidc",),
25
25
  "create_restapi_ticket": True,
26
+ "identity_domain_name": "blah", # ensure non OAM SP ignores extra params/header
26
27
  }
27
28
 
28
29
 
@@ -1,15 +0,0 @@
1
- <configure
2
- xmlns="http://namespaces.zope.org/zope"
3
- xmlns:plone="http://namespaces.plone.org/plone"
4
- >
5
-
6
- <!-- Login options -->
7
- <plone:service
8
- method="GET"
9
- factory=".get.Get"
10
- for="Products.CMFPlone.interfaces.IPloneSiteRoot"
11
- permission="zope.Public"
12
- name="@login"
13
- />
14
-
15
- </configure>
@@ -1,42 +0,0 @@
1
- from pas.plugins.oidc import utils
2
- from pas.plugins.oidc.plugins import OIDCPlugin
3
- from plone import api
4
- from plone.restapi.services import Service
5
- from typing import Dict
6
- from typing import List
7
-
8
-
9
- class Get(Service):
10
- """List available login options for the site."""
11
-
12
- def check_permission(self):
13
- return True
14
-
15
- @staticmethod
16
- def list_login_providers() -> List[Dict]:
17
- """List all configured login providers.
18
-
19
- This should be moved to plone.restapi and be extendable.
20
- :returns: List of login options.
21
- """
22
- portal_url = api.portal.get().absolute_url()
23
- plugins = []
24
- for plugin in utils.get_plugins():
25
- if isinstance(plugin, OIDCPlugin):
26
- plugins.append(
27
- {
28
- "id": plugin.getId(),
29
- "plugin": "oidc",
30
- "url": f"{portal_url}/@login-oidc/{plugin.getId()}",
31
- "title": plugin.title,
32
- }
33
- )
34
- return plugins
35
-
36
- def reply(self) -> Dict[str, List[Dict]]:
37
- """List login options available for the site.
38
-
39
- :returns: Login options information.
40
- """
41
- providers = self.list_login_providers()
42
- return {"options": providers}