/*******************************************************************************
* Copyright (c) 2013, Perforce Software
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
******************************************************************************/
package com.perforce.p4java.extension.server;
/**
* An enumeration of login states for a Perforce server.
* <p>
*
*/
public enum LoginStatus {
/**
* User does not need to log in because a password is unnecessary.
*/
UNNECESSARY(true) {
@Override
protected boolean parseServerString(String serverString) {
return serverString.contains("not necessary, no password");
}
},
/**
* User is logged in and has a valid ticket.
*/
VALID_TICKET(true) {
@Override
protected boolean parseServerString(String serverString) {
return serverString.contains("ticket expires in");
}
},
/**
* User is not allowed to log in.
*/
NO_ACCESS(false) {
@Override
protected boolean parseServerString(String serverString) {
return serverString.contains("Access for user");
}
},
/**
* User needs to log in.
*/
LOGIN_REQURIED(false) {
/**
* Signals access (login) needed
*/
protected static final String PASSWORD_UNSET = "Perforce password (P4PASSWD)";
/**
* Signals ticket has expired
*/
protected static final String EXPIRED_TICKET_1 = "Your session has expired";
/**
* Signals ticket has expired
*/
protected static final String EXPIRED_TICKET_2 = "Your session was logged out";
/**
* SSO Failure.
*/
protected static final String SSO_FAILED = "Single sign-on on client failed";
private final String[] errorMessages = { PASSWORD_UNSET,
EXPIRED_TICKET_1, EXPIRED_TICKET_2, SSO_FAILED };
@Override
protected boolean parseServerString(String serverString) {
for (String message : errorMessages)
if (serverString.contains(message))
return true;
return false;
}
},
/**
* The server returned an unrecognized message, and status could not be
* determined.
*/
UNKNOWN(false);
private final boolean loggedIn;
private LoginStatus(boolean loggedIn) {
this.loggedIn = loggedIn;
}
public boolean isLoggedIn() {
return loggedIn;
}
protected boolean parseServerString(String serverString) {
return false;
}
/**
* Determines the LoginStatus of a server connection based on a returned
* server message.
*
* @param serverMessage
* the String message returned from the server. Can be null.
* @return the LoginStatus associated with the provided String. UNKNOWN is
* returned if the server message is unparseable, unrecognized, or
* null.
*/
public static LoginStatus fromServerString(String serverMessage) {
if (serverMessage == null)
return UNKNOWN;
for (LoginStatus ls : LoginStatus.values())
if (ls.parseServerString(serverMessage))
return ls;
return UNKNOWN;
}
}