From 1178b51255d2aad30502fa7c4a45064d0f7fa5ef Mon Sep 17 00:00:00 2001 From: Danny van Heumen Date: Sun, 26 Jan 2014 20:04:11 +0100 Subject: [PATCH] Primitive implementation of CertificateService. A primitive implementation of CertificateService. Also includes a modified version of irc-api that supports getting a custom SSL context from the server parameters. I have been able to confirm its workings by connecting to 'swiftco.dal.net' (certificate has a different CN.) --- lib/installer-exclude/irc-api-1.0-sources.jar | Bin 89847 -> 90033 bytes lib/installer-exclude/irc-api-1.0.jar | Bin 184020 -> 184264 bytes .../impl/protocol/irc/IrcActivator.java | 37 +++- .../impl/protocol/irc/IrcStack.java | 202 ++++++++++++++---- .../irc/ProtocolProviderFactoryIrcImpl.java | 4 +- .../irc/ProtocolProviderServiceIrcImpl.java | 4 +- .../protocol/irc/irc.provider.manifest.mf | 1 + 7 files changed, 206 insertions(+), 42 deletions(-) diff --git a/lib/installer-exclude/irc-api-1.0-sources.jar b/lib/installer-exclude/irc-api-1.0-sources.jar index ca6388bd634612af5e31523aed0b8ccf20ef2e03..70b7393b0ac7e4cd0664caf6c72d84f32def2aa0 100644 GIT binary patch delta 8642 zcmZX42RxPU`@iSdGLF5n_ugAZ_6XUTiR_WG$uSC;F5YK z%BqGx;u*h(gMpz)iGd-9RQ6>6bGZN(M5Xz4ug{Y3P`|Jx12vQttGdbt%95vfXzgF^n<2Nv8URN5gEGUO0OFT^#M$%x>;M`>%2J}A){omp5;DB0D^n|}N=sXDEo&}!kv z)s!4L_5!nPNo)4PI$(`OeHiM3I5w~HzH_T+pS7Qv9HeQVikQ^mLKem(w;enme% zj|@2JkbR8cdXN_Q)&E|j;d$UG6~myh`tG_dGY>zHW17=D(1V|?Qs{??3me0}8%gfI zPW4i@`tacEM;L@w!vp<2ecwe1LBy>t1M;vv@%O?!8YLDQI$1iOIQ+S~V()+FQPobh zeuh0;#A&+dU44tHZA$aIpe2_0n7V={xz$Gl+0wvwj3FveowiyApL5-VtZeYa*V7|K#y=E#qajf}`nbquOW*1ss-^n8ZXJzcGP{q(K#x z_j=Y(wShXt1e?M0)TB=bI7LZgEc*M;->sVwrDS$ET(YU#ix*2UpXW_~%#%e|J3i6d z|GD(yJw$c4gw!>-!*}AIr(YyaVYwANbq|KS zxKY6o9$}y$6oOmHT2;~Rs3z|C*DUr8`WC8p6eY1a5}k^}j?Xf0k2-s)_rysfB;WZ- z{d`qV@tIg~uD9h>;wAmk55vZJt4BeN!!+J0RSlhCTGiiGNKVC>6_qNlAUOHDrf;zX zM67H`I=;{iMh4USX)%~7eRQ}_EDLMBjnCS@*J>X=Q{PS<7HZ`r^Z4nH;vvTOK3;hq z{)7IF9XD@)NfcCzylvJ$WWμ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 Tz$k-$ov&bEh_ON^b&UT9QVGSs delta 8483 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 ZNI(rI2sLH;ADZd}u;4_nL63Ee{|9uyX=nfd diff --git a/lib/installer-exclude/irc-api-1.0.jar b/lib/installer-exclude/irc-api-1.0.jar index db98348bf5f7bbfc56e48e40924be49224a162e8..b97ac133babe9f3ab0b66f48f99cebd26e65666f 100644 GIT binary patch delta 23733 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 delta 23236 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 if one cannot + * be created. + */ + private SSLContext getCustomSSLContext(String hostname) + { + SSLContext context = null; + try + { + CertificateService cs = + IrcActivator.getCertificateVerificationService(); + X509TrustManager tm = + cs.getTrustManager(hostname); + context = cs.getSSLContext(tm); + } + catch (GeneralSecurityException e) + { + LOGGER.error("failed to create custom SSL context", e); + } + return context; + } + /** * Disconnect from the IRC server */ @@ -239,8 +263,8 @@ public void disconnect() { if (this.connectionState == null && this.irc == null) return; - - synchronized(this.joined) + + synchronized (this.joined) { // Leave all joined channels. for (ChatRoomIrcImpl channel : this.joined.values()) @@ -248,7 +272,7 @@ public void disconnect() leave(channel); } } - synchronized(this.irc) + synchronized (this.irc) { // Disconnect and clean up this.irc.disconnect(); @@ -575,7 +599,7 @@ public void onFailure(Exception e) .trace("Finished waiting for join operation for channel '" + chatroom.getIdentifier() + "' to complete."); // TODO How to handle 480 (+j): Channel throttle exceeded? - + Exception e = joinSignal.getException(); if (e != null) { @@ -666,10 +690,12 @@ public void command(ChatRoomIrcImpl chatroom, String command) int endOfNick = command.indexOf(' '); if (endOfNick == -1) { - throw new IllegalArgumentException("Invalid private message format. Message was not sent."); + throw new IllegalArgumentException( + "Invalid private message format. " + + "Message was not sent."); } - target = command.substring(0, endOfNick); - command = command.substring(endOfNick+1); + target = command.substring(0, endOfNick); + command = command.substring(endOfNick + 1); } else { @@ -703,12 +729,12 @@ private static ChatRoomMemberRole convertMemberMode(char modeSymbol) } /** - * A listener for server-level messages (any messages that are related to the - * server, the connection, that are not related to any chatroom in + * A listener for server-level messages (any messages that are related to + * the server, the connection, that are not related to any chatroom in * particular) or that are personal message from user to local user. */ private class ServerListener - extends VariousMessageListenerAdapter + extends VariousMessageListenerAdapter { /** * Print out server notices for debugging purposes and for simply @@ -744,10 +770,9 @@ public void onServerNumericMessage(ServerNumericMessage msg) @Override public void onError(ErrorMessage msg) { - LOGGER.debug("ERROR: " + msg.getSource() + ": " - + msg.getText()); + LOGGER.debug("ERROR: " + msg.getSource() + ": " + msg.getText()); } - + /** * Upon receiving a private message from a user, deliver that to a * private chat room and create one if it does not exist. We can ignore @@ -780,8 +805,8 @@ public void onUserPrivMessage(UserPrivMsg msg) * @param user the source user * @param text the message */ - private void deliverReceivedMessageToPrivateChat(ChatRoomIrcImpl chatroom, - String user, String text) + private void deliverReceivedMessageToPrivateChat( + ChatRoomIrcImpl chatroom, String user, String text) { ChatRoomMember member = chatroom.getChatRoomMember(user); MessageIrcImpl message = @@ -813,7 +838,7 @@ private ChatRoomIrcImpl initiatePrivateChatRoom(String user) return chatroom; } } - + /** * A chat room listener. * @@ -924,9 +949,10 @@ public void onChannelPart(ChanPartMessage msg) } catch (NullPointerException e) { - System.err - .println("This should not have happened. Please report this as it is a bug."); - e.printStackTrace(); + LOGGER + .warn( + "This should not have happened. Please report this as it is a bug.", + e); } } } @@ -959,8 +985,7 @@ public void onChannelKick(ChannelKick msg) { ChatRoomMember kicker = this.chatroom.getChatRoomMember(user); - this.chatroom.fireMemberPresenceEvent(kickedMember, - kicker, + this.chatroom.fireMemberPresenceEvent(kickedMember, kicker, ChatRoomMemberPresenceChangeEvent.MEMBER_KICKED, msg.getText()); } @@ -1214,9 +1239,9 @@ sourceMember, new Date(), ChatRoomMessageReceivedEvent.SYSTEM_MESSAGE_RECEIVED); break; case UNKNOWN: - LOGGER.info("Unknown mode: " - + (mode.isAdded() ? "+" : "-") + mode.getParams()[0] - + ". Original mode string: '" + msg.getModeStr() + "'"); + LOGGER.info("Unknown mode: " + (mode.isAdded() ? "+" : "-") + + mode.getParams()[0] + ". Original mode string: '" + + msg.getModeStr() + "'"); break; default: LOGGER.info("Unsupported mode '" @@ -1395,16 +1420,43 @@ private static class ServerParameters implements IServerParameters { + /** + * Nick name. + */ private String nick; + /** + * Alternative nick names. + */ private List alternativeNicks = new ArrayList(); + /** + * Real name. + */ private String real; + /** + * Ident. + */ private String ident; + /** + * IRC server. + */ private IRCServer server; + + /** + * Custom SSL Context. + */ + private SSLContext sslContext = null; + /** + * Construct ServerParameters instance. + * @param nickName nick name + * @param realName real name + * @param ident ident + * @param server IRC server instance + */ private ServerParameters(String nickName, String realName, String ident, IRCServer server) { @@ -1415,54 +1467,128 @@ private ServerParameters(String nickName, String realName, this.server = server; } + /** + * Get nick name. + * + * @return returns nick name + */ @Override public String getNickname() { return this.nick; } + /** + * Set new nick name. + * + * @param nick nick name + */ public void setNickname(String nick) { this.nick = checkNick(nick); } - + + /** + * Verify nick name. + * + * @param nick nick name + * @return returns nick name + * @throws IllegalArgumentException throws + * IllegalArgumentException if an invalid nick name + * is provided. + */ private String checkNick(String nick) { if (nick == null) - throw new IllegalArgumentException("a nick name must be provided"); - if (nick.startsWith("#")) - throw new IllegalArgumentException("the nick name must not start with '#' since this is reserved for IRC channels"); + throw new IllegalArgumentException( + "a nick name must be provided"); + if (nick.startsWith("#")) + throw new IllegalArgumentException( + "the nick name must not start with '#' " + + "since this is reserved for IRC channels"); return nick; } + /** + * Get alternative nick names. + * + * @return returns list of alternatives + */ @Override public List getAlternativeNicknames() { return this.alternativeNicks; } + /** + * Get ident string. + * + * @return returns ident + */ @Override public String getIdent() { return this.ident; } + /** + * Get real name + * + * @return returns real name + */ @Override public String getRealname() { return this.real; } + /** + * Get server + * + * @return returns server instance + */ @Override public IRCServer getServer() { return this.server; } + /** + * Set server instance. + * + * @param server IRC server instance + */ public void setServer(IRCServer server) { + if (server == null) + throw new IllegalArgumentException("server cannot be null"); + this.server = server; } + + /** + * Get the SSL Context. + * + * Returns the custom SSLContext or null in case there is no + * custom implementation. + * + * @return returns the SSLContext or null + */ + @Override + public SSLContext getCustomContext() + { + return this.sslContext; + } + + /** + * Set custom SSLContext. + * + * @param context the custom SSLContext + */ + public void setCustomContext(SSLContext context) + { + this.sslContext = context; + } } /** diff --git a/src/net/java/sip/communicator/impl/protocol/irc/ProtocolProviderFactoryIrcImpl.java b/src/net/java/sip/communicator/impl/protocol/irc/ProtocolProviderFactoryIrcImpl.java index fafe1394e..b0b9393c3 100644 --- a/src/net/java/sip/communicator/impl/protocol/irc/ProtocolProviderFactoryIrcImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/irc/ProtocolProviderFactoryIrcImpl.java @@ -24,7 +24,7 @@ public class ProtocolProviderFactoryIrcImpl { public ProtocolProviderFactoryIrcImpl() { - super(IrcActivator.bundleContext, ProtocolNames.IRC); + super(IrcActivator.getBundleContext(), ProtocolNames.IRC); } /** @@ -42,7 +42,7 @@ public ProtocolProviderFactoryIrcImpl() public AccountID installAccount( String userIDStr, Map accountProperties) { - BundleContext context = IrcActivator.bundleContext; + BundleContext context = IrcActivator.getBundleContext(); if (context == null) throw new NullPointerException( diff --git a/src/net/java/sip/communicator/impl/protocol/irc/ProtocolProviderServiceIrcImpl.java b/src/net/java/sip/communicator/impl/protocol/irc/ProtocolProviderServiceIrcImpl.java index b3e4d7fda..5524419e3 100644 --- a/src/net/java/sip/communicator/impl/protocol/irc/ProtocolProviderServiceIrcImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/irc/ProtocolProviderServiceIrcImpl.java @@ -6,6 +6,7 @@ */ package net.java.sip.communicator.impl.protocol.irc; +import net.java.sip.communicator.service.certificate.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.event.*; import net.java.sip.communicator.util.*; @@ -25,7 +26,7 @@ public class ProtocolProviderServiceIrcImpl /** * The irc server. */ - private IrcStack ircStack; + private IrcStack ircStack = null; /** * The id of the account that this protocol provider represents. @@ -150,6 +151,7 @@ public RegistrationState getRegistrationState() { return currentRegistrationState; } + /** * Starts the registration process. diff --git a/src/net/java/sip/communicator/impl/protocol/irc/irc.provider.manifest.mf b/src/net/java/sip/communicator/impl/protocol/irc/irc.provider.manifest.mf index 391100899..bf48200b9 100644 --- a/src/net/java/sip/communicator/impl/protocol/irc/irc.provider.manifest.mf +++ b/src/net/java/sip/communicator/impl/protocol/irc/irc.provider.manifest.mf @@ -9,6 +9,7 @@ Import-Package: org.osgi.framework, org.jitsi.service.resources, net.java.sip.communicator.service.resources, net.java.sip.communicator.util, + net.java.sip.communicator.service.certificate, net.java.sip.communicator.service.protocol, net.java.sip.communicator.service.protocol.event, org.slf4j,