ACEUtils.java 3.11 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  javax.jcr.RepositoryException
 *  javax.jcr.Session
 *  javax.jcr.Value
 *  javax.jcr.ValueFactory
 *  javax.jcr.security.AccessControlManager
 *  javax.jcr.security.AccessControlPolicy
 *  javax.jcr.security.Privilege
 *  org.apache.commons.lang.StringUtils
 *  org.apache.jackrabbit.api.security.JackrabbitAccessControlList
 *  org.apache.jackrabbit.api.security.principal.PrincipalManager
 *  org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.day.cq.wcm.msm.impl.actions.util;

import com.day.cq.wcm.msm.impl.actions.util.AccessControlEntry;
import java.security.Principal;
import java.util.HashMap;
import java.util.Map;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Value;
import javax.jcr.ValueFactory;
import javax.jcr.security.AccessControlManager;
import javax.jcr.security.AccessControlPolicy;
import javax.jcr.security.Privilege;
import org.apache.commons.lang.StringUtils;
import org.apache.jackrabbit.api.security.JackrabbitAccessControlList;
import org.apache.jackrabbit.api.security.principal.PrincipalManager;
import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ACEUtils {
    private static final Logger log = LoggerFactory.getLogger(ACEUtils.class);
    private static final String REP_GLOB = "rep:glob";

    public static boolean addAccessControlEntry(Session session, String absPath, Principal principal, Privilege[] privileges, AccessControlEntry ace) throws RepositoryException {
        JackrabbitAccessControlList acl = AccessControlUtils.getAccessControlList((Session)session, (String)absPath);
        if (acl != null) {
            String restrictionRule = ace.getRestrictionPattern();
            HashMap<String, Value> restrictions = new HashMap<String, Value>();
            if (restrictionRule != null) {
                ValueFactory valueFactory = session.getValueFactory();
                Value ruleRestrictionValue = valueFactory.createValue(restrictionRule, 1);
                restrictions.put("rep:glob", ruleRestrictionValue);
            }
            if (acl.addEntry(principal, privileges, ace.isAllow(), restrictions)) {
                session.getAccessControlManager().setPolicy(absPath, (AccessControlPolicy)acl);
                return true;
            }
        }
        return false;
    }

    public static Principal getPrincipal(AccessControlEntry ace, PrincipalManager prManager) {
        Principal foundPrincipal = null;
        String principalName = null;
        if (ace != null) {
            principalName = ace.getPrincipalName();
        }
        if (StringUtils.isNotEmpty((String)principalName) && prManager != null && prManager.hasPrincipal(principalName)) {
            foundPrincipal = prManager.getPrincipal(principalName);
        }
        if (foundPrincipal == null) {
            log.error("Cannot find invalid principal {}!", (Object)principalName);
        }
        return foundPrincipal;
    }
}