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);
}
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);
}
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;
}
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;
}
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();
}
Aggregations