2011-08-30 23:26:23 +02:00
package com.earth2me.essentials.perm ;
2014-06-19 02:38:28 +01:00
import com.earth2me.essentials.Essentials ;
2015-04-14 23:06:16 -05:00
import org.bukkit.entity.Player ;
import org.bukkit.plugin.Plugin ;
import org.bukkit.plugin.PluginManager ;
2015-06-02 17:33:25 -06:00
import java.util.Arrays ;
2011-08-30 23:26:23 +02:00
import java.util.Collections ;
import java.util.List ;
import java.util.logging.Level ;
2015-04-14 23:06:16 -05:00
public class PermissionsHandler implements IPermissionsHandler {
private transient IPermissionsHandler handler = new NullPermissionsHandler ( ) ;
private transient String defaultGroup = " default " ;
private final transient Essentials ess ;
private transient boolean useSuperperms = false ;
public PermissionsHandler ( final Essentials plugin ) {
this . ess = plugin ;
}
public PermissionsHandler ( final Essentials plugin , final boolean useSuperperms ) {
this . ess = plugin ;
this . useSuperperms = useSuperperms ;
}
public PermissionsHandler ( final Essentials plugin , final String defaultGroup ) {
this . ess = plugin ;
this . defaultGroup = defaultGroup ;
}
@Override
public String getGroup ( final Player base ) {
final long start = System . nanoTime ( ) ;
String group = handler . getGroup ( base ) ;
if ( group = = null ) {
group = defaultGroup ;
}
2015-04-22 11:26:41 -05:00
checkPermLag ( start , String . format ( " Getting group for %s " , base . getName ( ) ) ) ;
2015-04-14 23:06:16 -05:00
return group ;
}
@Override
public List < String > getGroups ( final Player base ) {
final long start = System . nanoTime ( ) ;
List < String > groups = handler . getGroups ( base ) ;
if ( groups = = null | | groups . isEmpty ( ) ) {
groups = Collections . singletonList ( defaultGroup ) ;
}
2015-04-22 11:26:41 -05:00
checkPermLag ( start , String . format ( " Getting groups for %s " , base . getName ( ) ) ) ;
2015-04-14 23:06:16 -05:00
return Collections . unmodifiableList ( groups ) ;
}
@Override
public boolean canBuild ( final Player base , final String group ) {
return handler . canBuild ( base , group ) ;
}
@Override
public boolean inGroup ( final Player base , final String group ) {
final long start = System . nanoTime ( ) ;
final boolean result = handler . inGroup ( base , group ) ;
2015-04-22 11:26:41 -05:00
checkPermLag ( start , String . format ( " Checking if %s is in group %s " , base . getName ( ) , group ) ) ;
2015-04-14 23:06:16 -05:00
return result ;
}
@Override
public boolean hasPermission ( final Player base , final String node ) {
return handler . hasPermission ( base , node ) ;
}
@Override
public String getPrefix ( final Player base ) {
final long start = System . nanoTime ( ) ;
String prefix = handler . getPrefix ( base ) ;
if ( prefix = = null ) {
prefix = " " ;
}
2015-04-22 11:26:41 -05:00
checkPermLag ( start , String . format ( " Getting prefix for %s " , base . getName ( ) ) ) ;
2015-04-14 23:06:16 -05:00
return prefix ;
}
@Override
public String getSuffix ( final Player base ) {
final long start = System . nanoTime ( ) ;
String suffix = handler . getSuffix ( base ) ;
if ( suffix = = null ) {
suffix = " " ;
}
2015-04-22 11:26:41 -05:00
checkPermLag ( start , String . format ( " Getting suffix for %s " , base . getName ( ) ) ) ;
2015-04-14 23:06:16 -05:00
return suffix ;
}
public void checkPermissions ( ) {
final PluginManager pluginManager = ess . getServer ( ) . getPluginManager ( ) ;
2015-06-03 09:53:24 -06:00
String enabledPermsPlugin = " " ;
List < String > specialCasePlugins = Arrays . asList ( " PermissionsEx " , " GroupManager " ,
" SimplyPerms " , " Privileges " , " bPermissions " , " zPermissions " , " PermissionsBukkit " ,
" DroxPerms " , " xPerms " ) ;
for ( Plugin plugin : pluginManager . getPlugins ( ) ) {
if ( specialCasePlugins . contains ( plugin . getName ( ) ) ) {
enabledPermsPlugin = plugin . getName ( ) ;
break ;
}
}
2015-04-22 10:42:27 -05:00
final Plugin vaultAPI = pluginManager . getPlugin ( " Vault " ) ;
2015-06-02 18:08:44 -06:00
if ( vaultAPI ! = null & & vaultAPI . isEnabled ( ) ) {
2015-06-03 07:04:39 -06:00
if ( ! ( handler instanceof AbstractVaultHandler ) ) {
AbstractVaultHandler vaultHandler ;
// No switch statements for Strings, this is Java 6
if ( enabledPermsPlugin . equals ( " PermissionsEx " ) ) {
vaultHandler = new PermissionsExHandler ( ) ;
} else if ( enabledPermsPlugin . equals ( " GroupManager " ) ) {
vaultHandler = new GroupManagerHandler ( pluginManager . getPlugin ( enabledPermsPlugin ) ) ;
} else if ( enabledPermsPlugin . equals ( " SimplyPerms " ) ) {
vaultHandler = new SimplyPermsHandler ( ) ;
} else if ( enabledPermsPlugin . equals ( " Privileges " ) ) {
vaultHandler = new PrivilegesHandler ( ) ;
} else if ( enabledPermsPlugin . equals ( " bPermissions " ) ) {
vaultHandler = new BPermissions2Handler ( ) ;
} else {
vaultHandler = new GenericVaultHandler ( ) ;
}
2015-06-02 17:33:25 -06:00
if ( enabledPermsPlugin . equals ( " " ) ) {
enabledPermsPlugin = " generic " ;
2015-06-02 13:08:53 -06:00
}
2015-06-03 07:04:39 -06:00
vaultHandler . setupProviders ( ) ;
2015-06-03 09:53:24 -06:00
ess . getLogger ( ) . info ( " Using Vault based permissions ( " + enabledPermsPlugin + " ) " ) ;
handler = vaultHandler ;
2015-04-14 23:06:16 -05:00
}
2015-06-03 07:04:39 -06:00
return ;
2015-04-14 23:06:16 -05:00
}
2015-06-03 09:53:24 -06:00
if ( ! enabledPermsPlugin . equals ( " " ) ) {
ess . getLogger ( ) . warning ( " Detected supported permissions plugin " + enabledPermsPlugin + " without Vault installed. " ) ;
ess . getLogger ( ) . warning ( " Features such as chat prefixes/suffixes and group-related functionality will not " +
" work until you install Vault. " ) ;
useSuperperms = true ;
}
2015-04-14 23:06:16 -05:00
if ( useSuperperms ) {
if ( ! ( handler instanceof SuperpermsHandler ) ) {
2015-06-02 13:08:53 -06:00
ess . getLogger ( ) . info ( " Using superperms based permissions. " ) ;
2015-04-14 23:06:16 -05:00
handler = new SuperpermsHandler ( ) ;
}
} else {
if ( ! ( handler instanceof ConfigPermissionsHandler ) ) {
2015-06-03 07:44:18 -06:00
ess . getLogger ( ) . info ( " Using config file enhanced permissions. " ) ;
2015-06-02 13:08:53 -06:00
ess . getLogger ( ) . info ( " Permissions listed in as player-commands will be given to all users. " ) ;
2015-04-14 23:06:16 -05:00
handler = new ConfigPermissionsHandler ( ess ) ;
}
}
}
public void setUseSuperperms ( final boolean useSuperperms ) {
this . useSuperperms = useSuperperms ;
}
public String getName ( ) {
return handler . getClass ( ) . getSimpleName ( ) . replace ( " Handler " , " " ) ;
}
2015-04-22 11:26:41 -05:00
private void checkPermLag ( long start , String summary ) {
2015-04-14 23:06:16 -05:00
final long elapsed = System . nanoTime ( ) - start ;
if ( elapsed > ess . getSettings ( ) . getPermissionsLagWarning ( ) ) {
2015-04-22 11:26:41 -05:00
ess . getLogger ( ) . log ( Level . WARNING , String . format ( " Permissions lag notice with (%s). Response took %fms. Summary: %s " , getName ( ) , elapsed / 1000000 . 0 , summary ) ) ;
2015-04-14 23:06:16 -05:00
}
}
2015-04-22 11:26:41 -05:00
private void checkPermLag ( long start ) {
checkPermLag ( start , " not defined " ) ;
}
2011-08-30 23:26:23 +02:00
}