Files
LoginSystem/src/main/java/fr/xephi/authme/permission/handlers/VaultHandler.java
T
David Maes d969d314b3 LuckPerm: keep contexts active after reload of groups (#2186)
* Use context aware groups

* Revert "Use context aware groups"

This reverts commit 5adc6ef7

* Keep luckperm contexts after authentication

* Code cleanup

* Code cleanup

* Fix nullpointer for context maps

* Code cleanup

* Use uuids for sqlite and postgresql

* Revert "Use uuids for sqlite and postgresql"

This reverts commit 05296e5f23bd4379a89647656f08432c718e6f9c.

* Cleanup imports

* Fix test

Co-authored-by: David Maes <david.maes@kbc.be>
2021-08-21 22:19:45 +02:00

106 lines
3.5 KiB
Java

package fr.xephi.authme.permission.handlers;
import com.google.common.annotations.VisibleForTesting;
import fr.xephi.authme.data.limbo.UserGroup;
import fr.xephi.authme.permission.PermissionNode;
import fr.xephi.authme.permission.PermissionsSystemType;
import net.milkbowl.vault.permission.Permission;
import org.bukkit.OfflinePlayer;
import org.bukkit.Server;
import org.bukkit.plugin.RegisteredServiceProvider;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import static java.util.stream.Collectors.toList;
/**
* Handler for permissions via Vault.
*
* @see <a href="https://dev.bukkit.org/projects/vault">Vault Bukkit page</a>
* @see <a href="https://github.com/milkbowl/Vault">Vault on Github</a>
*/
public class VaultHandler implements PermissionHandler {
private Permission vaultProvider;
public VaultHandler(Server server) throws PermissionHandlerException {
this.vaultProvider = getVaultPermission(server);
}
/**
* Returns the Vault Permission interface.
*
* @param server the bukkit server instance
* @return the vault permission instance
* @throws PermissionHandlerException if the vault permission instance cannot be retrieved
*/
@VisibleForTesting
Permission getVaultPermission(Server server) throws PermissionHandlerException {
// Get the permissions provider service
RegisteredServiceProvider<Permission> permissionProvider = server
.getServicesManager().getRegistration(Permission.class);
if (permissionProvider == null) {
throw new PermissionHandlerException("Could not load permissions provider service");
}
// Get the Vault provider and make sure it's valid
Permission vaultPerms = permissionProvider.getProvider();
if (vaultPerms == null) {
throw new PermissionHandlerException("Could not load Vault permissions provider");
}
return vaultPerms;
}
@Override
public boolean addToGroup(OfflinePlayer player, UserGroup group) {
return vaultProvider.playerAddGroup(null, player, group.getGroupName());
}
@Override
public boolean hasGroupSupport() {
return vaultProvider.hasGroupSupport();
}
@Override
public boolean hasPermissionOffline(String name, PermissionNode node) {
return vaultProvider.has((String) null, name, node.getNode());
}
@Override
public boolean isInGroup(OfflinePlayer player, UserGroup group) {
return vaultProvider.playerInGroup(null, player, group.getGroupName());
}
@Override
public boolean removeFromGroup(OfflinePlayer player, UserGroup group) {
return vaultProvider.playerRemoveGroup(null, player, group.getGroupName());
}
@Override
public boolean setGroup(OfflinePlayer player, UserGroup group) {
for (UserGroup g : getGroups(player)) {
removeFromGroup(player, g);
}
return vaultProvider.playerAddGroup(null, player, group.getGroupName());
}
@Override
public List<UserGroup> getGroups(OfflinePlayer player) {
String[] groups = vaultProvider.getPlayerGroups(null, player);
return groups == null ? Collections.emptyList() : Arrays.stream(groups).map(UserGroup::new).collect(toList());
}
@Override
public UserGroup getPrimaryGroup(OfflinePlayer player) {
return new UserGroup(vaultProvider.getPrimaryGroup(null, player));
}
@Override
public PermissionsSystemType getPermissionSystem() {
return PermissionsSystemType.VAULT;
}
}