You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2013/09/11 17:07:19 UTC

svn commit: r1521895 - in /sling/whiteboard/bdelacretaz: bdelacretaz-oak-server/ bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/ it-repository/ it-repository/src/test/java/org/apache/sling/jcr/repository/it/ oak-launchpad/src/main/bun...

Author: bdelacretaz
Date: Wed Sep 11 15:07:18 2013
New Revision: 1521895

URL: http://svn.apache.org/r1521895
Log:
SLING-2788 - testing with local release of Oak 0.8-r1520083, work in progress

Added:
    sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/JcrRepositoryHacks.java   (with props)
Modified:
    sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/pom.xml
    sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/OakSlingRepository.java
    sling/whiteboard/bdelacretaz/it-repository/pom.xml
    sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/SlingRepositoryITBase.java
    sling/whiteboard/bdelacretaz/oak-launchpad/src/main/bundles/list.xml

Modified: sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/pom.xml
URL: http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/pom.xml?rev=1521895&r1=1521894&r2=1521895&view=diff
==============================================================================
--- sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/pom.xml (original)
+++ sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/pom.xml Wed Sep 11 15:07:18 2013
@@ -38,7 +38,7 @@
 
     <properties>
         <sling.java.version>6</sling.java.version>
-        <oak.version>0.9-SNAPSHOT</oak.version>
+        <oak.version>0.8-r1520083</oak.version>
     </properties>
 
     <build>
@@ -57,8 +57,10 @@
                           org.apache.jackrabbit.test;resolution:=optional,
                           com.mongodb;resolution:=optional,
                           org.apache.jackrabbit.oak.security.user;resolution:=optional,
+                          org.apache.jackrabbit.oak.spi.security.authentication,
                           *
                         </Import-Package>
+                        <Embed-Dependency>oak-jcr</Embed-Dependency>
                         <Bundle-Activator>
                             org.apache.sling.oak.server.Activator
                         </Bundle-Activator>

Added: sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/JcrRepositoryHacks.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/JcrRepositoryHacks.java?rev=1521895&view=auto
==============================================================================
--- sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/JcrRepositoryHacks.java (added)
+++ sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/JcrRepositoryHacks.java Wed Sep 11 15:07:18 2013
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The SF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ */
+package org.apache.sling.oak.server;
+
+import javax.jcr.Credentials;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+import org.apache.jackrabbit.oak.Oak;
+import org.apache.jackrabbit.oak.api.ContentRepository;
+import org.apache.jackrabbit.oak.jcr.RepositoryImpl;
+import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
+import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
+
+class JcrRepositoryHacks extends RepositoryImpl {
+	JcrRepositoryHacks(ContentRepository contentRepository, Whiteboard whiteboard, SecurityProvider securityProvider) {
+		super(contentRepository, whiteboard, securityProvider);
+	}
+	
+    @Override
+    public Session login(final Credentials credentials, final String workspace)
+            throws RepositoryException {
+    	// TODO: shouldn't be needed - set context class loader to
+    	// avoid class not found exceptions on login modules
+        final Thread thread = Thread.currentThread();
+        final ClassLoader loader = thread.getContextClassLoader();
+        try {
+            thread.setContextClassLoader(Oak.class.getClassLoader());
+            return super.login(credentials, workspace);
+        } finally {
+            thread.setContextClassLoader(loader);
+        }
+    }
+}
\ No newline at end of file

Propchange: sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/JcrRepositoryHacks.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/JcrRepositoryHacks.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev URL

Modified: sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/OakSlingRepository.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/OakSlingRepository.java?rev=1521895&r1=1521894&r2=1521895&view=diff
==============================================================================
--- sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/OakSlingRepository.java (original)
+++ sling/whiteboard/bdelacretaz/bdelacretaz-oak-server/src/main/java/org/apache/sling/oak/server/OakSlingRepository.java Wed Sep 11 15:07:18 2013
@@ -17,13 +17,24 @@
  */
 package org.apache.sling.oak.server;
 
+import static java.util.Collections.singleton;
+
+import java.security.Principal;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
 import javax.jcr.Credentials;
 import javax.jcr.LoginException;
 import javax.jcr.NoSuchWorkspaceException;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
-import javax.jcr.SimpleCredentials;
+import javax.security.auth.Subject;
+import javax.security.auth.login.Configuration;
 
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
@@ -31,12 +42,26 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.jackrabbit.oak.Oak;
-import org.apache.jackrabbit.oak.jcr.Jcr;
+import org.apache.jackrabbit.oak.api.AuthInfo;
+import org.apache.jackrabbit.oak.api.ContentRepository;
+import org.apache.jackrabbit.oak.jcr.RepositoryImpl;
 import org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexEditorProvider;
 import org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexProvider;
-import org.apache.jackrabbit.oak.spi.security.OpenSecurityProvider;
+import org.apache.jackrabbit.oak.security.SecurityProviderImpl;
+import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
 import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
+import org.apache.jackrabbit.oak.spi.security.authentication.AuthInfoImpl;
+import org.apache.jackrabbit.oak.spi.security.authentication.ConfigurationUtil;
+import org.apache.jackrabbit.oak.spi.security.principal.AdminPrincipal;
+import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
+import org.apache.jackrabbit.oak.spi.security.user.UserConfiguration;
+import org.apache.jackrabbit.oak.spi.security.user.UserConstants;
+import org.apache.jackrabbit.oak.spi.security.user.action.AccessControlAction;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
+import org.apache.jackrabbit.oak.spi.whiteboard.OsgiWhiteboard;
+import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
+import org.apache.jackrabbit.oak.spi.xml.ImportBehavior;
+import org.apache.jackrabbit.oak.spi.xml.ProtectedItemImporter;
 import org.apache.sling.jcr.api.SlingRepository;
 import org.apache.sling.jcr.base.AbstractNamespaceMappingRepository;
 import org.osgi.service.component.ComponentContext;
@@ -50,21 +75,28 @@ import org.osgi.service.component.Compon
 public class OakSlingRepository extends AbstractNamespaceMappingRepository
         implements SlingRepository {
 
-    private Repository oakRepository;
+    private RepositoryImpl jcrRepository;
+    private SecurityProvider securityProvider;
     
     @Reference
     private NodeStore nodeStore;
     
     @Activate
     protected void activate(ComponentContext ctx) {
-        final SecurityProvider sp = new OpenSecurityProvider();
-        
-        oakRepository = new Jcr(new Oak(nodeStore))
-        .with(sp)
+        // FIXME GRANITE-2315
+        Configuration.setConfiguration(ConfigurationUtil.getJackrabbit2Configuration(ConfigurationParameters.EMPTY));
+
+        final Whiteboard whiteboard = new OsgiWhiteboard(ctx.getBundleContext());
+        securityProvider = new SecurityProviderImpl(buildSecurityConfig());
+        final Oak oak = new Oak(nodeStore)
+        .with(securityProvider)
         .with(new LuceneIndexEditorProvider())
         .with(new LuceneIndexProvider())
         .withAsyncIndexing()
-        .createRepository();
+        .with(whiteboard);
+        
+        final ContentRepository contentRepository = oak.createContentRepository();  
+        jcrRepository = new JcrRepositoryHacks(contentRepository, whiteboard, securityProvider);
         
         setup(ctx.getBundleContext());
     }
@@ -76,46 +108,89 @@ public class OakSlingRepository extends 
     
     @Override
     public String getDescriptor(String key) {
-        return oakRepository.getDescriptor(key);
+        return jcrRepository.getDescriptor(key);
     }
 
     @Override
     public String[] getDescriptorKeys() {
-        return oakRepository.getDescriptorKeys();
+        return jcrRepository.getDescriptorKeys();
     }
 
     @Override
     public Session login() throws LoginException, RepositoryException {
-        return oakRepository.login();
+        return getNamespaceAwareSession(jcrRepository.login());
     }
 
     @Override
     public Session login(Credentials creds, String workspace) throws LoginException,
             NoSuchWorkspaceException, RepositoryException {
-        return oakRepository.login(creds, workspace);
+        return getNamespaceAwareSession(jcrRepository.login(creds, workspace));
     }
 
     @Override
     public Session login(Credentials creds) throws LoginException,
             RepositoryException {
-        return oakRepository.login(creds);
+        return getNamespaceAwareSession(jcrRepository.login(creds));
     }
 
     @Override
     public Session login(String workspace) throws LoginException,
             NoSuchWorkspaceException, RepositoryException {
-        return oakRepository.login(workspace);
+        return getNamespaceAwareSession(jcrRepository.login(workspace));
     }
 
     @Override
     public String getDefaultWorkspace() {
-        return null;
+        return "oak.sling";
     }
 
     @Override
     public Session loginAdministrative(String workspace) throws RepositoryException {
-        // TODO use configurable credentials
-        final SimpleCredentials creds = new SimpleCredentials("admin", "admin".toCharArray());
-        return login(creds, workspace);
+        final String adminId = securityProvider.getConfiguration(UserConfiguration.class)
+        		.getParameters().getConfigValue(UserConstants.PARAM_ADMIN_ID, UserConstants.DEFAULT_ADMIN_ID);
+        
+        // TODO: use principal provider to retrieve admin principal
+        Set<? extends Principal> principals = singleton(new AdminPrincipal() {
+            @Override
+            public String getName() {
+                return adminId;
+            }
+        });
+        AuthInfo authInfo = new AuthInfoImpl(adminId, Collections.<String, Object>emptyMap(), principals);
+        Subject subject = new Subject(true, principals, singleton(authInfo), Collections.<Object>emptySet());
+        Session adminSession;
+        try {
+            adminSession = Subject.doAsPrivileged(subject, new PrivilegedExceptionAction<Session>() {
+                @Override
+                public Session run() throws Exception {
+                    Map<String,Object> attrs = new HashMap<String, Object>();
+                    attrs.put(RepositoryImpl.REFRESH_INTERVAL,0);
+                    //TODO OAK-803: Backwards compatibility of long-lived sessions
+                    //Remove dependency on implementation specific API
+                    return getNamespaceAwareSession((jcrRepository).login(null, null,attrs));
+                }
+            }, null);
+        } catch (PrivilegedActionException e) {
+            throw new RepositoryException("failed to retrieve admin session.", e);
+        }
+
+        return adminSession;
+    }
+    
+    // TODO: use proper osgi configuration (once that works in oak)
+    private static ConfigurationParameters buildSecurityConfig() {
+        Map<String, Object> userConfig = new HashMap<String, Object>();
+        userConfig.put(UserConstants.PARAM_GROUP_PATH, "/home/groups");
+        userConfig.put(UserConstants.PARAM_USER_PATH, "/home/users");
+        userConfig.put(UserConstants.PARAM_DEFAULT_DEPTH, 1);
+        userConfig.put(AccessControlAction.USER_PRIVILEGE_NAMES, PrivilegeConstants.JCR_ALL);
+        userConfig.put(AccessControlAction.GROUP_PRIVILEGE_NAMES, PrivilegeConstants.JCR_READ);
+        userConfig.put(ProtectedItemImporter.PARAM_IMPORT_BEHAVIOR, ImportBehavior.NAME_BESTEFFORT);
+
+        Map<String, Object> config = new HashMap<String, Object>();
+        config.put(
+                UserConfiguration.NAME,
+                new ConfigurationParameters(userConfig));
+        return new ConfigurationParameters(config);
     }
 }
\ No newline at end of file

Modified: sling/whiteboard/bdelacretaz/it-repository/pom.xml
URL: http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/it-repository/pom.xml?rev=1521895&r1=1521894&r2=1521895&view=diff
==============================================================================
--- sling/whiteboard/bdelacretaz/it-repository/pom.xml (original)
+++ sling/whiteboard/bdelacretaz/it-repository/pom.xml Wed Sep 11 15:07:18 2013
@@ -27,7 +27,7 @@
         <url.version>1.5.2</url.version>
         <org.ops4j.pax.logging.DefaultServiceLog.level>INFO</org.ops4j.pax.logging.DefaultServiceLog.level>
         <org.ops4j.pax.url.mvn.settings></org.ops4j.pax.url.mvn.settings>
-        <oak.version>0.9-SNAPSHOT</oak.version>
+        <oak.version>0.8-r1520083</oak.version>
     </properties>
 
     <build>

Modified: sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/SlingRepositoryITBase.java
URL: http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/SlingRepositoryITBase.java?rev=1521895&r1=1521894&r2=1521895&view=diff
==============================================================================
--- sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/SlingRepositoryITBase.java (original)
+++ sling/whiteboard/bdelacretaz/it-repository/src/test/java/org/apache/sling/jcr/repository/it/SlingRepositoryITBase.java Wed Sep 11 15:07:18 2013
@@ -61,7 +61,6 @@ public abstract class SlingRepositoryITB
         s.logout();
     }
 
-    @Ignore("Fails in OakRepositoryIT due to the use of OpenSecurityProvider")
     @Test(expected=RepositoryException.class)
     public void testWrongLogin() throws RepositoryException {
         final Credentials creds = new SimpleCredentials("badName", "badPAssword".toCharArray());

Modified: sling/whiteboard/bdelacretaz/oak-launchpad/src/main/bundles/list.xml
URL: http://svn.apache.org/viewvc/sling/whiteboard/bdelacretaz/oak-launchpad/src/main/bundles/list.xml?rev=1521895&r1=1521894&r2=1521895&view=diff
==============================================================================
--- sling/whiteboard/bdelacretaz/oak-launchpad/src/main/bundles/list.xml (original)
+++ sling/whiteboard/bdelacretaz/oak-launchpad/src/main/bundles/list.xml Wed Sep 11 15:07:18 2013
@@ -502,37 +502,37 @@
         <bundle>
             <groupId>org.apache.jackrabbit</groupId>
             <artifactId>oak-core</artifactId>
-            <version>0.9-SNAPSHOT</version>
+            <version>0.8-r1520083</version>
         </bundle>
         <bundle>
             <groupId>org.apache.jackrabbit</groupId>
             <artifactId>oak-jcr</artifactId>
-            <version>0.9-SNAPSHOT</version>
+            <version>0.8-r1520083</version>
         </bundle>
         <bundle>
             <groupId>org.apache.jackrabbit</groupId>
             <artifactId>oak-commons</artifactId>
-            <version>0.9-SNAPSHOT</version>
+            <version>0.8-r1520083</version>
         </bundle>
         <bundle>
             <groupId>org.apache.jackrabbit</groupId>
             <artifactId>oak-mk</artifactId>
-            <version>0.9-SNAPSHOT</version>
+            <version>0.8-r1520083</version>
         </bundle>
         <bundle>
             <groupId>org.apache.jackrabbit</groupId>
             <artifactId>oak-mk-api</artifactId>
-            <version>0.9-SNAPSHOT</version>
+            <version>0.8-r1520083</version>
         </bundle>
         <bundle>
             <groupId>org.apache.jackrabbit</groupId>
             <artifactId>oak-mk-remote</artifactId>
-            <version>0.9-SNAPSHOT</version>
+            <version>0.8-r1520083</version>
         </bundle>
         <bundle>
             <groupId>org.apache.jackrabbit</groupId>
             <artifactId>oak-lucene</artifactId>
-            <version>0.9-SNAPSHOT</version>
+            <version>0.8-r1520083</version>
         </bundle>
         
         <!-- Jackrabbit bundles that Oak 0.8 needs -->
@@ -563,4 +563,4 @@
             <version>1.0.0</version>
         </bundle>
     </startLevel>
-</bundles>
\ No newline at end of file
+</bundles>