Search in sources :

Example 1 with Track

use of me.lucko.luckperms.common.model.Track in project LuckPerms by lucko.

the class SqlDao method createAndLoadTrack.

@Override
public Track createAndLoadTrack(String name) throws SQLException {
    Track track = this.plugin.getTrackManager().getOrMake(name);
    track.getIoLock().lock();
    try {
        boolean exists = false;
        String groups = null;
        try (Connection c = this.provider.getConnection()) {
            try (PreparedStatement ps = c.prepareStatement(this.prefix.apply(TRACK_SELECT))) {
                ps.setString(1, track.getName());
                try (ResultSet rs = ps.executeQuery()) {
                    if (rs.next()) {
                        exists = true;
                        groups = rs.getString("groups");
                    }
                }
            }
        }
        if (exists) {
            // Track exists, let's load.
            track.setGroups(this.gson.fromJson(groups, LIST_STRING_TYPE));
        } else {
            String json = this.gson.toJson(track.getGroups());
            try (Connection c = this.provider.getConnection()) {
                try (PreparedStatement ps = c.prepareStatement(this.prefix.apply(TRACK_INSERT))) {
                    ps.setString(1, track.getName());
                    ps.setString(2, json);
                    ps.execute();
                }
            }
        }
    } finally {
        track.getIoLock().unlock();
    }
    return track;
}
Also used : Connection(java.sql.Connection) ResultSet(java.sql.ResultSet) PreparedStatement(java.sql.PreparedStatement) Track(me.lucko.luckperms.common.model.Track)

Example 2 with Track

use of me.lucko.luckperms.common.model.Track in project LuckPerms by lucko.

the class SqlDao method loadAllTracks.

@Override
public void loadAllTracks() throws SQLException {
    List<String> tracks = new ArrayList<>();
    try (Connection c = this.provider.getConnection()) {
        try (PreparedStatement ps = c.prepareStatement(this.prefix.apply(TRACK_SELECT_ALL))) {
            try (ResultSet rs = ps.executeQuery()) {
                while (rs.next()) {
                    tracks.add(rs.getString("name").toLowerCase());
                }
            }
        }
    }
    boolean success = true;
    for (String t : tracks) {
        try {
            loadTrack(t);
        } catch (Exception e) {
            e.printStackTrace();
            success = false;
        }
    }
    if (!success) {
        throw new RuntimeException("Exception occurred whilst loading a track");
    }
    TrackManager<?> tm = this.plugin.getTrackManager();
    tm.getAll().values().stream().filter(t -> !tracks.contains(t.getName())).forEach(tm::unload);
}
Also used : LogEntry(me.lucko.luckperms.api.LogEntry) AbstractDao(me.lucko.luckperms.common.storage.dao.AbstractDao) TypeToken(com.google.gson.reflect.TypeToken) Connection(java.sql.Connection) UserIdentifier(me.lucko.luckperms.common.references.UserIdentifier) AbstractConnectionFactory(me.lucko.luckperms.common.storage.dao.sql.connection.AbstractConnectionFactory) BulkUpdate(me.lucko.luckperms.common.bulkupdate.BulkUpdate) Function(java.util.function.Function) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) PlayerSaveResult(me.lucko.luckperms.common.storage.PlayerSaveResult) NodeModel(me.lucko.luckperms.common.node.NodeModel) SQLException(java.sql.SQLException) Gson(com.google.gson.Gson) ResultSet(java.sql.ResultSet) Map(java.util.Map) PostgreConnectionFactory(me.lucko.luckperms.common.storage.dao.sql.connection.hikari.PostgreConnectionFactory) LuckPermsPlugin(me.lucko.luckperms.common.plugin.LuckPermsPlugin) HeldPermission(me.lucko.luckperms.api.HeldPermission) ExtendedLogEntry(me.lucko.luckperms.common.actionlog.ExtendedLogEntry) GroupManager(me.lucko.luckperms.common.managers.group.GroupManager) NodeHeldPermission(me.lucko.luckperms.common.node.NodeHeldPermission) Set(java.util.Set) Log(me.lucko.luckperms.common.actionlog.Log) NodeFactory(me.lucko.luckperms.common.node.NodeFactory) UUID(java.util.UUID) ContextSetJsonSerializer(me.lucko.luckperms.common.contexts.ContextSetJsonSerializer) PreparedStatement(java.sql.PreparedStatement) Maps(com.google.common.collect.Maps) InputStreamReader(java.io.InputStreamReader) Collectors(java.util.stream.Collectors) StandardCharsets(java.nio.charset.StandardCharsets) Track(me.lucko.luckperms.common.model.Track) List(java.util.List) TrackManager(me.lucko.luckperms.common.managers.track.TrackManager) Type(java.lang.reflect.Type) SQLiteConnectionFactory(me.lucko.luckperms.common.storage.dao.sql.connection.file.SQLiteConnectionFactory) Statement(java.sql.Statement) Group(me.lucko.luckperms.common.model.Group) Optional(java.util.Optional) Node(me.lucko.luckperms.api.Node) BufferedReader(java.io.BufferedReader) User(me.lucko.luckperms.common.model.User) InputStream(java.io.InputStream) ArrayList(java.util.ArrayList) Connection(java.sql.Connection) ResultSet(java.sql.ResultSet) PreparedStatement(java.sql.PreparedStatement) SQLException(java.sql.SQLException)

Example 3 with Track

use of me.lucko.luckperms.common.model.Track in project LuckPerms by lucko.

the class ConfigurateDao method loadTrack.

@Override
public Optional<Track> loadTrack(String name) throws Exception {
    Track track = this.plugin.getTrackManager().getIfLoaded(name);
    if (track != null) {
        track.getIoLock().lock();
    }
    try {
        ConfigurationNode object = readFile(StorageLocation.TRACK, name);
        if (object == null) {
            return Optional.empty();
        }
        if (track == null) {
            track = this.plugin.getTrackManager().getOrMake(name);
            track.getIoLock().lock();
        }
        List<String> groups = object.getNode("groups").getChildrenList().stream().map(ConfigurationNode::getString).collect(ImmutableCollectors.toList());
        track.setGroups(groups);
    } catch (Exception e) {
        throw reportException(name, e);
    } finally {
        if (track != null) {
            track.getIoLock().unlock();
        }
    }
    return Optional.of(track);
}
Also used : ConfigurationNode(ninja.leaping.configurate.ConfigurationNode) SimpleConfigurationNode(ninja.leaping.configurate.SimpleConfigurationNode) Track(me.lucko.luckperms.common.model.Track) IOException(java.io.IOException)

Example 4 with Track

use of me.lucko.luckperms.common.model.Track in project LuckPerms by lucko.

the class MongoDao method createAndLoadTrack.

@Override
public Track createAndLoadTrack(String name) {
    Track track = this.plugin.getTrackManager().getOrMake(name);
    track.getIoLock().lock();
    try {
        MongoCollection<Document> c = this.database.getCollection(this.prefix + "tracks");
        try (MongoCursor<Document> cursor = c.find(new Document("_id", track.getName())).iterator()) {
            if (!cursor.hasNext()) {
                c.insertOne(trackToDoc(track));
            } else {
                Document d = cursor.next();
                // noinspection unchecked
                track.setGroups((List<String>) d.get("groups"));
            }
        }
    } finally {
        track.getIoLock().unlock();
    }
    return track;
}
Also used : Document(org.bson.Document) Track(me.lucko.luckperms.common.model.Track)

Example 5 with Track

use of me.lucko.luckperms.common.model.Track in project LuckPerms by lucko.

the class UserDemote method execute.

@Override
public CommandResult execute(LuckPermsPlugin plugin, Sender sender, User user, List<String> args, String label) throws CommandException {
    if (ArgumentPermissions.checkModifyPerms(plugin, sender, getPermission().get(), user)) {
        Message.COMMAND_NO_PERMISSION.send(sender);
        return CommandResult.NO_PERMISSION;
    }
    final String trackName = args.get(0).toLowerCase();
    if (!DataConstraints.TRACK_NAME_TEST.test(trackName)) {
        Message.TRACK_INVALID_ENTRY.send(sender, trackName);
        return CommandResult.INVALID_ARGS;
    }
    Track track = StorageAssistant.loadTrack(trackName, sender, plugin);
    if (track == null) {
        return CommandResult.LOADING_ERROR;
    }
    if (track.getSize() <= 1) {
        Message.TRACK_EMPTY.send(sender, track.getName());
        return CommandResult.STATE_ERROR;
    }
    boolean silent = args.remove("-s");
    MutableContextSet context = ArgumentParser.parseContext(1, args, plugin);
    if (ArgumentPermissions.checkContext(plugin, sender, getPermission().get(), context)) {
        Message.COMMAND_NO_PERMISSION.send(sender);
        return CommandResult.NO_PERMISSION;
    }
    // Load applicable groups
    Set<Node> nodes = user.getEnduringNodes().values().stream().filter(Node::isGroupNode).filter(Node::getValuePrimitive).filter(node -> node.getFullContexts().makeImmutable().equals(context.makeImmutable())).collect(Collectors.toSet());
    nodes.removeIf(g -> !track.containsGroup(g.getGroupName()));
    if (nodes.isEmpty()) {
        Message.USER_TRACK_ERROR_NOT_CONTAIN_GROUP.send(sender, user.getFriendlyName(), track.getName());
        return CommandResult.FAILURE;
    }
    if (nodes.size() != 1) {
        Message.TRACK_AMBIGUOUS_CALL.send(sender, user.getFriendlyName());
        return CommandResult.FAILURE;
    }
    final Node oldNode = Iterables.getFirst(nodes, null);
    final String old = oldNode.getGroupName();
    final String previous;
    try {
        previous = track.getPrevious(old);
    } catch (IllegalArgumentException e) {
        Message.TRACK_DOES_NOT_CONTAIN.send(sender, track.getName(), old);
        return CommandResult.STATE_ERROR;
    }
    if (ArgumentPermissions.checkArguments(plugin, sender, getPermission().get(), track.getName(), oldNode.getGroupName())) {
        Message.COMMAND_NO_PERMISSION.send(sender);
        return CommandResult.NO_PERMISSION;
    }
    if (previous == null) {
        user.unsetPermission(oldNode);
        Message.USER_DEMOTE_ENDOFTRACK.send(sender, track.getName(), user.getFriendlyName(), old);
        ExtendedLogEntry.build().actor(sender).acted(user).action("demote", track.getName(), context).build().submit(plugin, sender);
        StorageAssistant.save(user, sender, plugin);
        plugin.getEventFactory().handleUserDemote(user, track, old, null, sender);
        return CommandResult.SUCCESS;
    }
    Group previousGroup = plugin.getStorage().loadGroup(previous).join().orElse(null);
    if (previousGroup == null) {
        Message.USER_DEMOTE_ERROR_MALFORMED.send(sender, previous);
        return CommandResult.LOADING_ERROR;
    }
    user.unsetPermission(oldNode);
    user.setPermission(NodeFactory.buildGroupNode(previousGroup.getName()).withExtraContext(context).build());
    if (context.isEmpty() && user.getPrimaryGroup().getStoredValue().orElse(NodeFactory.DEFAULT_GROUP_NAME).equalsIgnoreCase(old)) {
        user.getPrimaryGroup().setStoredValue(previousGroup.getName());
    }
    Message.USER_DEMOTE_SUCCESS.send(sender, user.getFriendlyName(), track.getName(), old, previousGroup.getFriendlyName(), MessageUtils.contextSetToString(context));
    if (!silent) {
        Message.EMPTY.send(sender, MessageUtils.listToArrowSep(track.getGroups(), previousGroup.getName(), old, true));
    }
    ExtendedLogEntry.build().actor(sender).acted(user).action("demote", track.getName(), context).build().submit(plugin, sender);
    StorageAssistant.save(user, sender, plugin);
    plugin.getEventFactory().handleUserDemote(user, track, old, previousGroup.getName(), sender);
    return CommandResult.SUCCESS;
}
Also used : Iterables(com.google.common.collect.Iterables) CommandException(me.lucko.luckperms.common.command.abstraction.CommandException) SubCommand(me.lucko.luckperms.common.command.abstraction.SubCommand) LocaleManager(me.lucko.luckperms.common.locale.LocaleManager) MutableContextSet(me.lucko.luckperms.api.context.MutableContextSet) StorageAssistant(me.lucko.luckperms.common.command.utils.StorageAssistant) ArgumentParser(me.lucko.luckperms.common.command.utils.ArgumentParser) CommandSpec(me.lucko.luckperms.common.locale.command.CommandSpec) Message(me.lucko.luckperms.common.locale.message.Message) LuckPermsPlugin(me.lucko.luckperms.common.plugin.LuckPermsPlugin) ExtendedLogEntry(me.lucko.luckperms.common.actionlog.ExtendedLogEntry) MessageUtils(me.lucko.luckperms.common.command.utils.MessageUtils) Set(java.util.Set) NodeFactory(me.lucko.luckperms.common.node.NodeFactory) Sender(me.lucko.luckperms.common.sender.Sender) Collectors(java.util.stream.Collectors) CommandResult(me.lucko.luckperms.common.command.CommandResult) CommandPermission(me.lucko.luckperms.common.command.access.CommandPermission) Track(me.lucko.luckperms.common.model.Track) List(java.util.List) TabCompletions(me.lucko.luckperms.common.command.utils.TabCompletions) Group(me.lucko.luckperms.common.model.Group) Node(me.lucko.luckperms.api.Node) DataConstraints(me.lucko.luckperms.common.storage.DataConstraints) ArgumentPermissions(me.lucko.luckperms.common.command.access.ArgumentPermissions) User(me.lucko.luckperms.common.model.User) Predicates(me.lucko.luckperms.common.utils.Predicates) Group(me.lucko.luckperms.common.model.Group) MutableContextSet(me.lucko.luckperms.api.context.MutableContextSet) Node(me.lucko.luckperms.api.Node) Track(me.lucko.luckperms.common.model.Track)

Aggregations

Track (me.lucko.luckperms.common.model.Track)21 Group (me.lucko.luckperms.common.model.Group)10 User (me.lucko.luckperms.common.model.User)9 List (java.util.List)7 Set (java.util.Set)7 Collectors (java.util.stream.Collectors)7 LuckPermsPlugin (me.lucko.luckperms.common.plugin.LuckPermsPlugin)7 Node (me.lucko.luckperms.api.Node)6 Sender (me.lucko.luckperms.common.sender.Sender)6 CommandResult (me.lucko.luckperms.common.command.CommandResult)5 CommandPermission (me.lucko.luckperms.common.command.access.CommandPermission)5 LocaleManager (me.lucko.luckperms.common.locale.LocaleManager)5 CommandSpec (me.lucko.luckperms.common.locale.command.CommandSpec)5 Message (me.lucko.luckperms.common.locale.message.Message)5 Predicates (me.lucko.luckperms.common.utils.Predicates)5 HashSet (java.util.HashSet)4 UUID (java.util.UUID)4 MutableContextSet (me.lucko.luckperms.api.context.MutableContextSet)4 SubCommand (me.lucko.luckperms.common.command.abstraction.SubCommand)4 MessageUtils (me.lucko.luckperms.common.command.utils.MessageUtils)4