@Override public boolean init(@NotNull Session session, @NotNull Root root, @NotNull NamePathMapper namePathMapper, boolean isWorkspaceImport, int uuidBehavior, @NotNull ReferenceChangeTracker referenceTracker, @NotNull SecurityProvider securityProvider) { isSystemSession = root.getContentSession().getAuthInfo().getPrincipals().contains(SystemPrincipal.INSTANCE); return true; }
@Nullable Tree getAuthorizableByPrincipal(@NotNull Principal principal) { if (principal instanceof TreeBasedPrincipal) { return root.getTree(((TreeBasedPrincipal) principal).getOakPath()); } // NOTE: in contrast to JR2 the extra shortcut for ID==principalName // can be omitted as principals names are stored in user defined // index as well. try { StringBuilder stmt = new StringBuilder(); stmt.append("SELECT * FROM [").append(UserConstants.NT_REP_AUTHORIZABLE).append(']'); stmt.append(" WHERE [").append(UserConstants.REP_PRINCIPAL_NAME).append("] = $principalName"); stmt.append(QueryEngine.INTERNAL_SQL2_QUERY); Result result = root.getQueryEngine().executeQuery(stmt.toString(), Query.JCR_SQL2, 1, 0, Collections.singletonMap("principalName", PropertyValues.newString(principal.getName())), NO_MAPPINGS); Iterator<? extends ResultRow> rows = result.getRows().iterator(); if (rows.hasNext()) { String path = rows.next().getPath(); return root.getTree(path); } } catch (ParseException ex) { log.error("Failed to retrieve authorizable by principal", ex); } return null; }
@Test public void testGetProperties() throws Exception { setupPermission("/a", testPrincipal, false, PrivilegeConstants.REP_READ_PROPERTIES); testRoot.refresh(); Tree a = testRoot.getTree("/a"); Iterable<? extends PropertyState> props = a.getProperties(); assertFalse(props.iterator().hasNext()); } }
@Before public void before() throws Exception { session = createRepository().login(null, null); root = session.getLatestRoot(); qe = root.getQueryEngine(); root.getTree("/oak:index/counter").setProperty("resolution", 100); root.getTree("/oak:index/counter").setProperty("seed", 1); Tree content = root.getTree("/").addChild("content"); // add 200'000 nodes under /content for (int i = 0; i < 2000; i++) { Tree t = content.addChild("test" + i); for (int j = 0; j < 100; j++) { t.addChild("n" + j); } } root.commit(); runAsyncIndex(); }
@Test public void rebaseWithMove() throws CommitFailedException { Root root1 = session.getLatestRoot(); Root root2 = session.getLatestRoot(); checkEqual(root1.getTree("/"), root2.getTree("/")); root2.getTree("/").addChild("one").addChild("two").addChild("three") .setProperty("p1", "V1"); root2.commit(); root1.move("/x", "/y/x-moved"); root1.rebase(); root2.move("/x", "/y/x-moved"); checkEqual(root1.getTree("/"), (root2.getTree("/"))); }
@Override public void after() throws Exception { try { root.getTree("/test").remove(); if (root.hasPendingChanges()) { root.commit(); } } finally { super.after(); } }
@Test public void move() throws CommitFailedException { Root root = session.getLatestRoot(); Tree tree = root.getTree("/"); Tree y = tree.getChild("y"); Tree x = tree.getChild("x"); assertTrue(x.exists()); assertFalse(root.hasPendingChanges()); root.move("/x", "/y/xx"); assertTrue(root.hasPendingChanges()); assertFalse(tree.hasChild("x")); assertTrue(y.hasChild("xx")); assertEquals("/y/xx", x.getPath()); root.commit(); assertFalse(root.hasPendingChanges()); assertFalse(tree.hasChild("x")); assertTrue(tree.hasChild("y")); assertTrue(tree.getChild("y").hasChild("xx")); }
@Before public void before() throws Exception { super.before(); testPrincipal = getTestUser().getPrincipal(); NodeUtil rootNode = new NodeUtil(root.getTree("/"), namePathMapper); NodeUtil testNode = rootNode.addChild("testPath", JcrConstants.NT_UNSTRUCTURED); testNode.addChild("childNode", JcrConstants.NT_UNSTRUCTURED); addAcl(testPath, EveryonePrincipal.getInstance()); addAcl(childPath, EveryonePrincipal.getInstance()); root.commit(); permissionStore = new PermissionStoreImpl(root, root.getContentSession().getWorkspaceName(), getConfig(AuthorizationConfiguration.class).getRestrictionProvider()); }
@Test public void testGetTokenInfoFromInvalidLocation4() throws Exception { TokenInfo info = tokenProvider.createToken(userId, Collections.<String, Object>emptyMap()); Tree tokenTree = getTokenTree(info); assertNotNull(tokenProvider.getTokenInfo(info.getToken())); TokenInfo info2 = null; try { Tree adminTree = root.getTree(getUserManager(root).getAuthorizable(adminSession.getAuthInfo().getUserID()).getPath()); NodeUtil node = new NodeUtil(adminTree).getOrAddChild(TOKENS_NODE_NAME, JcrConstants.NT_UNSTRUCTURED); assertTrue(root.move(tokenTree.getPath(), node.getTree().getPath() + '/' + tokenTree.getName())); info2 = tokenProvider.getTokenInfo(info.getToken()); assertNotNull(info2); assertFalse(info2.matches(new TokenCredentials(info.getToken()))); } finally { root.refresh(); } }
@Test public void testSyncMembershipDepthNoSync() throws Exception { ExternalUser externalUser = idp.listUsers().next(); Authorizable a = syncCtx.createUser(externalUser); root.commit(); assertTrue(externalUser.getDeclaredGroups().iterator().hasNext()); syncCtx.syncMembership(externalUser, a, 0); assertFalse(root.hasPendingChanges()); syncCtx.syncMembership(externalUser, a, -1); assertFalse(root.hasPendingChanges()); }
@NotNull public QueryEngine getQueryEngine() { return root.getQueryEngine(); }
@After public void tearDown() { root.refresh(); root = null; }
@Test public void testCreateRemoveGroup() throws RepositoryException { Group g = mgr.createGroup("g"); assertFalse(root.hasPendingChanges()); g.remove(); assertFalse(root.hasPendingChanges()); }
@Override public void apply(Root root) throws RemoteCommitException { logger.debug("performing 'move' operation on source={}, target={}", source, target); boolean success = root.move(source, target); if (success) { return; } throw new RemoteCommitException("unable to move the tree"); }