From 28ea22c8e84617a6efb5b26a62a160a5a6c18691 Mon Sep 17 00:00:00 2001 From: Mikel Larreategi Date: Sun, 3 Mar 2024 19:59:28 +0100 Subject: [PATCH 1/2] register the adapter instead of the @login endpoint --- .../oidc/services/login/configure.zcml | 10 ++--- src/pas/plugins/oidc/services/login/get.py | 45 +++++++------------ 2 files changed, 19 insertions(+), 36 deletions(-) diff --git a/src/pas/plugins/oidc/services/login/configure.zcml b/src/pas/plugins/oidc/services/login/configure.zcml index 690d12e..bc713fb 100644 --- a/src/pas/plugins/oidc/services/login/configure.zcml +++ b/src/pas/plugins/oidc/services/login/configure.zcml @@ -4,12 +4,8 @@ > - - diff --git a/src/pas/plugins/oidc/services/login/get.py b/src/pas/plugins/oidc/services/login/get.py index 491386b..eab8794 100644 --- a/src/pas/plugins/oidc/services/login/get.py +++ b/src/pas/plugins/oidc/services/login/get.py @@ -1,42 +1,29 @@ -from pas.plugins.oidc import utils from pas.plugins.oidc.plugins import OIDCPlugin from plone import api -from plone.restapi.services import Service -from typing import Dict -from typing import List +from plone.base.interfaces import IPloneSiteRoot +from plone.restapi.interfaces import ILoginProviders +from zope.component import adapter +from zope.interface import implementer -class Get(Service): - """List available login options for the site.""" +@adapter(IPloneSiteRoot) +@implementer(ILoginProviders) +class OIDCLoginProviders: + def __init__(self, context): + self.context = context - def check_permission(self): - return True - - @staticmethod - def list_login_providers() -> List[Dict]: - """List all configured login providers. - - This should be moved to plone.restapi and be extendable. - :returns: List of login options. - """ - portal_url = api.portal.get().absolute_url() - plugins = [] - for plugin in utils.get_plugins(): + def get_providers(self): + options = [] + acl_users = api.portal.get_tool("acl_users") + for plugin in acl_users.objectValues(): if isinstance(plugin, OIDCPlugin): - plugins.append( + options.append( { "id": plugin.getId(), "plugin": "oidc", - "url": f"{portal_url}/@login-oidc/{plugin.getId()}", "title": plugin.title, + "url": f"{self.context.absolute_url()}/@login-oidc/{plugin.getId()}", } ) - return plugins - - def reply(self) -> Dict[str, List[Dict]]: - """List login options available for the site. - :returns: Login options information. - """ - providers = self.list_login_providers() - return {"options": providers} + return options From f9a43bb8ed79fde171bbae5009df85b85f8153e1 Mon Sep 17 00:00:00 2001 From: Mikel Larreategi Date: Mon, 3 Feb 2025 17:01:45 +0100 Subject: [PATCH 2/2] changelog --- news/47.feature | 1 + 1 file changed, 1 insertion(+) create mode 100644 news/47.feature diff --git a/news/47.feature b/news/47.feature new file mode 100644 index 0000000..c78ca88 --- /dev/null +++ b/news/47.feature @@ -0,0 +1 @@ +Register the adapter as needed by the @login endpoint present in plone.restapi @erral