This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch 
feature/OAK-11498-expose-bound-principals-via-jrsession
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git

commit ae3e61b912eda17ee32d993ddf38b4e4cb8df606
Author: Konrad Windszus <[email protected]>
AuthorDate: Tue Feb 18 16:34:55 2025 +0100

    OAK-11498: Expose Session-bound principals via JackrabbitSession
---
 .../apache/jackrabbit/api/JackrabbitSession.java   | 18 ++++++++++++----
 .../jackrabbit/oak/jcr/session/SessionImpl.java    |  7 +++++++
 .../oak/jcr/session/JackrabbitSessionTest.java     | 24 ++++++++++++++++++++--
 3 files changed, 43 insertions(+), 6 deletions(-)

diff --git 
a/oak-jackrabbit-api/src/main/java/org/apache/jackrabbit/api/JackrabbitSession.java
 
b/oak-jackrabbit-api/src/main/java/org/apache/jackrabbit/api/JackrabbitSession.java
index 5ad47e6b3d..9abbe104ab 100644
--- 
a/oak-jackrabbit-api/src/main/java/org/apache/jackrabbit/api/JackrabbitSession.java
+++ 
b/oak-jackrabbit-api/src/main/java/org/apache/jackrabbit/api/JackrabbitSession.java
@@ -16,18 +16,20 @@
  */
 package org.apache.jackrabbit.api;
 
-import org.apache.jackrabbit.api.security.user.UserManager;
-import org.apache.jackrabbit.api.security.principal.PrincipalManager;
+import java.security.Principal;
+import java.util.Set;
 
+import javax.jcr.AccessDeniedException;
 import javax.jcr.Item;
 import javax.jcr.ItemNotFoundException;
 import javax.jcr.Node;
 import javax.jcr.Property;
-import javax.jcr.Session;
-import javax.jcr.AccessDeniedException;
 import javax.jcr.RepositoryException;
+import javax.jcr.Session;
 import javax.jcr.UnsupportedRepositoryOperationException;
 
+import org.apache.jackrabbit.api.security.principal.PrincipalManager;
+import org.apache.jackrabbit.api.security.user.UserManager;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 import org.osgi.annotation.versioning.ProviderType;
@@ -277,4 +279,12 @@ public interface JackrabbitSession extends Session {
             return null;
         }
     }
+    
+    /**
+     * Returns the set of principals associated with this session.
+     * @return the set of principals associated with this session.
+     * @throws RepositoryException in case principal information cannot be 
retrieved.
+     * @since 1.78
+     */
+    @NotNull Set<Principal> getPrincipals() throws RepositoryException;
 }
diff --git 
a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionImpl.java 
b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionImpl.java
index cce9688439..f3e6760310 100644
--- 
a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionImpl.java
+++ 
b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionImpl.java
@@ -24,6 +24,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.security.AccessControlException;
+import java.security.Principal;
 import java.util.Collections;
 import java.util.Set;
 import java.util.TreeSet;
@@ -845,6 +846,12 @@ public class SessionImpl implements JackrabbitSession {
         return sessionContext.getUserManager();
     }
 
+    @Override
+    @NotNull
+    public Set<Principal> getPrincipals() throws RepositoryException {
+        return sd.getAuthInfo().getPrincipals();
+    }
+
     @Override
     public String toString() {
         if (isLive()) {
diff --git 
a/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/session/JackrabbitSessionTest.java
 
b/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/session/JackrabbitSessionTest.java
index 9e9eca4d60..5d147c27d9 100644
--- 
a/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/session/JackrabbitSessionTest.java
+++ 
b/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/session/JackrabbitSessionTest.java
@@ -30,6 +30,9 @@ import javax.jcr.RepositoryException;
 
 import static org.mockito.Mockito.mock;
 
+import java.security.Principal;
+import java.util.Set;
+
 public class JackrabbitSessionTest extends AbstractJCRTest {
     
     private JackrabbitSession s;
@@ -81,6 +84,23 @@ public class JackrabbitSessionTest extends AbstractJCRTest {
             // success
         }
     }
-    
-    
+
+    public void testGetPrincipalsForAdminSession() throws RepositoryException {
+        Set<Principal> principals = s.getPrincipals();
+        assertNotNull(principals);
+        assertTrue("Admin principal expected", 
principals.contains(s.getPrincipalManager().getPrincipal("admin")));
+        assertTrue("Everyone principal expected", 
principals.contains(s.getPrincipalManager().getEveryone()));
+    }
+
+    public void testGetPrincipalsForGuestSession() throws RepositoryException {
+        JackrabbitSession guest = (JackrabbitSession) 
getHelper().getRepository().login(new GuestCredentials());
+        try {
+            Set<Principal> principals = guest.getPrincipals();
+            assertNotNull(principals);
+            assertFalse("Admin principal not expected", 
principals.contains(s.getPrincipalManager().getPrincipal("admin")));
+            assertTrue("Everyone principal expected", 
principals.contains(s.getPrincipalManager().getEveryone()));
+        }finally {
+            guest.logout();
+        }
+    }
 }
\ No newline at end of file

Reply via email to