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.
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/CHANGES.md +13 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/PKG-INFO +16 -2
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/setup.py +3 -2
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/controlpanel/classic.py +8 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/interfaces.py +7 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/plugins.py +43 -1
- pas.plugins.oidc-2.0.0b3/src/pas/plugins/oidc/services/login/configure.zcml +11 -0
- pas.plugins.oidc-2.0.0b3/src/pas/plugins/oidc/services/login/get.py +29 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/utils.py +2 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas.plugins.oidc.egg-info/PKG-INFO +16 -2
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas.plugins.oidc.egg-info/requires.txt +2 -1
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/services/conftest.py +1 -0
- pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/services/login/configure.zcml +0 -15
- pas.plugins.oidc-2.0.0b2/src/pas/plugins/oidc/services/login/get.py +0 -42
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/.coveragerc +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/.pre-commit-config.yaml +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/CONTRIBUTORS.md +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/LICENSE.GPL +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/LICENSE.md +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/MANIFEST.in +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/Makefile +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/README.md +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/constraints.txt +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/docs/icon.png +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/docs/screenshot-settings.png +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/instance.yaml +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/pyproject.toml +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/requirements-docs.txt +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/requirements.txt +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/setup.cfg +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/__init__.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/__init__.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/__init__.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/browser/__init__.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/browser/configure.zcml +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/browser/view.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/configure.zcml +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/controlpanel/__init__.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/controlpanel/configure.zcml +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/controlpanel/deserializer.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/controlpanel/oidc.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/controlpanel/serializer.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/locales/__init__.py +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/locales/pas.plugins.oidc.pot +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/locales/update.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/profiles/default/browserlayer.xml +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/profiles/default/controlpanel.xml +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/profiles/default/metadata.xml +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/profiles/uninstall/browserlayer.xml +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/services/__init__.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/services/configure.zcml +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/services/login/__init__.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/services/oidc/__init__.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/services/oidc/configure.zcml +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/services/oidc/oidc.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/session.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/setuphandlers.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/testing.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/upgrades/__init__.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/upgrades/configure.zcml +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/www/oidcPluginForm.zpt +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas.plugins.oidc.egg-info/SOURCES.txt +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas.plugins.oidc.egg-info/dependency_links.txt +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas.plugins.oidc.egg-info/entry_points.txt +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas.plugins.oidc.egg-info/namespace_packages.txt +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas.plugins.oidc.egg-info/not-zip-safe +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas.plugins.oidc.egg-info/top_level.txt +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/conftest.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/controlpanel/conftest.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/controlpanel/test_controlpanel_api.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/docker-compose.yml +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/functional/conftest.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/functional/test_controlpanel_classic.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/functional/test_functional.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/keycloak/Dockerfile +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/keycloak/import/.gitkeep +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/keycloak/import/plone-realm.json +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/keycloak/import/plone-test-realm.json +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/plugin/test_plugin.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/services/test_services_login_get.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/services/test_services_oidc_get.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/services/test_services_oidc_post.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/services/test_servides_login_get_multiple_plugins.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/setup/test_setup_install.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/setup/test_setup_uninstall.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/utils/test_utils_flow.py +0 -0
- {pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/utils/test_utils_str.py +0 -0
- {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.
|
|
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>=
|
|
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.
|
|
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>=
|
|
62
|
+
"plone.restapi>=9.10.0",
|
|
63
63
|
"oic",
|
|
64
|
+
"requests",
|
|
64
65
|
"z3c.form",
|
|
65
66
|
],
|
|
66
67
|
extras_require={
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/controlpanel/classic.py
RENAMED
|
@@ -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
|
-
|
|
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,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
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas.plugins.oidc.egg-info/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pas.plugins.oidc
|
|
3
|
-
Version: 2.0.
|
|
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>=
|
|
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
|
|
|
@@ -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}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/browser/__init__.py
RENAMED
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/browser/configure.zcml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/controlpanel/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/controlpanel/oidc.py
RENAMED
|
File without changes
|
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/locales/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/locales/update.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/services/__init__.py
RENAMED
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/services/configure.zcml
RENAMED
|
File without changes
|
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/services/oidc/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/services/oidc/oidc.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/upgrades/__init__.py
RENAMED
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/upgrades/configure.zcml
RENAMED
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas/plugins/oidc/www/oidcPluginForm.zpt
RENAMED
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas.plugins.oidc.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas.plugins.oidc.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas.plugins.oidc.egg-info/not-zip-safe
RENAMED
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/src/pas.plugins.oidc.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/controlpanel/test_controlpanel_api.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/functional/test_controlpanel_classic.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/keycloak/import/plone-realm.json
RENAMED
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/keycloak/import/plone-test-realm.json
RENAMED
|
File without changes
|
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/services/test_services_login_get.py
RENAMED
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/services/test_services_oidc_get.py
RENAMED
|
File without changes
|
{pas.plugins.oidc-2.0.0b2 → pas.plugins.oidc-2.0.0b3}/tests/services/test_services_oidc_post.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|