From 89e35bf75c3420553ebbf6efbbff3c4d6f55ee05 Mon Sep 17 00:00:00 2001 From: Danny van Heumen Date: Tue, 20 Jan 2015 19:28:31 +0100 Subject: [PATCH] Started work on SASL authentication panel in IRC account configuration. --- lib/installer-exclude/irc-api-1.0.jar | Bin 208816 -> 221304 bytes resources/languages/resources.properties | 3 + .../impl/protocol/irc/IrcConnection.java | 23 ++++++ .../irc/ProtocolProviderFactoryIrcImpl.java | 20 ++++++ .../irc/ProtocolProviderServiceIrcImpl.java | 12 +++- .../protocol/irc/irc.provider.manifest.mf | 1 + .../plugin/ircaccregwizz/FirstWizardPage.java | 66 ++++++++++++++++-- .../ircaccregwizz/IrcAccountRegistration.java | 44 ++++++++++++ .../IrcAccountRegistrationWizard.java | 42 +++++++++-- 9 files changed, 200 insertions(+), 11 deletions(-) diff --git a/lib/installer-exclude/irc-api-1.0.jar b/lib/installer-exclude/irc-api-1.0.jar index 6a0e2d7e51bd02476189808988df2fa46ac232d0..3ebab88a887e37d9ee4140e747a431667a42834d 100644 GIT binary patch delta 40161 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%0AMI>nuO<&g`^CrjV;>1iwV!{ed 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 aC@rJdXeG!y{=TA{^K(3h!@mndjq^WUx~g#i diff --git a/resources/languages/resources.properties b/resources/languages/resources.properties index fd1ccabc9..c4b978922 100644 --- a/resources/languages/resources.properties +++ b/resources/languages/resources.properties @@ -1096,6 +1096,9 @@ plugin.ircaccregwizz.EXAMPLE_SERVER=Ex: chat.freenode.net plugin.ircaccregwizz.USE_SECURE_CONNECTION=Use secure connection plugin.ircaccregwizz.ENABLE_CONTACT_PRESENCE=Enable contact presence plugin.ircaccregwizz.ENABLE_CHAT_ROOM_PRESENCE=Enable chat room presence +plugin.ircaccregwizz.SASL_AUTHENTICATION_TITLE=SASL authentication +plugin.ircaccregwizz.ENABLE_SASL_AUTHENTICATION=Enable SASL authentication +plugin.ircaccregwizz.SASL_AUTHZ_ROLE=Role # jabber accregwizz plugin.jabberaccregwizz.PROTOCOL_NAME=XMPP diff --git a/src/net/java/sip/communicator/impl/protocol/irc/IrcConnection.java b/src/net/java/sip/communicator/impl/protocol/irc/IrcConnection.java index 09b7f83ce..5c56e6e9e 100644 --- a/src/net/java/sip/communicator/impl/protocol/irc/IrcConnection.java +++ b/src/net/java/sip/communicator/impl/protocol/irc/IrcConnection.java @@ -218,8 +218,31 @@ private static CapabilityNegotiator determineNegotiator(final String user, } else { + // FIXME correctly determine capabilities and SASL authentication + // enabled return new SaslNegotiator(user, password, null); } + // FIXME DEBUG CODE remove +// final ArrayList caps = new ArrayList(); +// caps.add(new SimpleCapability("away-notify")); +// if (password != null) +// { +// caps.add(new SaslCapability(true, null, user, password)); +// } +// return new CompositeNegotiator(caps, new CompositeNegotiator.Host() +// { +// @Override +// public void reject(Capability cap) +// { +// LOGGER.warn("REJECTED: " + cap.getId()); +// } +// +// @Override +// public void acknowledge(Capability cap) +// { +// LOGGER.warn("ACKED: " + cap.getId()); +// } +// }); } /** 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 fb8e0efda..e59944027 100644 --- a/src/net/java/sip/communicator/impl/protocol/irc/ProtocolProviderFactoryIrcImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/irc/ProtocolProviderFactoryIrcImpl.java @@ -36,6 +36,26 @@ public class ProtocolProviderFactoryIrcImpl */ public static final String CONTACT_PRESENCE_TASK = "CONTACT_PRESENCE_TASK"; + /** + * Property indicating SASL is enabled. + */ + public static final String SASL_ENABLED = "SASL_ENABLED"; + + /** + * Property for SASL user name. + */ + public static final String SASL_USERNAME = "SASL_USERNAME"; + + /** + * Property for SASL password. + */ + public static final String SASL_PASSWORD = "SASL_PASSWORD"; + + /** + * Property for SASL authorization role. + */ + public static final String SASL_ROLE = "SASL_ROLE"; + /** * Constructor. */ 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 cc2261cf2..78eb4855e 100644 --- a/src/net/java/sip/communicator/impl/protocol/irc/ProtocolProviderServiceIrcImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/irc/ProtocolProviderServiceIrcImpl.java @@ -264,6 +264,15 @@ public void register(final SecurityAuthority authority) accountID.getAccountPropertyBoolean( ProtocolProviderFactoryIrcImpl.CONTACT_PRESENCE_TASK, true); + boolean saslEnabled = accountID.getAccountPropertyBoolean( + ProtocolProviderFactoryIrcImpl.SASL_ENABLED, false); + String saslUser = accountID.getAccountPropertyString( + ProtocolProviderFactoryIrcImpl.SASL_USERNAME); + String saslPass = accountID.getAccountPropertyString( + ProtocolProviderFactoryIrcImpl.SASL_PASSWORD); + String saslRole = accountID.getAccountPropertyString( + ProtocolProviderFactoryIrcImpl.SASL_ROLE); + //if we don't - retrieve it from the user through the security authority if (serverPassword == null && passwordRequired) { @@ -388,7 +397,8 @@ private boolean loadDNSThroughProxySetting() IrcActivator.getConfigurationService(); if (configSvc == null) { - return false; + // Assuming maximum use of configured proxy server is desirable. + return true; } // FIXME implement support for option to enable SOCKS5 DNS resolving return true; 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 8ae471e2f..88c1bce45 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 @@ -25,5 +25,6 @@ Import-Package: org.osgi.framework, com.ircclouds.irc.api.state, com.ircclouds.irc.api.commands, com.ircclouds.irc.api.negotiators, + com.ircclouds.irc.api.negotiators.capabilities, org.apache.commons.lang3, org.apache.commons.codec.binary diff --git a/src/net/java/sip/communicator/plugin/ircaccregwizz/FirstWizardPage.java b/src/net/java/sip/communicator/plugin/ircaccregwizz/FirstWizardPage.java index 92d2cd3c3..7d971434a 100644 --- a/src/net/java/sip/communicator/plugin/ircaccregwizz/FirstWizardPage.java +++ b/src/net/java/sip/communicator/plugin/ircaccregwizz/FirstWizardPage.java @@ -61,6 +61,8 @@ public class FirstWizardPage private JPanel serverPanel = new TransparentPanel(new BorderLayout(10, 10)); private JPanel optionsPanel = new TransparentPanel(new BorderLayout(10, 10)); + + private JPanel saslPanel = new TransparentPanel(new BorderLayout(10, 10)); private JPanel labelsPanel = new TransparentPanel(); @@ -127,6 +129,15 @@ public class FirstWizardPage private JCheckBox enableChatRoomPresenceTask = new SIPCommCheckBox( Resources.getString("plugin.ircaccregwizz.ENABLE_CHAT_ROOM_PRESENCE")); + private JCheckBox saslEnabled = new SIPCommCheckBox( + Resources.getString("plugin.ircaccregwizz.ENABLE_SASL_AUTHENTICATION")); + + private JTextField saslUserIdField = new JTextField(); + + private JPasswordField saslPasswordField = new JPasswordField(); + + private JTextField saslRoleField = new JTextField(); + private JPanel mainPanel = new TransparentPanel(); private Object nextPageIdentifier = WizardPage.SUMMARY_PAGE_IDENTIFIER; @@ -223,18 +234,14 @@ private void init(String userId, String server) labelsPanel.add(emptyPanel); labelsPanel.add(passLabel); -// labelsPanel.add(server); - valuesPanel.add(userIDField); valuesPanel.add(nickExampleLabel); valuesPanel.add(passField); -// valuesPanel.add(serverField); userPassPanel.add(infoPassword, BorderLayout.NORTH); userPassPanel.add(labelsPanel, BorderLayout.WEST); userPassPanel.add(valuesPanel, BorderLayout.CENTER); userPassPanel.add(passwordNotRequired, BorderLayout.SOUTH); -// userPassPanel.add(autoChangeNick, BorderLayout.SOUTH); userPassPanel.setBorder(BorderFactory .createTitledBorder(Resources.getString( @@ -271,15 +278,39 @@ private void init(String userId, String server) optionsPanel.setBorder(BorderFactory.createTitledBorder( Resources.getString("service.gui.OPTIONS"))); + saslPanel.add(this.saslEnabled, BorderLayout.NORTH); + + TransparentPanel saslControlsPanel = new TransparentPanel(); + saslControlsPanel.setLayout(new BoxLayout(saslControlsPanel, BoxLayout.Y_AXIS)); + saslPanel.add(saslControlsPanel, BorderLayout.CENTER); + + JLabel saslUserLabel = new JLabel(Resources.getString("plugin.ircaccregwizz.USERNAME") + ":"); + saslControlsPanel.add(horizontal(100, saslUserLabel, saslUserIdField)); + JLabel saslPassLabel = new JLabel(Resources.getString("service.gui.PASSWORD") + ":"); + saslControlsPanel.add(horizontal(100, saslPassLabel, saslPasswordField)); + JLabel saslRoleLabel = new JLabel(Resources.getString("plugin.ircaccregwizz.SASL_AUTHZ_ROLE") + ":"); + saslControlsPanel.add(horizontal(100, saslRoleLabel, saslRoleField)); + + // FIXME continue implementation of the sasl authentication panel + + saslPanel.setBorder(BorderFactory.createTitledBorder(Resources + .getString("plugin.ircaccregwizz.SASL_AUTHENTICATION_TITLE"))); + mainPanel.add(userPassPanel); mainPanel.add(serverPanel); mainPanel.add(optionsPanel); + mainPanel.add(saslPanel); this.add(mainPanel, BorderLayout.NORTH); -// this.add(serverPanel, BorderLayout.SOUTH); -// this.add(optionsPanel, BorderLayout.AFTER_LAST_LINE); } + private JPanel horizontal(int width, Component cmp1, Component cmp2) { + TransparentPanel panel = new TransparentPanel(new BorderLayout(10, 10)); + cmp1.setPreferredSize(new Dimension(width, cmp1.getHeight())); + panel.add(cmp1, BorderLayout.WEST); + panel.add(cmp2, BorderLayout.CENTER); + return panel; + } /** * Implements the WizardPage.getIdentifier to return * this page identifier. @@ -364,6 +395,10 @@ public void commitPage() .isSelected()); registration.setChatRoomPresenceTaskEnabled(enableChatRoomPresenceTask .isSelected()); + registration.setSaslEnabled(this.saslEnabled.isSelected()); + registration.setSaslUser(this.saslUserIdField.getText()); + registration.setSaslPass(new String(saslPasswordField.getPassword())); + registration.setSaslRole(this.saslRoleField.getText()); isCommitted = true; } @@ -475,6 +510,20 @@ public void loadAccount(ProtocolProviderService protocolProvider) accountID.getAccountPropertyBoolean( IrcAccountRegistrationWizard.CHAT_ROOM_PRESENCE_TASK, true); + final boolean enableSaslAuthentication = + accountID.getAccountPropertyBoolean( + IrcAccountRegistrationWizard.SASL_ENABLED, false); + final String saslUser = + accountID.getAccountPropertyString( + IrcAccountRegistrationWizard.SASL_USERNAME, ""); + // FIXME load password from secure password storage! + final String saslPass = + accountID.getAccountPropertyString( + IrcAccountRegistrationWizard.SASL_PASSWORD, ""); + final String saslRole = + accountID.getAccountPropertyString( + IrcAccountRegistrationWizard.SASL_ROLE, ""); + this.userIDField.setEnabled(false); this.userIDField.setText(accountID.getUserID()); this.serverField.setText(server); @@ -516,6 +565,11 @@ public void loadAccount(ProtocolProviderService protocolProvider) this.enableContactPresenceTask.setSelected(contactPresenceTaskEnabled); this.enableChatRoomPresenceTask .setSelected(chatRoomPresenceTaskEnabled); + + this.saslEnabled.setSelected(enableSaslAuthentication); + this.saslUserIdField.setText(saslUser); + this.saslPasswordField.setText(saslPass); + this.saslRoleField.setText(saslRole); } /** diff --git a/src/net/java/sip/communicator/plugin/ircaccregwizz/IrcAccountRegistration.java b/src/net/java/sip/communicator/plugin/ircaccregwizz/IrcAccountRegistration.java index ef2a5e0af..d10f3d4f6 100644 --- a/src/net/java/sip/communicator/plugin/ircaccregwizz/IrcAccountRegistration.java +++ b/src/net/java/sip/communicator/plugin/ircaccregwizz/IrcAccountRegistration.java @@ -23,6 +23,10 @@ public class IrcAccountRegistration private boolean autoChangeNick; private boolean isRequiredPassword; private boolean secureConnection; + private boolean saslEnabled; + private String saslUser; + private String saslPass; + private String saslRole; /** * Option for activating contact presence task. @@ -242,4 +246,44 @@ public void setChatRoomPresenceTaskEnabled(final boolean value) { this.chatroomPresenceTaskEnabled = value; } + + public boolean isSaslEnabled() + { + return this.saslEnabled; + } + + public void setSaslEnabled(final boolean enabled) + { + this.saslEnabled = enabled; + } + + public String getSaslUser() + { + return this.saslUser; + } + + public void setSaslUser(final String user) + { + this.saslUser = user; + } + + public String getSaslPass() + { + return this.saslPass; + } + + public void setSaslPass(final String pass) + { + this.saslPass = pass; + } + + public String getSaslRole() + { + return this.saslRole; + } + + public void setSaslRole(final String role) + { + this.saslRole = role; + } } diff --git a/src/net/java/sip/communicator/plugin/ircaccregwizz/IrcAccountRegistrationWizard.java b/src/net/java/sip/communicator/plugin/ircaccregwizz/IrcAccountRegistrationWizard.java index 76ccdef6c..9c2f173a4 100644 --- a/src/net/java/sip/communicator/plugin/ircaccregwizz/IrcAccountRegistrationWizard.java +++ b/src/net/java/sip/communicator/plugin/ircaccregwizz/IrcAccountRegistrationWizard.java @@ -47,6 +47,26 @@ public class IrcAccountRegistrationWizard public static final String CHAT_ROOM_PRESENCE_TASK = "CHAT_ROOM_PRESENCE_TASK"; + /** + * Property indicating SASL is enabled. + */ + public static final String SASL_ENABLED = "SASL_ENABLED"; + + /** + * Property name for SASL user. + */ + public static final String SASL_USERNAME = "SASL_USERNAME"; + + /** + * Property name for SASL password. + */ + public static final String SASL_PASSWORD = "SASL_PASSWORD"; + + /** + * Property for SASL authorization role. + */ + public static final String SASL_ROLE = "SASL_ROLE"; + private final Logger logger = Logger.getLogger(IrcAccountRegistrationWizard.class); @@ -190,6 +210,15 @@ public Iterator> getSummary() summaryTable.put(Resources .getString("plugin.ircaccregwizz.ENABLE_CHAT_ROOM_PRESENCE"), registration.isChatRoomPresenceTaskEnabled() ? yes : no); + summaryTable.put(Resources + .getString("plugin.ircaccregwizz.ENABLE_SASL_AUTHENTICATION"), + registration.isSaslEnabled() ? yes : no); + summaryTable.put( + "SASL " + Resources.getString("plugin.ircaccregwizz.USERNAME"), + registration.getSaslUser()); + summaryTable.put("SASL " + + Resources.getString("plugin.ircaccregwizz.SASL_AUTHZ_ROLE"), + registration.getSaslRole()); return summaryTable.entrySet().iterator(); } @@ -233,10 +262,7 @@ public ProtocolProviderService signin(final String userName, { ProtocolProviderFactory factory = IrcAccRegWizzActivator.getIrcProtocolProviderFactory(); - - return this.installAccount(factory, - userName, - password); + return this.installAccount(factory, userName, password); } /** @@ -282,11 +308,19 @@ private ProtocolProviderService installAccount( accountProperties.put(ProtocolProviderFactory.DEFAULT_ENCRYPTION, new Boolean(registration.isSecureConnection()).toString()); + // Presence-based background tasks accountProperties.put(CONTACT_PRESENCE_TASK, Boolean.toString(registration.isContactPresenceTaskEnabled())); accountProperties.put(CHAT_ROOM_PRESENCE_TASK, Boolean.toString(registration.isChatRoomPresenceTaskEnabled())); + // SASL properties + accountProperties.put(SASL_ENABLED, + Boolean.toString(registration.isSaslEnabled())); + accountProperties.put(SASL_USERNAME, registration.getSaslUser()); + accountProperties.put(SASL_PASSWORD, registration.getSaslPass()); + accountProperties.put(SASL_ROLE, registration.getSaslRole()); + if (isModification()) { providerFactory.modifyAccount(this.protocolProvider,