* @param response
* @return
*/
public static boolean doLogin(String userName, String password, boolean rememberMe, HttpServletRequest request, HttpServletResponse response) throws NoSuchUserException {
try {
User user = null;
boolean match = false;
Company comp = com.dotmarketing.cms.factories.PublicCompanyFactory.getDefaultCompany();
if (comp.getAuthType().equals(Company.AUTH_TYPE_EA)) {
if(userName.equalsIgnoreCase(APILocator.getUserAPI().getSystemUser().getEmailAddress())){
SecurityLogger.logInfo(LoginFactory.class,"An invalid attempt to login with email as " + userName + " from IP: " + request.getRemoteAddr());
return false;
}
} else {
if(userName.equalsIgnoreCase(APILocator.getUserAPI().getSystemUser().getUserId())){
SecurityLogger.logInfo(LoginFactory.class,"An invalid attempt to login with userID as " + userName + " from IP: " + request.getRemoteAddr());
return false;
}
}
if ((PRE_AUTHENTICATOR != null) &&
(0 < PRE_AUTHENTICATOR.length()) &&
PRE_AUTHENTICATOR.equals(Config.getStringProperty("LDAP_FRONTEND_AUTH_IMPLEMENTATION"))) {
Class ldap_auth_impl_class = Class.forName(Config.getStringProperty("LDAP_FRONTEND_AUTH_IMPLEMENTATION"));
Authenticator ldap_auth_impl = (Authenticator) ldap_auth_impl_class.newInstance();
int auth = 0;
if (comp.getAuthType().equals(Company.AUTH_TYPE_EA)) {
auth = ldap_auth_impl.authenticateByEmailAddress(comp.getCompanyId(), userName, password);
} else {
auth = ldap_auth_impl.authenticateByUserId(comp.getCompanyId(), userName, password);
}
if (comp.getAuthType().equals(Company.AUTH_TYPE_EA)) {
user = APILocator.getUserAPI().loadByUserByEmail(userName, APILocator.getUserAPI().getSystemUser(), false);
} else {
user = APILocator.getUserAPI().loadUserById(userName, APILocator.getUserAPI().getSystemUser(), false);
}
try{
boolean SYNC_PASSWORD = BaseAuthenticator.SYNC_PASSWORD;
if(!SYNC_PASSWORD){
String roleName = LDAPImpl.LDAP_USER_ROLE;
if(com.dotmarketing.business.APILocator.getRoleAPI().doesUserHaveRole(user, roleName)){
user.setPassword(DotCustomLoginPostAction.FAKE_PASSWORD);
APILocator.getUserAPI().save(user,APILocator.getUserAPI().getSystemUser(),false);
}
}
}catch (Exception e) {
Logger.debug(LoginFactory.class, "syncPassword not set or unable to load user", e);
}
match = auth == Authenticator.SUCCESS;
} else {
if (comp.getAuthType().equals(Company.AUTH_TYPE_EA)) {
user = APILocator.getUserAPI().loadByUserByEmail(userName, APILocator.getUserAPI().getSystemUser(), false);
} else {
user = APILocator.getUserAPI().loadUserById(userName, APILocator.getUserAPI().getSystemUser(), false);
}
if ((user == null) || (!UtilMethods.isSet(user.getEmailAddress()))) {
SecurityLogger.logInfo(LoginFactory.class,"An invalid attempt to login or no email set for " + userName + " from IP: " + request.getRemoteAddr());
throw new NoSuchUserException();
}
if (user.isNew() ||
(!Config.getBooleanProperty("ALLOW_INACTIVE_ACCOUNTS_TO_LOGIN", false) && !user.isActive())) {
SecurityLogger.logInfo(LoginFactory.class,"An invalid attempt to login to an inactive account as " + userName + " from IP: " + request.getRemoteAddr());
return false;
}
match = user.getPassword().equals(password) || user.getPassword().equals(PublicEncryptionFactory.digestString(password));
if (match) {
if(useSalesForceLoginFilter){/*Custom Code */
user = SalesForceUtils.migrateUserFromSalesforce(userName, request, response, false);
String instanceURL = request.getSession().getAttribute(SalesForceUtils.INSTANCE_URL).toString();
String accessToken = request.getSession().getAttribute(SalesForceUtils.ACCESS_TOKEN).toString();
if(UtilMethods.isSet(accessToken) && UtilMethods.isSet(instanceURL)){
SalesForceUtils.syncRoles(user.getEmailAddress(), request, response, accessToken, instanceURL);
}
}/*End of Custom Code*/
user.setLastLoginDate(new java.util.Date());
APILocator.getUserAPI().save(user,APILocator.getUserAPI().getSystemUser(),false);
} else {
/*Custom code*/
if(useSalesForceLoginFilter && user.getPassword().equalsIgnoreCase(SalesForceUtils.PASSWORD)){
boolean saveSalesForceInfoInDotCMSLog = new Boolean (APILocator.getPluginAPI().loadProperty("com.dotcms.salesforce.plugin", "save_log_info_dotcms_log"));
boolean saveSalesForceInfoInUserActivityLog = new Boolean (APILocator.getPluginAPI().loadProperty("com.dotcms.salesforce.plugin", "save_log_info_useractivity_log"));
boolean isBoundToSalesforceServer = SalesForceUtils.accessSalesForceServer(request, response, user.getEmailAddress());
if(isBoundToSalesforceServer){
if(saveSalesForceInfoInDotCMSLog){
Logger.info(LoginFactory.class, "dotCMS-Salesforce Plugin: User " + user.getEmailAddress()
+ " was able to connect to Salesforce server from IP: " + request.getRemoteAddr());
}
if(saveSalesForceInfoInUserActivityLog){
SecurityLogger.logInfo(LoginFactory.class, "dotCMS-Salesforce Plugin :" +
"User " + user.getEmailAddress() + " was able to connect to Salesforce server from IP: " + request.getRemoteAddr());
}
String instanceURL = request.getSession().getAttribute(SalesForceUtils.INSTANCE_URL).toString();
String accessToken = request.getSession().getAttribute(SalesForceUtils.ACCESS_TOKEN).toString();
if(UtilMethods.isSet(accessToken) && UtilMethods.isSet(instanceURL)){
match = true;
}
}
}
/* end of custom code*/
else{
match = false;
user.setFailedLoginAttempts(user.getFailedLoginAttempts()+1);
APILocator.getUserAPI().save(user,APILocator.getUserAPI().getSystemUser(),false);
SecurityLogger.logInfo(LoginFactory.class,"An invalid attempt to login as " + userName + " from IP: " + request.getRemoteAddr());
}
}
}
// if passwords match
if (match) {
HttpSession ses = request.getSession();
// session stuff
ses.setAttribute(WebKeys.CMS_USER, user);
//set personalization stuff on session
// set id cookie
Cookie autoLoginCookie = UtilMethods.getCookie(request.getCookies(), WebKeys.CMS_USER_ID_COOKIE);
if(autoLoginCookie == null && rememberMe) {
autoLoginCookie = new Cookie(WebKeys.CMS_USER_ID_COOKIE, APILocator.getUserAPI().encryptUserId(user.getUserId()));
}
if (rememberMe) {
autoLoginCookie.setMaxAge(60 * 60 * 24 * 356);
} else if (autoLoginCookie != null) {