Search in sources :

Example 31 with Node

use of me.lucko.luckperms.api.Node in project LuckPerms by lucko.

the class MongoDao method loadGroup.

@Override
public Optional<Group> loadGroup(String name) {
    Group group = this.plugin.getGroupManager().getIfLoaded(name);
    if (group != null) {
        group.getIoLock().lock();
    }
    try {
        MongoCollection<Document> c = this.database.getCollection(this.prefix + "groups");
        try (MongoCursor<Document> cursor = c.find(new Document("_id", name)).iterator()) {
            if (!cursor.hasNext()) {
                return Optional.empty();
            }
            if (group == null) {
                group = this.plugin.getGroupManager().getOrMake(name);
                group.getIoLock().lock();
            }
            Document d = cursor.next();
            Set<Node> nodes = nodesFromDoc(d).stream().map(NodeModel::toNode).collect(Collectors.toSet());
            group.setEnduringNodes(nodes);
        }
    } finally {
        if (group != null) {
            group.getIoLock().unlock();
        }
    }
    group.getRefreshBuffer().requestDirectly();
    return Optional.of(group);
}
Also used : Group(me.lucko.luckperms.common.model.Group) Node(me.lucko.luckperms.api.Node) Document(org.bson.Document)

Example 32 with Node

use of me.lucko.luckperms.api.Node in project LuckPerms by lucko.

the class SqlDao method loadGroup.

@Override
public Optional<Group> loadGroup(String name) throws SQLException {
    // Check the group actually exists
    List<String> groups = new ArrayList<>();
    try (Connection c = this.provider.getConnection()) {
        try (PreparedStatement ps = c.prepareStatement(this.prefix.apply(GROUP_SELECT_ALL))) {
            try (ResultSet rs = ps.executeQuery()) {
                while (rs.next()) {
                    groups.add(rs.getString("name").toLowerCase());
                }
            }
        }
    }
    if (!groups.contains(name)) {
        return Optional.empty();
    }
    Group group = this.plugin.getGroupManager().getOrMake(name);
    group.getIoLock().lock();
    try {
        List<NodeModel> data = new ArrayList<>();
        try (Connection c = this.provider.getConnection()) {
            try (PreparedStatement ps = c.prepareStatement(this.prefix.apply(GROUP_PERMISSIONS_SELECT))) {
                ps.setString(1, group.getName());
                try (ResultSet rs = ps.executeQuery()) {
                    while (rs.next()) {
                        String permission = rs.getString("permission");
                        boolean value = rs.getBoolean("value");
                        String server = rs.getString("server");
                        String world = rs.getString("world");
                        long expiry = rs.getLong("expiry");
                        String contexts = rs.getString("contexts");
                        data.add(deserializeNode(permission, value, server, world, expiry, contexts));
                    }
                }
            }
        }
        if (!data.isEmpty()) {
            Set<Node> nodes = data.stream().map(NodeModel::toNode).collect(Collectors.toSet());
            group.setEnduringNodes(nodes);
        } else {
            group.clearNodes();
        }
    } finally {
        group.getIoLock().unlock();
    }
    group.getRefreshBuffer().requestDirectly();
    return Optional.of(group);
}
Also used : Group(me.lucko.luckperms.common.model.Group) Node(me.lucko.luckperms.api.Node) ArrayList(java.util.ArrayList) Connection(java.sql.Connection) PreparedStatement(java.sql.PreparedStatement) NodeModel(me.lucko.luckperms.common.node.NodeModel) ResultSet(java.sql.ResultSet)

Example 33 with Node

use of me.lucko.luckperms.api.Node in project LuckPerms by lucko.

the class SqlDao method loadUser.

@Override
public User loadUser(UUID uuid, String username) throws SQLException {
    User user = this.plugin.getUserManager().getOrMake(UserIdentifier.of(uuid, username));
    user.getIoLock().lock();
    try {
        List<NodeModel> data = new ArrayList<>();
        String primaryGroup = null;
        String userName = null;
        // Collect user permissions
        try (Connection c = this.provider.getConnection()) {
            try (PreparedStatement ps = c.prepareStatement(this.prefix.apply(USER_PERMISSIONS_SELECT))) {
                ps.setString(1, user.getUuid().toString());
                try (ResultSet rs = ps.executeQuery()) {
                    while (rs.next()) {
                        String permission = rs.getString("permission");
                        boolean value = rs.getBoolean("value");
                        String server = rs.getString("server");
                        String world = rs.getString("world");
                        long expiry = rs.getLong("expiry");
                        String contexts = rs.getString("contexts");
                        data.add(deserializeNode(permission, value, server, world, expiry, contexts));
                    }
                }
            }
        }
        // Collect user meta (username & primary group)
        try (Connection c = this.provider.getConnection()) {
            try (PreparedStatement ps = c.prepareStatement(this.prefix.apply(PLAYER_SELECT_BY_UUID))) {
                ps.setString(1, user.getUuid().toString());
                try (ResultSet rs = ps.executeQuery()) {
                    if (rs.next()) {
                        userName = rs.getString("username");
                        primaryGroup = rs.getString("primary_group");
                    }
                }
            }
        }
        // update username & primary group
        if (primaryGroup == null) {
            primaryGroup = NodeFactory.DEFAULT_GROUP_NAME;
        }
        user.getPrimaryGroup().setStoredValue(primaryGroup);
        // Update their username to what was in the storage if the one in the local instance is null
        user.setName(userName, true);
        // If the user has any data in storage
        if (!data.isEmpty()) {
            Set<Node> nodes = data.stream().map(NodeModel::toNode).collect(Collectors.toSet());
            user.setEnduringNodes(nodes);
            // Save back to the store if data they were given any defaults or had permissions expire
            if (this.plugin.getUserManager().giveDefaultIfNeeded(user, false) | user.auditTemporaryPermissions()) {
                // This should be fine, as the lock will be acquired by the same thread.
                saveUser(user);
            }
        } else {
            // User has no data in storage.
            if (this.plugin.getUserManager().shouldSave(user)) {
                user.clearNodes();
                user.getPrimaryGroup().setStoredValue(null);
                this.plugin.getUserManager().giveDefaultIfNeeded(user, false);
            }
        }
    } finally {
        user.getIoLock().unlock();
    }
    user.getRefreshBuffer().requestDirectly();
    return user;
}
Also used : NodeModel(me.lucko.luckperms.common.node.NodeModel) User(me.lucko.luckperms.common.model.User) Node(me.lucko.luckperms.api.Node) ArrayList(java.util.ArrayList) Connection(java.sql.Connection) ResultSet(java.sql.ResultSet) PreparedStatement(java.sql.PreparedStatement)

Example 34 with Node

use of me.lucko.luckperms.api.Node in project LuckPerms by lucko.

the class NodeWithContextComparator method compare.

@Override
public int compare(LocalizedNode one, LocalizedNode two) {
    Node o1 = one.getNode();
    Node o2 = two.getNode();
    if (o1.equals(o2)) {
        return 0;
    }
    if (o1.isOverride() != o2.isOverride()) {
        return o1.isOverride() ? 1 : -1;
    }
    if (o1.isServerSpecific() != o2.isServerSpecific()) {
        return o1.isServerSpecific() ? 1 : -1;
    }
    if (o1.isWorldSpecific() != o2.isWorldSpecific()) {
        return o1.isWorldSpecific() ? 1 : -1;
    }
    if (o1.getContexts().size() != o2.getContexts().size()) {
        return o1.getContexts().size() > o2.getContexts().size() ? 1 : -1;
    }
    if (o1.isTemporary() != o2.isTemporary()) {
        return o1.isTemporary() ? 1 : -1;
    }
    if (o1.isWildcard() != o2.isWildcard()) {
        return o1.isWildcard() ? 1 : -1;
    }
    if (o1.isTemporary()) {
        return o1.getSecondsTilExpiry() < o2.getSecondsTilExpiry() ? 1 : -1;
    }
    if (o1.isWildcard()) {
        return o1.getWildcardLevel() > o2.getWildcardLevel() ? 1 : -1;
    }
    return CollationKeyCache.compareStrings(o1.getPermission(), o2.getPermission()) == 1 ? -1 : 1;
}
Also used : Node(me.lucko.luckperms.api.Node) LocalizedNode(me.lucko.luckperms.api.LocalizedNode)

Example 35 with Node

use of me.lucko.luckperms.api.Node in project LuckPerms by lucko.

the class ParentsByWeightHolder method calculateValue.

@Override
protected String calculateValue() {
    Contexts contexts = this.user.getPlugin().getContextForUser(this.user).orElse(null);
    if (contexts == null) {
        contexts = this.user.getPlugin().getContextManager().getStaticContexts();
    }
    Set<Group> groups = new LinkedHashSet<>();
    for (Node node : this.user.getOwnNodes(contexts.getContexts())) {
        if (!node.getValuePrimitive() || !node.isGroupNode()) {
            continue;
        }
        Group group = this.user.getPlugin().getGroupManager().getIfLoaded(node.getGroupName());
        if (group != null) {
            groups.add(group);
        }
    }
    Group bestGroup = null;
    if (!groups.isEmpty()) {
        int best = 0;
        for (Group g : groups) {
            int weight = g.getWeight().orElse(0);
            if (bestGroup == null || g.getWeight().orElse(0) > best) {
                bestGroup = g;
                best = weight;
            }
        }
    }
    return bestGroup == null ? null : bestGroup.getName();
}
Also used : LinkedHashSet(java.util.LinkedHashSet) Group(me.lucko.luckperms.common.model.Group) Node(me.lucko.luckperms.api.Node) Contexts(me.lucko.luckperms.api.Contexts)

Aggregations

Node (me.lucko.luckperms.api.Node)56 LocalizedNode (me.lucko.luckperms.api.LocalizedNode)15 Group (me.lucko.luckperms.common.model.Group)15 User (me.lucko.luckperms.common.model.User)13 Map (java.util.Map)12 ImmutableLocalizedNode (me.lucko.luckperms.common.node.ImmutableLocalizedNode)12 List (java.util.List)11 NodeFactory (me.lucko.luckperms.common.node.NodeFactory)10 Message (me.lucko.luckperms.common.locale.message.Message)9 LuckPermsPlugin (me.lucko.luckperms.common.plugin.LuckPermsPlugin)9 Sender (me.lucko.luckperms.common.sender.Sender)9 Collectors (java.util.stream.Collectors)8 MutableContextSet (me.lucko.luckperms.api.context.MutableContextSet)8 CommandResult (me.lucko.luckperms.common.command.CommandResult)8 CommandPermission (me.lucko.luckperms.common.command.access.CommandPermission)8 LocaleManager (me.lucko.luckperms.common.locale.LocaleManager)8 CommandSpec (me.lucko.luckperms.common.locale.command.CommandSpec)8 Predicates (me.lucko.luckperms.common.utils.Predicates)8 ArrayList (java.util.ArrayList)7 HashMap (java.util.HashMap)7