001package org.nuxeo.segment.io;
002
003import java.security.Principal;
004import java.util.ArrayList;
005import java.util.List;
006
007import org.nuxeo.common.xmap.annotation.XNode;
008import org.nuxeo.common.xmap.annotation.XNodeList;
009import org.nuxeo.common.xmap.annotation.XObject;
010import org.nuxeo.ecm.core.api.NuxeoPrincipal;
011import org.nuxeo.ecm.platform.usermanager.UserManager;
012import org.nuxeo.runtime.api.Framework;
013
014/**
015 *
016 * @author <a href="mailto:tdelprat@nuxeo.com">Tiry</a>
017 *
018 */
019@XObject("userFilter")
020public class SegmentIOUserFilter {
021
022    @XNode("enableAnonymous")
023    protected boolean enableAnonymous = false;
024
025    @XNodeList(value = "blackListedUser", type = ArrayList.class, componentType = String.class)
026    protected List<String> blackListedUsers;
027
028    protected String anonymousUserId = null;
029
030    public boolean isEnableAnonymous() {
031        return enableAnonymous;
032    }
033
034    public List<String> getBlackListedUsers() {
035        return blackListedUsers;
036    }
037
038    public String getAnonymousUserId() {
039        if (anonymousUserId == null) {
040            UserManager um = Framework.getLocalService(UserManager.class);
041            if (um==null && Framework.isTestModeSet()) {
042                return "Guest";
043            }
044            anonymousUserId = um.getAnonymousUserId();
045        }
046        return anonymousUserId;
047    }
048
049    public boolean canTrack(String principalName) {
050
051        if (!enableAnonymous && principalName.equals(getAnonymousUserId())) {
052            return false;
053        }
054        if (blackListedUsers != null
055                && blackListedUsers.contains(principalName)) {
056            return false;
057        }
058        return true;
059    }
060
061}