/******************************************************************************* * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v2.1 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * * Contributors: * hangum - initial API and implementation ******************************************************************************/ package com.hangum.tadpole.login.core.dialog; import java.util.Date; import java.util.List; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import com.hangum.tadpole.commons.admin.core.dialogs.users.NewUserDialog; import com.hangum.tadpole.commons.exception.TadpoleAuthorityException; import com.hangum.tadpole.commons.libs.core.dao.LicenseDAO; import com.hangum.tadpole.commons.libs.core.define.PublicTadpoleDefine; import com.hangum.tadpole.commons.libs.core.define.SystemDefine; import com.hangum.tadpole.commons.libs.core.message.CommonMessages; import com.hangum.tadpole.commons.libs.core.utils.LicenseValidator; import com.hangum.tadpole.commons.util.DateUtil; import com.hangum.tadpole.commons.util.GlobalImageUtils; import com.hangum.tadpole.commons.util.IPUtil; import com.hangum.tadpole.commons.util.LDAPUtil; import com.hangum.tadpole.commons.util.LoadConfigFile; import com.hangum.tadpole.commons.util.RequestInfoUtils; import com.hangum.tadpole.engine.query.dao.system.UserDAO; import com.hangum.tadpole.engine.query.sql.TadpoleSystem_UserQuery; import com.hangum.tadpole.engine.security.OTPInputDialog; import com.hangum.tadpole.login.core.message.LoginDialogMessages; import com.hangum.tadpole.preference.define.AdminPreferenceDefine; import com.hangum.tadpole.preference.define.GetAdminPreference; import com.hangum.tadpole.preference.dialogs.user.ChangePasswordDialog; import com.hangum.tadpole.session.manager.SessionManager; /** * Abstract login dialog * * @author hangum * */ public abstract class AbstractLoginDialog extends Dialog { private static final Logger logger = Logger.getLogger(AbstractLoginDialog.class); protected int ID_NEW_USER = IDialogConstants.CLIENT_ID + 1; protected int ID_FINDPASSWORD = IDialogConstants.CLIENT_ID + 2; protected Text textEMail; protected Text textPasswd; protected Combo comboLanguage; protected AbstractLoginDialog(Shell parentShell) { super(parentShell); } @Override public void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(String.format("%s", SystemDefine.NAME)); //$NON-NLS-1$ newShell.setImage(GlobalImageUtils.getTadpoleIcon()); } /** * validation * * @param strEmail * @param strPass */ protected boolean validation(String strEmail, String strPass) { // validation if("".equals(strEmail)) { //$NON-NLS-1$ MessageDialog.openWarning(getParentShell(), CommonMessages.get().Warning, LoginDialogMessages.get().LoginDialog_11); textEMail.setFocus(); return false; } else if("".equals(strPass)) { //$NON-NLS-1$ MessageDialog.openWarning(getParentShell(), CommonMessages.get().Warning, LoginDialogMessages.get().LoginDialog_14); textPasswd.setFocus(); return false; } return true; } /** * LDAP Login * * @param strEmail * @param strPass */ protected void ldapLogin(String strEmail, String strPass) throws TadpoleAuthorityException { LDAPUtil.getInstance().ldapLogin(strEmail, strPass); } /** * 허용가능한 ip 검사 * * @param userDao * @param strAllowIP * @param strUserIP * @return */ protected boolean isAllowIP(UserDAO userDao, String strAllowIP, String strUserIP) { boolean isAllow = IPUtil.ifFilterString(strAllowIP, strUserIP); if(logger.isDebugEnabled())logger.debug(LoginDialogMessages.get().LoginDialog_21 + userDao.getEmail() + LoginDialogMessages.get().LoginDialog_22 + strAllowIP + LoginDialogMessages.get().LoginDialog_23+ RequestInfoUtils.getRequestIP()); if(!isAllow) { logger.error(LoginDialogMessages.get().LoginDialog_21 + userDao.getEmail() + LoginDialogMessages.get().LoginDialog_22 + strAllowIP + LoginDialogMessages.get().LoginDialog_26+ RequestInfoUtils.getRequestIP()); saveLoginHistory(userDao.getSeq(), strUserIP, PublicTadpoleDefine.YES_NO.NO.name(), String.format("IP : Access ip %s, User IP %s", strAllowIP, strUserIP)); MessageDialog.openWarning(getParentShell(), CommonMessages.get().Warning, LoginDialogMessages.get().LoginDialog_28); return false; } return true; } /** * 사용자 otp * * @param userDao * @param strUserIP * @return */ protected boolean isQuestOTP(UserDAO userDao, String strUserIP) { if(PublicTadpoleDefine.YES_NO.YES.name().equals(userDao.getUse_otp())) { if(LoadConfigFile.isUseOPT()) { OTPInputDialog otpDialog = new OTPInputDialog(getShell(), userDao.getEmail(), userDao.getOtp_secret()); if(Dialog.CANCEL == otpDialog.open()) { saveLoginHistory(userDao.getSeq(), strUserIP, PublicTadpoleDefine.YES_NO.NO.name(), String.format("OTP Fail")); return false; } } } return true; } /** * 신규사용자. */ protected void newUser() { NewUserDialog newUser = new NewUserDialog(getParentShell()); if(Dialog.OK == newUser.open()) { String strEmail = newUser.getUserDao().getEmail(); textEMail.setText(strEmail); textPasswd.setFocus(); } } /** * 사용자 패스워드 찾기 */ protected void findPassword() { FindPasswordDialog dlg = new FindPasswordDialog(getShell(), textEMail.getText()); dlg.open(); } /** * 로그인 사유 * * @param userSeq * @param strIP * @param strYesNO * @param strReason */ protected void saveLoginHistory(int userSeq, String strIP, String strYesNO, String strReason) { if(LicenseValidator.getLicense().isEnterprise()) { TadpoleSystem_UserQuery.saveLoginHistory(userSeq, strIP, strYesNO, strReason); } } /** * 로그인시 패스워드가 틀림. * @param strEmail * @param ip_servletRequest * @param strYesNO * @param strReason */ protected void saveLoginHistory(String strEmail, String ip_servletRequest, String strYesNO, String strReason) { try { List<UserDAO> listUser = TadpoleSystem_UserQuery.findExistUser(strEmail); if(!listUser.isEmpty()) { saveLoginHistory(listUser.get(0).getSeq(), ip_servletRequest, strYesNO, strReason); } } catch (Exception e) { logger.error("get userlist", e); } } /** * system message */ protected void preLogin(UserDAO userDao) { LicenseDAO licenseDAO = LicenseValidator.getLicense(); if(licenseDAO.isEnterprise() && !licenseDAO.isValidate()) { MessageDialog.openWarning(getShell(), CommonMessages.get().Warning, licenseDAO.getMsg()); } // 일반적인 상황이면 패스워드 교체 주기인지 검사한다. if(StringUtils.equals(GetAdminPreference.getLoginMethod(), AdminPreferenceDefine.SYSTEM_LOGIN_METHOD_VALUE)) { // 패스워드 수정 교체주기가 넘어서 있는지 점검한다. int intMaxDay = Integer.parseInt(GetAdminPreference.getPasswdDateLimit()); long longChangedTime = DateUtil.afterMonthToMillis(userDao.getChanged_passwd_time().getTime(), intMaxDay); if(System.currentTimeMillis() > longChangedTime) { if(logger.isDebugEnabled()) logger.debug("Must be changed password. " + new Date(longChangedTime)); ChangePasswordDialog dialog = new ChangePasswordDialog(getShell()); dialog.open(); } else { if(logger.isDebugEnabled()) logger.debug("Doesnot chaged password. password chaged date is " + new Date(longChangedTime)); } } } @Override public boolean close() { // 로그인이 안되었을 경우 로그인 창이 남아 있도록...(https://github.com/hangum/TadpoleForDBTools/issues/31) if(!SessionManager.isLogin()) return false; return super.close(); } }