This is an automated email from the ASF dual-hosted git repository. rombert pushed a commit to branch issue/use-login-service in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-mcp-server.git
commit 4b73cbe9e973310b36a187a6d8f03a0a6b2fcaaf Author: Robert Munteanu <[email protected]> AuthorDate: Fri Mar 13 12:16:08 2026 +0100 fix: switch to loginService --- pom.xml | 6 ++++++ src/main/features/main.json | 9 ++++----- .../server/impl/contribs/RepositoryPromptsRegistrar.java | 16 ++++++++++++---- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/pom.xml b/pom.xml index 63106eb..be655a9 100644 --- a/pom.xml +++ b/pom.xml @@ -99,6 +99,12 @@ <version>2.27.6</version> <scope>provided</scope> </dependency> + <dependency> + <groupId>org.apache.sling</groupId> + <artifactId>org.apache.sling.serviceusermapper</artifactId> + <version>1.5.8</version> + <scope>provided</scope> + </dependency> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.engine</artifactId> diff --git a/src/main/features/main.json b/src/main/features/main.json index cc041e2..4efb278 100644 --- a/src/main/features/main.json +++ b/src/main/features/main.json @@ -46,11 +46,10 @@ } ], "configurations": { - "org.apache.sling.jcr.base.internal.LoginAdminWhitelist.fragment~mcp-server":{ - "whitelist.bundles":[ - "org.apache.sling.mcp-server" - ], - "whitelist.name":"mcp-server" + "org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended~mcp-server":{ + "user.mapping":[ + "org.apache.sling.mcp-server:mcp-prompts-reader=[sling-search-path-reader]" + ] } } } diff --git a/src/main/java/org/apache/sling/mcp/server/impl/contribs/RepositoryPromptsRegistrar.java b/src/main/java/org/apache/sling/mcp/server/impl/contribs/RepositoryPromptsRegistrar.java index 65bd247..5e29eaa 100644 --- a/src/main/java/org/apache/sling/mcp/server/impl/contribs/RepositoryPromptsRegistrar.java +++ b/src/main/java/org/apache/sling/mcp/server/impl/contribs/RepositoryPromptsRegistrar.java @@ -19,6 +19,7 @@ package org.apache.sling.mcp.server.impl.contribs; import java.io.IOException; +import java.util.Collections; import java.util.Hashtable; import java.util.Iterator; import java.util.List; @@ -34,6 +35,7 @@ import org.apache.sling.api.resource.observation.ResourceChange; import org.apache.sling.api.resource.observation.ResourceChange.ChangeType; import org.apache.sling.api.resource.observation.ResourceChangeListener; import org.apache.sling.mcp.server.impl.DiscoveredPrompt; +import org.apache.sling.serviceusermapping.ServiceUserMapped; import org.jetbrains.annotations.NotNull; import org.osgi.framework.BundleContext; import org.osgi.framework.ServiceRegistration; @@ -47,12 +49,17 @@ import org.slf4j.LoggerFactory; public class RepositoryPromptsRegistrar { private static final String PROMPT_LIBS_DIR = "/libs/sling/mcp/prompts"; + private static final String SUBSERVICE_NAME = "mcp-prompts-reader"; private final Logger logger = LoggerFactory.getLogger(getClass()); private ConcurrentMap<String, ServiceRegistration<DiscoveredPrompt>> registrations = new ConcurrentHashMap<>(); private final DiscoveredPromptBuilder promptBuilder = new DiscoveredPromptBuilder(); @Activate - public RepositoryPromptsRegistrar(@Reference ResourceResolverFactory rrf, BundleContext ctx) throws LoginException { + public RepositoryPromptsRegistrar( + @Reference ResourceResolverFactory rrf, + @Reference(target = "(subServiceName=" + SUBSERVICE_NAME + ")") ServiceUserMapped serviceUserMapped, + BundleContext ctx) + throws LoginException { ctx.registerService( ResourceChangeListener.class, @@ -61,7 +68,8 @@ public class RepositoryPromptsRegistrar { @Override public void onChange(@NotNull List<ResourceChange> changes) { - try (ResourceResolver resolver = rrf.getAdministrativeResourceResolver(null)) { + try (ResourceResolver resolver = rrf.getServiceResourceResolver( + Collections.singletonMap(ResourceResolverFactory.SUBSERVICE, SUBSERVICE_NAME))) { for (ResourceChange change : changes) { if (!change.getPath().endsWith(".md")) { continue; @@ -106,8 +114,8 @@ public class RepositoryPromptsRegistrar { ResourceChangeListener.CHANGE_REMOVED }))); - // TODO - use service user - try (ResourceResolver resolver = rrf.getAdministrativeResourceResolver(null)) { + try (ResourceResolver resolver = rrf.getServiceResourceResolver( + Collections.singletonMap(ResourceResolverFactory.SUBSERVICE, SUBSERVICE_NAME))) { Iterator<Resource> prompts = resolver.findResources( "/jcr:root" + PROMPT_LIBS_DIR + "//element(*,nt:file)[jcr:like(fn:name(), '%.md')]", "xpath");
