/*
* 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.service.protocol;
/**
* Implemented by the user interface, this interface allows a protocol provider
* to asynchronously demand passwords necessary for authentication against
* various realms.
* <p>
* Or in other (simpler words) this is a callback or a hook that the UI would
* give a protocol provider so that the protocol provider could
* requestCredentials() when necessary (when a password is not available for
* a server, or once it has changed, or re-demand one after a faulty
* authentication)
*
* @author Emil Ivov
* @author Yana Stamcheva
*/
public interface SecurityAuthority
{
/**
* Indicates that the reason for obtaining credentials is that an
* authentication is required.
*/
public static final int AUTHENTICATION_REQUIRED = 0;
/**
* Indicates that the reason for obtaining credentials is that the last time
* a wrong password has been provided.
*/
public static final int WRONG_PASSWORD = 1;
/**
* Indicates that the reason for obtaining credentials is that the last time
* a wrong user name has been provided.
*/
public static final int WRONG_USERNAME = 2;
/**
* Indicates that the reason for obtaining credentials is that the last time
* a wrong user name has been provided.
*/
public static final int CONNECTION_FAILED = 3;
/**
* Returns a UserCredentials object associated with the specified realm, by
* specifying the reason of this operation.
* <p>
* @param realm The realm that the credentials are needed for.
* @param defaultValues the values to propose the user by default
* @param reasonCode indicates the reason for which we're obtaining the
* credentials.
* @return The credentials associated with the specified realm or null if
* none could be obtained.
*/
public UserCredentials obtainCredentials(String realm,
UserCredentials defaultValues,
int reasonCode);
/**
* Returns a UserCredentials object associated with the specified realm, by
* specifying the reason of this operation.
* <p>
* @param realm The realm that the credentials are needed for.
* @param defaultValues the values to propose the user by default
* @return The credentials associated with the specified realm or null if
* none could be obtained.
*/
public UserCredentials obtainCredentials(String realm,
UserCredentials defaultValues);
/**
* Sets the userNameEditable property, which should indicate to the
* implementations of this interface if the user name could be changed by
* user or not.
*
* @param isUserNameEditable indicates if the user name could be changed by
* user in the implementation of this interface.
*/
public void setUserNameEditable(boolean isUserNameEditable);
/**
* Indicates if the user name is currently editable, i.e. could be changed
* by user or not.
*
* @return <code>true</code> if the user name could be changed,
* <code>false</code> - otherwise.
*/
public boolean isUserNameEditable();
}