250 lines
8.0 KiB
Java
250 lines
8.0 KiB
Java
package fr.xephi.authme;
|
|
|
|
import java.io.File;
|
|
import java.io.FileWriter;
|
|
import java.util.Iterator;
|
|
import java.util.Random;
|
|
import java.util.Scanner;
|
|
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.GameMode;
|
|
import org.bukkit.Location;
|
|
import org.bukkit.World;
|
|
import org.bukkit.entity.Player;
|
|
|
|
import fr.xephi.authme.api.API;
|
|
import fr.xephi.authme.cache.limbo.LimboCache;
|
|
import fr.xephi.authme.cache.limbo.LimboPlayer;
|
|
import fr.xephi.authme.events.AuthMeTeleportEvent;
|
|
import fr.xephi.authme.settings.Settings;
|
|
|
|
public class Utils {
|
|
|
|
private String currentGroup;
|
|
private static Utils singleton;
|
|
int id;
|
|
public AuthMe plugin;
|
|
|
|
public Utils(AuthMe plugin) {
|
|
this.plugin = plugin;
|
|
}
|
|
|
|
public void setGroup(Player player, groupType group) {
|
|
setGroup(player.getName(), group);
|
|
}
|
|
|
|
public void setGroup(String player, groupType group) {
|
|
if (!Settings.isPermissionCheckEnabled)
|
|
return;
|
|
if (plugin.permission == null)
|
|
return;
|
|
String name = player;
|
|
try {
|
|
World world = null;
|
|
currentGroup = plugin.permission.getPrimaryGroup(world, name);
|
|
} catch (UnsupportedOperationException e) {
|
|
ConsoleLogger.showError("Your permission system (" + plugin.permission.getName() + ") do not support Group system with that config... unhook!");
|
|
plugin.permission = null;
|
|
return;
|
|
}
|
|
World world = null;
|
|
switch (group) {
|
|
case UNREGISTERED: {
|
|
plugin.permission.playerRemoveGroup(world, name, currentGroup);
|
|
plugin.permission.playerAddGroup(world, name, Settings.unRegisteredGroup);
|
|
break;
|
|
}
|
|
case REGISTERED: {
|
|
plugin.permission.playerRemoveGroup(world, name, currentGroup);
|
|
plugin.permission.playerAddGroup(world, name, Settings.getRegisteredGroup);
|
|
break;
|
|
}
|
|
case NOTLOGGEDIN: {
|
|
if (!useGroupSystem())
|
|
break;
|
|
plugin.permission.playerRemoveGroup(world, name, currentGroup);
|
|
plugin.permission.playerAddGroup(world, name, Settings.getUnloggedinGroup);
|
|
break;
|
|
}
|
|
case LOGGEDIN: {
|
|
if (!useGroupSystem())
|
|
break;
|
|
LimboPlayer limbo = LimboCache.getInstance().getLimboPlayer(name.toLowerCase());
|
|
if (limbo == null)
|
|
break;
|
|
String realGroup = limbo.getGroup();
|
|
plugin.permission.playerRemoveGroup(world, name, currentGroup);
|
|
plugin.permission.playerAddGroup(world, name, realGroup);
|
|
break;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
public boolean addNormal(Player player, String group) {
|
|
if (!useGroupSystem()) {
|
|
return false;
|
|
}
|
|
if (plugin.permission == null)
|
|
return false;
|
|
World world = null;
|
|
try {
|
|
if (plugin.permission.playerRemoveGroup(world, player.getName().toString(), Settings.getUnloggedinGroup) && plugin.permission.playerAddGroup(world, player.getName().toString(), group)) {
|
|
return true;
|
|
}
|
|
} catch (UnsupportedOperationException e) {
|
|
ConsoleLogger.showError("Your permission system (" + plugin.permission.getName() + ") do not support Group system with that config... unhook!");
|
|
plugin.permission = null;
|
|
return false;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public void hasPermOnJoin(Player player) {
|
|
if (plugin.permission == null)
|
|
return;
|
|
Iterator<String> iter = Settings.getJoinPermissions.iterator();
|
|
while (iter.hasNext()) {
|
|
String permission = iter.next();
|
|
if (plugin.permission.playerHas(player, permission)) {
|
|
plugin.permission.playerAddTransient(player, permission);
|
|
}
|
|
}
|
|
}
|
|
|
|
public boolean isUnrestricted(Player player) {
|
|
if (!Settings.isAllowRestrictedIp)
|
|
return false;
|
|
if (Settings.getUnrestrictedName.isEmpty() || Settings.getUnrestrictedName == null)
|
|
return false;
|
|
if (Settings.getUnrestrictedName.contains(player.getName()))
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
public static Utils getInstance() {
|
|
singleton = new Utils(AuthMe.getInstance());
|
|
return singleton;
|
|
}
|
|
|
|
private boolean useGroupSystem() {
|
|
if (Settings.isPermissionCheckEnabled && !Settings.getUnloggedinGroup.isEmpty())
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
public void packCoords(double x, double y, double z, String w,
|
|
final Player pl) {
|
|
World theWorld;
|
|
if (w.equals("unavailableworld")) {
|
|
theWorld = pl.getWorld();
|
|
} else {
|
|
theWorld = Bukkit.getWorld(w);
|
|
}
|
|
if (theWorld == null)
|
|
theWorld = pl.getWorld();
|
|
final World world = theWorld;
|
|
final Location locat = new Location(world, x, y, z);
|
|
|
|
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
|
|
|
|
@Override
|
|
public void run() {
|
|
AuthMeTeleportEvent tpEvent = new AuthMeTeleportEvent(pl, locat);
|
|
plugin.getServer().getPluginManager().callEvent(tpEvent);
|
|
if (!tpEvent.isCancelled()) {
|
|
if (!tpEvent.getTo().getChunk().isLoaded())
|
|
tpEvent.getTo().getChunk().load();
|
|
pl.teleport(tpEvent.getTo());
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
/*
|
|
* Random Token for passpartu
|
|
*/
|
|
public boolean obtainToken() {
|
|
File file = new File("plugins" + File.separator + "AuthMe" + File.separator + "passpartu.token");
|
|
if (file.exists())
|
|
file.delete();
|
|
|
|
FileWriter writer = null;
|
|
try {
|
|
file.createNewFile();
|
|
writer = new FileWriter(file);
|
|
String token = generateToken();
|
|
writer.write(token + ":" + System.currentTimeMillis() / 1000 + API.newline);
|
|
writer.flush();
|
|
ConsoleLogger.info("[AuthMe] Security passpartu token: " + token);
|
|
writer.close();
|
|
return true;
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/*
|
|
* Read Token
|
|
*/
|
|
public boolean readToken(String inputToken) {
|
|
File file = new File("plugins" + File.separator + "AuthMe" + File.separator + "passpartu.token");
|
|
|
|
if (!file.exists())
|
|
return false;
|
|
|
|
if (inputToken.isEmpty())
|
|
return false;
|
|
Scanner reader = null;
|
|
try {
|
|
reader = new Scanner(file);
|
|
while (reader.hasNextLine()) {
|
|
final String line = reader.nextLine();
|
|
if (line.contains(":")) {
|
|
String[] tokenInfo = line.split(":");
|
|
if (tokenInfo[0].equals(inputToken) && System.currentTimeMillis() / 1000 - 30 <= Integer.parseInt(tokenInfo[1])) {
|
|
file.delete();
|
|
reader.close();
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
reader.close();
|
|
return false;
|
|
}
|
|
|
|
/*
|
|
* Generate Random Token
|
|
*/
|
|
private String generateToken() {
|
|
// obtain new random token
|
|
Random rnd = new Random();
|
|
char[] arr = new char[5];
|
|
for (int i = 0; i < 5; i++) {
|
|
int n = rnd.nextInt(36);
|
|
arr[i] = (char) (n < 10 ? '0' + n : 'a' + n - 10);
|
|
}
|
|
return new String(arr);
|
|
}
|
|
|
|
/*
|
|
* Used for force player GameMode
|
|
*/
|
|
public static void forceGM(Player player) {
|
|
if (!AuthMe.getInstance().authmePermissible(player, "authme.bypassforcesurvival"))
|
|
player.setGameMode(GameMode.SURVIVAL);
|
|
}
|
|
|
|
public enum groupType {
|
|
UNREGISTERED,
|
|
REGISTERED,
|
|
NOTLOGGEDIN,
|
|
LOGGEDIN
|
|
}
|
|
|
|
}
|