2015-10-19 19:43:46 +02:00
|
|
|
package me.totalfreedom.totalfreedommod.bridge;
|
2013-09-27 10:26:59 -04:00
|
|
|
|
2017-08-01 15:59:24 -04:00
|
|
|
import java.util.ArrayList;
|
2014-08-20 21:23:22 -04:00
|
|
|
import java.util.Iterator;
|
2017-08-01 15:59:24 -04:00
|
|
|
import java.util.List;
|
2014-08-20 21:23:22 -04:00
|
|
|
import java.util.Map;
|
2017-08-01 15:59:24 -04:00
|
|
|
import me.totalfreedom.bukkittelnet.BukkitTelnet;
|
2016-03-06 16:56:15 +01:00
|
|
|
import me.totalfreedom.bukkittelnet.api.TelnetCommandEvent;
|
|
|
|
import me.totalfreedom.bukkittelnet.api.TelnetPreLoginEvent;
|
|
|
|
import me.totalfreedom.bukkittelnet.api.TelnetRequestDataTagsEvent;
|
2017-08-01 15:59:24 -04:00
|
|
|
import me.totalfreedom.bukkittelnet.session.ClientSession;
|
2016-03-01 17:47:01 +01:00
|
|
|
import me.totalfreedom.totalfreedommod.FreedomService;
|
2015-10-19 19:43:46 +02:00
|
|
|
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
|
2016-03-06 16:56:15 +01:00
|
|
|
import me.totalfreedom.totalfreedommod.admin.Admin;
|
|
|
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
2017-08-01 15:59:24 -04:00
|
|
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
2014-08-20 21:23:22 -04:00
|
|
|
import org.bukkit.entity.Player;
|
2013-09-27 10:26:59 -04:00
|
|
|
import org.bukkit.event.EventHandler;
|
|
|
|
import org.bukkit.event.EventPriority;
|
2017-08-01 15:59:24 -04:00
|
|
|
import org.bukkit.plugin.Plugin;
|
2013-09-27 10:26:59 -04:00
|
|
|
|
2016-03-01 17:47:01 +01:00
|
|
|
public class BukkitTelnetBridge extends FreedomService
|
2013-09-27 10:26:59 -04:00
|
|
|
{
|
2015-10-19 19:43:46 +02:00
|
|
|
|
2017-08-01 15:59:24 -04:00
|
|
|
private BukkitTelnet bukkitTelnetPlugin = null;
|
|
|
|
|
2015-10-19 19:43:46 +02:00
|
|
|
public BukkitTelnetBridge(TotalFreedomMod plugin)
|
|
|
|
{
|
|
|
|
super(plugin);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void onStart()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void onStop()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2013-09-27 10:26:59 -04:00
|
|
|
@EventHandler(priority = EventPriority.NORMAL)
|
2014-03-21 11:39:34 +01:00
|
|
|
public void onTelnetPreLogin(TelnetPreLoginEvent event)
|
2013-12-17 16:24:56 +01:00
|
|
|
{
|
|
|
|
|
2013-12-17 15:16:32 +01:00
|
|
|
final String ip = event.getIp();
|
|
|
|
if (ip == null || ip.isEmpty())
|
2013-09-27 11:01:30 -04:00
|
|
|
{
|
2013-12-17 15:16:32 +01:00
|
|
|
return;
|
2013-09-27 11:01:30 -04:00
|
|
|
}
|
2013-12-17 15:16:32 +01:00
|
|
|
|
2016-05-12 21:40:39 +02:00
|
|
|
final Admin admin = plugin.al.getEntryByIpFuzzy(ip);
|
2013-12-17 15:16:32 +01:00
|
|
|
|
2016-05-12 21:40:39 +02:00
|
|
|
if (admin == null || !admin.isActive() || !admin.getRank().hasConsoleVariant())
|
2013-12-17 15:16:32 +01:00
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
event.setBypassPassword(true);
|
2015-10-19 19:43:46 +02:00
|
|
|
event.setName(admin.getName());
|
2013-09-27 10:26:59 -04:00
|
|
|
}
|
2013-12-17 16:24:56 +01:00
|
|
|
|
|
|
|
@EventHandler(priority = EventPriority.NORMAL)
|
2014-03-21 11:39:34 +01:00
|
|
|
public void onTelnetCommand(TelnetCommandEvent event)
|
2013-12-17 16:24:56 +01:00
|
|
|
{
|
2015-10-19 19:43:46 +02:00
|
|
|
if (plugin.cb.isCommandBlocked(event.getCommand(), event.getSender()))
|
2013-12-17 16:24:56 +01:00
|
|
|
{
|
|
|
|
event.setCancelled(true);
|
|
|
|
}
|
|
|
|
}
|
2014-08-20 21:23:22 -04:00
|
|
|
|
|
|
|
@EventHandler(priority = EventPriority.NORMAL)
|
|
|
|
public void onTelnetRequestDataTags(TelnetRequestDataTagsEvent event)
|
|
|
|
{
|
|
|
|
final Iterator<Map.Entry<Player, Map<String, Object>>> it = event.getDataTags().entrySet().iterator();
|
|
|
|
while (it.hasNext())
|
|
|
|
{
|
|
|
|
final Map.Entry<Player, Map<String, Object>> entry = it.next();
|
|
|
|
final Player player = entry.getKey();
|
|
|
|
final Map<String, Object> playerTags = entry.getValue();
|
|
|
|
|
|
|
|
boolean isAdmin = false;
|
|
|
|
boolean isTelnetAdmin = false;
|
|
|
|
boolean isSeniorAdmin = false;
|
|
|
|
|
2015-10-19 19:43:46 +02:00
|
|
|
final Admin admin = plugin.al.getAdmin(player);
|
2014-08-20 21:23:22 -04:00
|
|
|
if (admin != null)
|
|
|
|
{
|
2016-03-06 16:56:15 +01:00
|
|
|
boolean active = admin.isActive();
|
2014-08-20 21:23:22 -04:00
|
|
|
|
2016-03-06 16:56:15 +01:00
|
|
|
isAdmin = active;
|
|
|
|
isSeniorAdmin = active && admin.getRank() == Rank.SENIOR_ADMIN;
|
|
|
|
isTelnetAdmin = active && (isSeniorAdmin || admin.getRank() == Rank.TELNET_ADMIN);
|
2014-08-20 21:23:22 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
playerTags.put("tfm.admin.isAdmin", isAdmin);
|
|
|
|
playerTags.put("tfm.admin.isTelnetAdmin", isTelnetAdmin);
|
|
|
|
playerTags.put("tfm.admin.isSeniorAdmin", isSeniorAdmin);
|
|
|
|
|
2015-10-19 19:43:46 +02:00
|
|
|
playerTags.put("tfm.playerdata.getTag", plugin.pl.getPlayer(player).getTag());
|
2014-08-20 21:23:22 -04:00
|
|
|
|
2015-10-19 19:43:46 +02:00
|
|
|
playerTags.put("tfm.essentialsBridge.getNickname", plugin.esb.getNickname(player.getName()));
|
2014-08-20 21:23:22 -04:00
|
|
|
}
|
|
|
|
}
|
2017-08-01 15:59:24 -04:00
|
|
|
|
|
|
|
public BukkitTelnet getBukkitTelnetPlugin()
|
|
|
|
{
|
|
|
|
if (bukkitTelnetPlugin == null)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
final Plugin bukkitTelnet = server.getPluginManager().getPlugin("BukkitTelnet");
|
|
|
|
if (bukkitTelnet != null)
|
|
|
|
{
|
|
|
|
if (bukkitTelnet instanceof BukkitTelnet)
|
|
|
|
{
|
2018-07-31 00:01:29 -07:00
|
|
|
bukkitTelnetPlugin = (BukkitTelnet)bukkitTelnet;
|
2017-08-01 15:59:24 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Exception ex)
|
|
|
|
{
|
|
|
|
FLog.severe(ex);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return bukkitTelnetPlugin;
|
|
|
|
}
|
|
|
|
|
2020-04-23 04:18:03 -07:00
|
|
|
public List<Admin> getConnectedAdmins()
|
|
|
|
{
|
|
|
|
List<Admin> admins = new ArrayList<>();
|
|
|
|
final BukkitTelnet telnet = getBukkitTelnetPlugin();
|
|
|
|
if (telnet != null)
|
|
|
|
{
|
|
|
|
for (ClientSession session : telnet.appender.getSessions())
|
|
|
|
{
|
|
|
|
Admin admin = plugin.al.getEntryByName(session.getUserName().toLowerCase());
|
|
|
|
if (admin != null && !admins.contains(admin))
|
|
|
|
{
|
|
|
|
admins.add(admin);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return admins;
|
|
|
|
}
|
|
|
|
|
2017-08-01 15:59:24 -04:00
|
|
|
public void killTelnetSessions(final String name)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
final List<ClientSession> sessionsToRemove = new ArrayList<>();
|
|
|
|
|
|
|
|
final BukkitTelnet telnet = getBukkitTelnetPlugin();
|
|
|
|
if (telnet != null)
|
|
|
|
{
|
|
|
|
final Iterator<ClientSession> it = telnet.appender.getSessions().iterator();
|
|
|
|
while (it.hasNext())
|
|
|
|
{
|
|
|
|
final ClientSession session = it.next();
|
|
|
|
if (name != null && name.equalsIgnoreCase(session.getUserName()))
|
|
|
|
{
|
|
|
|
sessionsToRemove.add(session);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
for (final ClientSession session : sessionsToRemove)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
telnet.appender.removeSession(session);
|
|
|
|
session.syncTerminateSession();
|
|
|
|
}
|
|
|
|
catch (Exception ex)
|
|
|
|
{
|
|
|
|
FLog.severe("Error removing single telnet session: " + ex.getMessage());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
FLog.info(sessionsToRemove.size() + " telnet session(s) removed.");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (Exception ex)
|
|
|
|
{
|
|
|
|
FLog.severe("Error removing telnet sessions: " + ex.getMessage());
|
|
|
|
}
|
|
|
|
}
|
2013-09-27 10:26:59 -04:00
|
|
|
}
|