Add TLS support.

This commit is contained in:
cnaude 2015-03-18 10:34:40 -07:00
parent 701496debe
commit 620d1d0a9d
4 changed files with 24 additions and 7 deletions

View File

@ -55,6 +55,8 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock;
import javax.net.SocketFactory;
import javax.net.ssl.SSLSocketFactory;
import me.botsko.prism.actionlibs.QueryParameters; import me.botsko.prism.actionlibs.QueryParameters;
import me.botsko.prism.events.BlockStateChange; import me.botsko.prism.events.BlockStateChange;
import org.bukkit.Achievement; import org.bukkit.Achievement;
@ -69,6 +71,7 @@ import org.pircbotx.Configuration;
import org.pircbotx.PircBotX; import org.pircbotx.PircBotX;
import org.pircbotx.User; import org.pircbotx.User;
import org.pircbotx.UtilSSLSocketFactory; import org.pircbotx.UtilSSLSocketFactory;
import org.pircbotx.cap.TLSCapHandler;
import org.pircbotx.exception.IrcException; import org.pircbotx.exception.IrcException;
import org.pircbotx.hooks.ListenerAdapter; import org.pircbotx.hooks.ListenerAdapter;
@ -87,6 +90,7 @@ public final class PurpleBot {
private boolean connected; private boolean connected;
public boolean autoConnect; public boolean autoConnect;
public boolean ssl; public boolean ssl;
public boolean tls;
public boolean trustAllCerts; public boolean trustAllCerts;
public boolean sendRawMessageOnConnect; public boolean sendRawMessageOnConnect;
public boolean showMOTD; public boolean showMOTD;
@ -270,6 +274,9 @@ public final class PurpleBot {
socketFactory.trustAllCertificates(); socketFactory.trustAllCertificates();
} }
configBuilder.setSocketFactory(socketFactory); configBuilder.setSocketFactory(socketFactory);
if (tls) {
configBuilder.addCapHandler(new TLSCapHandler(socketFactory, true));
}
} }
if (charSet.isEmpty()) { if (charSet.isEmpty()) {
if (!reload) { if (!reload) {
@ -630,6 +637,7 @@ public final class PurpleBot {
config.load(file); config.load(file);
autoConnect = config.getBoolean("autoconnect", true); autoConnect = config.getBoolean("autoconnect", true);
ssl = config.getBoolean("ssl", false); ssl = config.getBoolean("ssl", false);
tls = config.getBoolean("tls", false);
trustAllCerts = config.getBoolean("trust-all-certs", false); trustAllCerts = config.getBoolean("trust-all-certs", false);
sendRawMessageOnConnect = config.getBoolean("raw-message-on-connect", false); sendRawMessageOnConnect = config.getBoolean("raw-message-on-connect", false);
rawMessage = config.getString("raw-message", ""); rawMessage = config.getString("raw-message", "");
@ -668,6 +676,7 @@ public final class PurpleBot {
plugin.logDebug("Channel Auto Join Delay => " + channelAutoJoinDelay); plugin.logDebug("Channel Auto Join Delay => " + channelAutoJoinDelay);
plugin.logDebug(("Bind => ") + bindAddress); plugin.logDebug(("Bind => ") + bindAddress);
plugin.logDebug("SSL => " + ssl); plugin.logDebug("SSL => " + ssl);
plugin.logDebug("TLS => " + tls);
plugin.logDebug("Trust All Certs => " + trustAllCerts); plugin.logDebug("Trust All Certs => " + trustAllCerts);
plugin.logDebug("Port => " + botServerPort); plugin.logDebug("Port => " + botServerPort);
plugin.logDebug("Command Prefix => " + commandPrefix); plugin.logDebug("Command Prefix => " + commandPrefix);
@ -941,7 +950,7 @@ public final class PurpleBot {
connectMessage = "Connecting to " + botServer + ":" connectMessage = "Connecting to " + botServer + ":"
+ botServerPort + ": [Nick: " + botNick + botServerPort + ": [Nick: " + botNick
+ "] [SSL: " + ssl + "]" + " [TrustAllCerts: " + "] [SSL: " + ssl + "]" + " [TrustAllCerts: "
+ trustAllCerts + "]"; + trustAllCerts + "] [TLS: " + tls + "]";
} }
} }
} catch (IOException | InvalidConfigurationException ex) { } catch (IOException | InvalidConfigurationException ex) {

View File

@ -87,6 +87,8 @@ import org.bukkit.command.CommandSender;
import org.bukkit.configuration.InvalidConfigurationException; import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionAttachment;
import org.bukkit.permissions.PermissionAttachmentInfo;
import org.bukkit.plugin.Plugin; import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.pircbotx.IdentServer; import org.pircbotx.IdentServer;
@ -968,6 +970,7 @@ public class PurpleIRC extends JavaPlugin {
try { try {
if (vaultHelpers != null) { if (vaultHelpers != null) {
if (vaultHelpers.permission != null && vaultHelpers.permission != null) { if (vaultHelpers.permission != null && vaultHelpers.permission != null) {
logDebug("getPlayerGroup: " + player.getName());
groupName = vaultHelpers.permission.getPrimaryGroup(player); groupName = vaultHelpers.permission.getPrimaryGroup(player);
} }
} }
@ -1006,6 +1009,7 @@ public class PurpleIRC extends JavaPlugin {
if (vaultHelpers.permission != null && vaultHelpers.permission != null) { if (vaultHelpers.permission != null && vaultHelpers.permission != null) {
OfflinePlayer offlinePlayer = getServer().getOfflinePlayer(uuid); OfflinePlayer offlinePlayer = getServer().getOfflinePlayer(uuid);
if (offlinePlayer != null) { if (offlinePlayer != null) {
logDebug("getPlayerGroup: " + worldName + " " + player);
groupName = vaultHelpers.permission.getPrimaryGroup(worldName, offlinePlayer); groupName = vaultHelpers.permission.getPrimaryGroup(worldName, offlinePlayer);
} }
} }
@ -1051,6 +1055,7 @@ public class PurpleIRC extends JavaPlugin {
if (vaultHelpers.chat != null) { if (vaultHelpers.chat != null) {
OfflinePlayer offlinePlayer = getServer().getOfflinePlayer(uuid); OfflinePlayer offlinePlayer = getServer().getOfflinePlayer(uuid);
if (offlinePlayer != null) { if (offlinePlayer != null) {
logDebug("getPlayerPrefix: " + worldName + " " + player);
prefix = vaultHelpers.chat.getPlayerPrefix(worldName, offlinePlayer); prefix = vaultHelpers.chat.getPlayerPrefix(worldName, offlinePlayer);
} }
} }
@ -1096,6 +1101,7 @@ public class PurpleIRC extends JavaPlugin {
if (vaultHelpers.chat != null) { if (vaultHelpers.chat != null) {
OfflinePlayer offlinePlayer = getServer().getOfflinePlayer(uuid); OfflinePlayer offlinePlayer = getServer().getOfflinePlayer(uuid);
if (offlinePlayer != null) { if (offlinePlayer != null) {
logDebug("getPlayerSuffix: " + worldName + " " + offlinePlayer.getName());
suffix = vaultHelpers.chat.getPlayerSuffix(worldName, offlinePlayer); suffix = vaultHelpers.chat.getPlayerSuffix(worldName, offlinePlayer);
} }
} }

View File

@ -34,7 +34,7 @@ import java.util.concurrent.ConcurrentHashMap;
*/ */
public class CaseInsensitiveMap<V> extends AbstractMap<String, V> { public class CaseInsensitiveMap<V> extends AbstractMap<String, V> {
private final Map<CaseInsensitiveKey, V> map = new ConcurrentHashMap<CaseInsensitiveKey, V>(); private final Map<CaseInsensitiveKey, V> map = new ConcurrentHashMap<>();
private static final class KeySet extends AbstractSet<String> { private static final class KeySet extends AbstractSet<String> {
@ -201,7 +201,7 @@ public class CaseInsensitiveMap<V> extends AbstractMap<String, V> {
*/ */
@Override @Override
public Entry<String, V> next() { public Entry<String, V> next() {
return new MapEntry<V>(this.iterator.next()); return new MapEntry<>(this.iterator.next());
} }
/** /**
@ -265,7 +265,7 @@ public class CaseInsensitiveMap<V> extends AbstractMap<String, V> {
*/ */
@Override @Override
public Iterator<Entry<String, V>> iterator() { public Iterator<Entry<String, V>> iterator() {
return new EntrySetIterator<V>(this.entrySet.iterator()); return new EntrySetIterator<>(this.entrySet.iterator());
} }
/** /**
@ -397,7 +397,7 @@ public class CaseInsensitiveMap<V> extends AbstractMap<String, V> {
*/ */
@Override @Override
public Set<Entry<String, V>> entrySet() { public Set<Entry<String, V>> entrySet() {
return new EntrySet<V>(this.map.entrySet(), this); return new EntrySet<>(this.map.entrySet(), this);
} }
/** /**

View File

@ -19,6 +19,8 @@ server: irc.excample.com
port: 6667 port: 6667
# Attempt ssl connection to IRC server # Attempt ssl connection to IRC server
ssl: false ssl: false
# Enable TLS support
tls: false
# Trust all SSL certs # Trust all SSL certs
trust-all-certs: false trust-all-certs: false
# Bind address # Bind address