/* * Jitsi, the OpenSource Java VoIP and Instant Messaging client. * * Copyright @ 2015 Atlassian Pty Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.java.sip.communicator.plugin.ircaccregwizz; import java.awt.*; import java.util.*; import net.java.sip.communicator.service.gui.*; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.util.*; import org.osgi.framework.*; /** * The <tt>IrcAccountRegistrationWizard</tt> is an implementation of the * <tt>AccountRegistrationWizard</tt> for the IRC protocol. It allows the user * to create and configure a new IRC account. * * @author Lionel Ferreira & Michael Tarantino * @author Danny van Heumen */ public class IrcAccountRegistrationWizard extends DesktopAccountRegistrationWizard { private static final int WIZARD_DIALOG_HEIGHT = 500; private static final int WIZARD_DIALOG_WIDTH = 600; /** * Repeated contact presence task configuration key from * ProtocolProviderFactoryIrcImpl here to avoid having to import irc * protocol package directly. See * ProtocolProviderFactoryIrcImpl.CONTACT_PRESENCE_TASK. */ public static final String CONTACT_PRESENCE_TASK = "CONTACT_PRESENCE_TASK"; /** * Repeated chat room presence task configuration key from * ProtocolProviderFactoryIrcImpl here to avoid having to import irc * protocol package directly. See * ProtocolProviderFactoryIrcImpl.CHAT_ROOM_PRESENCE_TASK. */ 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 for SASL authorization role. */ public static final String SASL_ROLE = "SASL_ROLE"; /** * Property for resolving DNS names through configured proxy server. */ public static final String RESOLVE_DNS_THROUGH_PROXY = "RESOLVE_DNS_THROUGH_PROXY"; /** * Logger. */ private final Logger logger = Logger.getLogger(IrcAccountRegistrationWizard.class); /** * The first page of the IRC account registration wizard. */ private FirstWizardPage firstWizardPage; /** * The object that we use to store details on an account that we will be * creating. */ private IrcAccountRegistration registration = new IrcAccountRegistration(); private ProtocolProviderService protocolProvider; /** * Creates an instance of <tt>IrcAccountRegistrationWizard</tt>. * @param wizardContainer the wizard container, where this wizard * is added */ public IrcAccountRegistrationWizard(final WizardContainer wizardContainer) { setWizardContainer(wizardContainer); wizardContainer.setFinishButtonText( Resources.getString("service.gui.SIGN_IN")); } /** * Implements the <code>AccountRegistrationWizard.getIcon</code> method. * Returns the icon to be used for this wizard. * @return byte[] */ @Override public byte[] getIcon() { return Resources.getImage(Resources.IRC_LOGO); } /** * Implements the <code>AccountRegistrationWizard.getPageImage</code> * method. Returns the image used to decorate the wizard page * * @return byte[] the image used to decorate the wizard page */ @Override public byte[] getPageImage() { return Resources.getImage(Resources.PAGE_IMAGE); } /** * Implements the <code>AccountRegistrationWizard.getProtocolName</code> * method. Returns the protocol name for this wizard. * @return String */ @Override public String getProtocolName() { return Resources.getString("plugin.ircaccregwizz.PROTOCOL_NAME"); } /** * Implements the <code>AccountRegistrationWizard.getProtocolDescription * </code> method. Returns the description of the protocol for this wizard. * @return String */ @Override public String getProtocolDescription() { return Resources.getString("plugin.ircaccregwizz.PROTOCOL_DESCRIPTION"); } /** * Returns the set of pages contained in this wizard. * @return Iterator */ @Override public Iterator<WizardPage> getPages() { java.util.List<WizardPage> pages = new ArrayList<WizardPage>(); String userId = ""; String server = ""; if (firstWizardPage != null) { userId = firstWizardPage.getCurrentUserId(); server = firstWizardPage.getCurrentServer(); } firstWizardPage = new FirstWizardPage(this, userId, server); pages.add(firstWizardPage); return pages.iterator(); } /** * Returns the set of data that user has entered through this wizard. * @return Iterator */ @Override public Iterator<Map.Entry<String, String>> getSummary() { LinkedHashMap<String, String> summaryTable = new LinkedHashMap<String, String>(); String pass = new String(); String port = new String(); if (registration.isRequiredPassword()) { pass = "required"; } else { pass = "not required"; } port = registration.getPort(); if (!port.equals("")) { port = ":" + port; } final String yes = Resources.getString("service.gui.YES"); final String no = Resources.getString("service.gui.NO"); summaryTable.put(Resources.getString("plugin.ircaccregwizz.USERNAME"), registration.getUserID()); summaryTable.put(Resources.getString("service.gui.PASSWORD"), pass); summaryTable.put( Resources.getString("plugin.ircaccregwizz.IRC_SERVER"), registration.getServer() + port); summaryTable.put( Resources.getString("plugin.ircaccregwizz.USE_SECURE_CONNECTION"), registration.isSecureConnection() ? yes : no); summaryTable.put(Resources .getString("plugin.ircaccregwizz.RESOLVE_DNS_THROUGH_PROXY"), registration.isResolveDnsThroughProxy() ? yes : no); summaryTable .put(Resources .getString("plugin.ircaccregwizz.ENABLE_CONTACT_PRESENCE"), registration.isContactPresenceTaskEnabled() ? yes : no); 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(); } /** * Defines the operations that will be executed when the user clicks on * the wizard "Signin" button. * @return the created <tt>ProtocolProviderService</tt> corresponding to the * new account * @throws OperationFailedException if the operation didn't succeed */ @Override public ProtocolProviderService signin() throws OperationFailedException { firstWizardPage.commitPage(); String password = null; if (registration.isRememberPassword() && registration.isRequiredPassword()) { password = registration.getPassword(); } return this.signin(registration.getUserID(), password); } /** * Defines the operations that will be executed when the user clicks on * the wizard "Signin" button. * * @param userName the user name to sign in with * @param password the password to sign in with * @return the created <tt>ProtocolProviderService</tt> corresponding to the * new account * @throws OperationFailedException if the operation didn't succeed */ @Override public ProtocolProviderService signin(final String userName, final String password) throws OperationFailedException { ProtocolProviderFactory factory = IrcAccRegWizzActivator.getIrcProtocolProviderFactory(); return this.installAccount(factory, userName, password); } /** * Creates an account for the given user and password. * @param providerFactory the ProtocolProviderFactory which will create * the account * @param user the user identifier * @return the <tt>ProtocolProviderService</tt> for the new account. */ private ProtocolProviderService installAccount( final ProtocolProviderFactory providerFactory, final String user, final String password) throws OperationFailedException { Hashtable<String, String> accountProperties = new Hashtable<String, String>(); accountProperties.put(ProtocolProviderFactory.SERVER_ADDRESS, registration.getServer()); accountProperties.put(ProtocolProviderFactory.ACCOUNT_ICON_PATH, "resources/images/protocol/irc/irc32x32.png"); if (password != null && !password.equals("")) { accountProperties.put( ProtocolProviderFactory.PASSWORD, registration.getPassword()); } if (!registration.getPort().equals("")) { accountProperties.put( ProtocolProviderFactory.SERVER_PORT, registration.getPort()); } accountProperties.put( ProtocolProviderFactory.AUTO_CHANGE_USER_NAME, Boolean.toString(registration.isAutoChangeNick())); accountProperties.put( IrcAccountRegistrationWizard.RESOLVE_DNS_THROUGH_PROXY, Boolean.toString(registration.isResolveDnsThroughProxy())); accountProperties.put( ProtocolProviderFactory.NO_PASSWORD_REQUIRED, Boolean.toString(!registration.isRequiredPassword())); accountProperties.put(ProtocolProviderFactory.DEFAULT_ENCRYPTION, Boolean.toString(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_ROLE, registration.getSaslRole()); if (isModification()) { providerFactory.modifyAccount(this.protocolProvider, accountProperties); setModification(false); return this.protocolProvider; } try { AccountID accountID = providerFactory.installAccount( user, accountProperties); ServiceReference<ProtocolProviderService> serRef = providerFactory .getProviderForAccount(accountID); protocolProvider = IrcAccRegWizzActivator.bundleContext .getService(serRef); } catch (IllegalStateException exc) { logger.warn(exc.getMessage()); throw new OperationFailedException( "Account already exists.", OperationFailedException.IDENTIFICATION_CONFLICT); } catch (Exception exc) { logger.warn(exc.getMessage()); throw new OperationFailedException( "Failed to add account", OperationFailedException.GENERAL_ERROR); } return protocolProvider; } /** * Fills the UserID and Password fields in this panel with the data coming * from the given protocolProvider. * @param protocolProvider The <tt>ProtocolProviderService</tt> to load the * data from. */ @Override public void loadAccount(final ProtocolProviderService protocolProvider) { setModification(true); this.protocolProvider = protocolProvider; this.registration = new IrcAccountRegistration(); this.firstWizardPage.loadAccount(protocolProvider); } /** * Returns the registration object, which will store all the data through * the wizard. * * @return the registration object, which will store all the data through * the wizard */ public IrcAccountRegistration getRegistration() { return registration; } /** * Returns the size of this wizard. * @return the size of this wizard */ @Override public Dimension getSize() { return new Dimension(WIZARD_DIALOG_WIDTH, WIZARD_DIALOG_HEIGHT); } /** * Returns the identifier of the page to show first in the wizard. * @return the identifier of the page to show first in the wizard. */ @Override public Object getFirstPageIdentifier() { return firstWizardPage.getIdentifier(); } /** * Returns the identifier of the page to show last in the wizard. * @return the identifier of the page to show last in the wizard. */ @Override public Object getLastPageIdentifier() { return firstWizardPage.getIdentifier(); } /** * Returns an example string, which should indicate to the user how the * user name should look like. * @return an example string, which should indicate to the user how the * user name should look like. */ @Override public String getUserNameExample() { return FirstWizardPage.USER_NAME_EXAMPLE; } /** * Indicates whether this wizard enables the simple "sign in" form shown * when the user opens the application for the first time. The simple * "sign in" form allows user to configure her account in one click, just * specifying her username and password and leaving any other configuration * as by default. * @return <code>true</code> if the simple "Sign in" form is enabled or * <code>false</code> otherwise. */ @Override public boolean isSimpleFormEnabled() { return false; } /** * Returns a simple account registration form that would be the first form * shown to the user. Only if the user needs more settings she'll choose * to open the advanced wizard, consisted by all pages. * * @param isCreateAccount indicates if the simple form should be opened as * a create account form or as a login form * @return a simple account registration form */ @Override public Object getSimpleForm(final boolean isCreateAccount) { firstWizardPage = new FirstWizardPage(this, "", ""); return firstWizardPage.getSimpleForm(); } }