/* * 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.impl.protocol.jabber; import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.util.*; import org.jivesoftware.smack.*; import org.jivesoftware.smackx.packet.*; /** * A jabber implementation of the password change operation set. * * @author Boris Grozev */ public class OperationSetChangePasswordJabberImpl implements OperationSetChangePassword { /** * The <tt>ProtocolProviderService</tt> whose password we'll change. */ private ProtocolProviderServiceJabberImpl protocolProvider; /** * The logger used by <tt>OperationSetChangePasswordJabberImpl</tt>. */ private static final Logger logger = Logger.getLogger(OperationSetChangePasswordJabberImpl.class); /** * Sets the object protocolProvider to the one given. * @param protocolProvider the protocolProvider to use. */ OperationSetChangePasswordJabberImpl ( ProtocolProviderServiceJabberImpl protocolProvider) { this.protocolProvider = protocolProvider; } /** * Changes the jabber account password of protocolProvider to newPass. * @param newPass the new password. * @throws IllegalStateException if the account is not registered. * @throws OperationFailedException if the server does not support password * changes. */ public void changePassword(String newPass) throws IllegalStateException, OperationFailedException { org.jivesoftware.smack.AccountManager accountManager = new org.jivesoftware.smack.AccountManager( protocolProvider.getConnection()); try { accountManager.changePassword(newPass); } catch (XMPPException e) { if(logger.isInfoEnabled()) { logger.info("Tried to change jabber password, but the server " + "does not support inband password changes", e); } throw new OperationFailedException("In-band password changes not" + " supported", OperationFailedException.NOT_SUPPORTED_OPERATION, e); } } /** * Returns true if the server supports password changes. Checks for * XEP-0077 (inband registrations) support via disco#info. * * @return True if the server supports password changes, false otherwise. */ public boolean supportsPasswordChange() { try { DiscoverInfo discoverInfo = protocolProvider.getDiscoveryManager() .discoverInfo( protocolProvider.getAccountID().getService()); return discoverInfo.containsFeature( ProtocolProviderServiceJabberImpl.URN_REGISTER); } catch(Exception e) { if(logger.isInfoEnabled()) logger.info("Exception occurred while trying to find out if" + " inband registrations are supported. Returning true" + "anyway."); /* It makes sense to return true if something goes wrong, because failing later on is not fatal, and registrations are very likely to be supported. */ return true; } } }