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");

Reply via email to