/*******************************************************************************
* Copyright (c) 2013 hangum.
* 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.engine.query.sql;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.math.NumberUtils;
import org.apache.log4j.Logger;
import com.hangum.tadpole.commons.exception.TadpoleAuthorityException;
import com.hangum.tadpole.commons.exception.TadpoleRuntimeException;
import com.hangum.tadpole.commons.exception.TadpoleSQLManagerException;
import com.hangum.tadpole.commons.libs.core.define.PublicTadpoleDefine;
import com.hangum.tadpole.commons.libs.core.utils.SHA256Utils;
import com.hangum.tadpole.commons.util.ApplicationArgumentUtils;
import com.hangum.tadpole.commons.util.DateUtil;
import com.hangum.tadpole.engine.Messages;
import com.hangum.tadpole.engine.initialize.TadpoleSystemInitializer;
import com.hangum.tadpole.engine.manager.TadpoleSQLManager;
import com.hangum.tadpole.engine.query.dao.system.UserDAO;
import com.hangum.tadpole.engine.query.dao.system.UserLoginHistoryDAO;
import com.hangum.tadpole.preference.define.GetAdminPreference;
import com.ibatis.sqlmap.client.SqlMapClient;
/**
* Define User query.
*
* @author hangum
*
*/
public class TadpoleSystem_UserQuery {
private static final Logger logger = Logger.getLogger(TadpoleSystem_UserQuery.class);
/**
* 모든 유효한 유저 목록을 가져옵니다.
*
* @param delyn
* @return
* @throws TadpoleSQLManagerException, SQLException
*/
public static List<UserDAO> getAllUser() throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
return sqlClient.queryForList("getAllUser"); //$NON-NLS-1$
}
/**
* 모든 유효한 유저 목록을 가져옵니다.
*
* @param delyn
* @return
* @throws TadpoleSQLManagerException, SQLException
*/
public static List<UserDAO> getLiveAllUser() throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
return sqlClient.queryForList("getLiveAllUser"); //$NON-NLS-1$
}
/**
* add ldap user
*
* @param userName
* @param email
* @param external_id
* @param useOTP
*
* @return
* @throws TadpoleSQLManagerException
* @throws SQLException
*/
public static UserDAO newLDAPUser(String userName, String email, String external_id, String useOPT) throws TadpoleSQLManagerException, SQLException, Exception {
return newUser(PublicTadpoleDefine.INPUT_TYPE.NORMAL.toString(), email, "LDAP", "YES", "TadpoleLDAPLogin", PublicTadpoleDefine.USER_ROLE_TYPE.ADMIN.toString(),
userName, "KO", "Asia/Seoul", "YES", useOPT, "", "*", external_id);
}
/**
* 신규 유저를 등록합니다.
*
* @param inputType
* @param email
* @param email_key
* @param is_email_certification
* @param passwd
* @param roleType
* @param name
* @param language
* @param timezone
* @param approvalYn
* @param use_otp
* @param otp_secret
* @param strAllowIP
* @param strIsRegistDb
* @param strIsSharedDb
* @param intLimitAddDBCnt
* @param serviceStart
* @param serviceEnd
* @param external_id
* @return
* @throws TadpoleSQLManagerException, SQLException
*/
public static UserDAO newUser(String inputType, String email, String email_key, String is_email_certification, String passwd,
String roleType, String name, String language, String timezone, String approvalYn, String use_otp, String otp_secret,
String strAllowIP, String external_id
) throws TadpoleSQLManagerException, SQLException, Exception {
UserDAO loginDAO = new UserDAO();
loginDAO.setInput_type(inputType);
loginDAO.setEmail(email);
loginDAO.setEmail_key(email_key);
loginDAO.setIs_email_certification(is_email_certification);
loginDAO.setPasswd(SHA256Utils.getSHA256(passwd));
loginDAO.setChanged_passwd_time(new Timestamp(System.currentTimeMillis()));
loginDAO.setRole_type(roleType);
loginDAO.setName(name);
loginDAO.setLanguage(language);
loginDAO.setTimezone(timezone);
loginDAO.setApproval_yn(approvalYn);
loginDAO.setUse_otp(use_otp);
loginDAO.setOtp_secret(otp_secret);
loginDAO.setAllow_ip(strAllowIP);
loginDAO.setIs_regist_db(GetAdminPreference.getIsAddDB());
loginDAO.setIs_shared_db(GetAdminPreference.getIsSharedDB());
loginDAO.setLimit_add_db_cnt(NumberUtils.toInt(GetAdminPreference.getDefaultAddDBCnt()));
loginDAO.setIs_modify_perference(GetAdminPreference.getIsPreferenceModify());
loginDAO.setService_start(new Timestamp(System.currentTimeMillis()));
loginDAO.setService_end(new Timestamp(DateUtil.afterMonthToMillis(NumberUtils.toInt(GetAdminPreference.getServiceDurationDay()))));
loginDAO.setExternal_id(external_id);
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
List isUser = sqlClient.queryForList("isUser", email); //$NON-NLS-1$
if(isUser.isEmpty()) {
UserDAO userdb = (UserDAO)sqlClient.insert("newUser", loginDAO); //$NON-NLS-1$
TadpoleSystem_UserInfoData.initializeUserPreferenceData(userdb);
return userdb;
} else {
throw new TadpoleRuntimeException(Messages.get().TadpoleSystem_UserQuery_3);
}
}
/**
* 이메일이 중복된 사용자가 있는지 검사합니다.
*
* @param email
* @return
* @throws TadpoleSQLManagerException, SQLException
*/
public static boolean isDuplication(String email) throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
List isUser = sqlClient.queryForList("isUser", email); //$NON-NLS-1$
if(isUser.size() == 0) {
return true;
}
return false;
}
/**
* search like email
* @param email
* @return
* @throws TadpoleSQLManagerException, SQLException
*/
public static List<UserDAO> findLikeUser(String email) throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
List<UserDAO> listUser = sqlClient.queryForList("findLikeUser", "%" + email + "%"); //$NON-NLS-1$
return listUser;
}
/**
* 유저를 넘겨 받는다.
* @param email
* @return
* @throws TadpoleSQLManagerException
* @throws SQLException
*/
public static List<UserDAO> findExistUser(String email) throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
List<UserDAO> listUser = sqlClient.queryForList("findEmailUser", email); //$NON-NLS-1$
return listUser;
}
/**
* 유저를 넘겨 받는다.
* @param email
* @return
* @throws TadpoleSQLManagerException
* @throws SQLException
*/
public static List<UserDAO> findExistExternalUser(String external_id) throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
List<UserDAO> listUser = sqlClient.queryForList("findExternalUser", external_id); //$NON-NLS-1$
return listUser;
}
/**
* 사용자 정보를 찾습니다.
*
* @param email
* @return
* @throws TadpoleSQLManagerException, SQLException
*/
public static UserDAO findUser(String email) throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
List<UserDAO> listUser = new ArrayList<UserDAO>();
if(ApplicationArgumentUtils.isOnlineServer()) {
listUser = sqlClient.queryForList("findEmailUser", email); //$NON-NLS-1$
} else {
listUser = sqlClient.queryForList("findLikeUser", "%" + email + "%"); //$NON-NLS-1$
}
if(listUser.size() == 0) {
throw new TadpoleRuntimeException(Messages.get().TadpoleSystem_UserQuery_0);
}
return listUser.get(0);
}
public static List<UserDAO> findUserList(String email) throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
List<UserDAO> listUser = new ArrayList<UserDAO>();
listUser = sqlClient.queryForList("findLikeUser", "%" + email + "%"); //$NON-NLS-1$
if(listUser.size() == 0) {
throw new TadpoleRuntimeException(Messages.get().TadpoleSystem_UserQuery_0);
}
return listUser;
}
/**
* 로그인시 email, passwd 확인
*
* @param email
* @param passwd
* @throws TadpoleSQLManagerException, SQLException
*/
public static UserDAO login(String email, String passwd) throws TadpoleAuthorityException, TadpoleSQLManagerException, SQLException, Exception {
UserDAO login = new UserDAO();
login.setEmail(email);
login.setPasswd(SHA256Utils.getSHA256(passwd));
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
UserDAO userInfo = (UserDAO)sqlClient.queryForObject("login", login); //$NON-NLS-1$
if(null == userInfo) {
throw new TadpoleAuthorityException(Messages.get().TadpoleSystem_UserQuery_5);
// } else {
// if(!passwd.equals(CipherManager.getInstance().decryption(userInfo.getPasswd()))) {
// throw new TadpoleAuthorityException(Messages.get().TadpoleSystem_UserQuery_5);
// }
}
return userInfo;
}
/**
* update email confirm
*
* @param email
* @throws TadpoleSQLManagerException, SQLException
*/
public static void updateEmailConfirm(String email) throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
sqlClient.update("updateEmailConfirm", email);
}
/**
* save login history
*
* @param userSeq
*/
public static void saveLoginHistory(int userSeq, String strIP) {
saveLoginHistory(userSeq, strIP, "YES", "");
}
/**
* save login history
*
* @param userSeq
* @param strYesNo
* @param strReason
*/
public static void saveLoginHistory(int userSeq, String strIP, String strYesNo, String strReason) {
try {
UserLoginHistoryDAO historyDao = new UserLoginHistoryDAO();
historyDao.setLogin_ip(strIP);
historyDao.setUser_seq(userSeq);
historyDao.setSucces_yn(strYesNo);
historyDao.setFail_reason(strReason);
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
sqlClient.insert("saveLoginHistory", historyDao);
} catch(Exception e) {
logger.error("save login history", e);
}
}
/**
* get login history
*
* @param strEmail
* @param strYesNo
* @param startTime
* @param endTime
*/
public static List<UserLoginHistoryDAO> getLoginHistory(String strEmail, String strYesNo, long startTime, long endTime) throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
Map<String, Object> queryMap = new HashMap<String, Object>();
queryMap.put("email", strEmail);
queryMap.put("succes_yn", strYesNo);
if(ApplicationArgumentUtils.isDBServer()) {
Date dateSt = new Date(startTime);
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
queryMap.put("startTime", formatter.format(dateSt));
Date dateEd = new Date(endTime);
queryMap.put("endTime", formatter.format(dateEd));
} else {
Date dateSt = new Date(startTime);
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
queryMap.put("startTime", formatter.format(dateSt));
Date dateEd = new Date(endTime);
queryMap.put("endTime", formatter.format(dateEd));
}
return (List<UserLoginHistoryDAO>)sqlClient.queryForList("getLoginHistory", queryMap);
}
/**
* get admin
*
* @return
* @throws TadpoleSQLManagerException, SQLException
*/
public static UserDAO getSystemAdmin() throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
return (UserDAO)sqlClient.queryForObject("getSystemAdmin"); //$NON-NLS-1$
}
/**
* group의 manager 정보를 리턴합니다.
*
* @param groupSeq
* @return
* @throws TadpoleSQLManagerException, SQLException
*/
public static UserDAO getGroupManager(int groupSeq) throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
return (UserDAO)sqlClient.queryForObject("groupManager", groupSeq); //$NON-NLS-1$
}
/**
* admin user가 한명이라면 로그인 화면에서 기본 유저로 설정하기 위해...
*
* @return UserDAO
* @throws TadpoleSQLManagerException, SQLException
*/
public static UserDAO loginUserCount() throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
Integer isUser = (Integer)sqlClient.queryForObject("loginUserCount"); //$NON-NLS-1$
if(isUser == 1) {
UserDAO userInfo = (UserDAO)sqlClient.queryForObject("onlyOnUser"); //$NON-NLS-1$
return userInfo;
}
return null;
}
/**
* 개인 사용자가 그룹 사용자로 수정
*
* @param user
* @throws TadpoleSQLManagerException, SQLException
*/
public static void updateUserPersonToGroup(UserDAO user) throws TadpoleSQLManagerException, SQLException, Exception {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
user.setPasswd(SHA256Utils.getSHA256(user.getPasswd()));
user.setChanged_passwd_time(new Timestamp(System.currentTimeMillis()));
sqlClient.update("updateUserPersonToGroup", user); //$NON-NLS-1$
}
/**
* 유저 데이터를 수정
* @param user
* @throws TadpoleSQLManagerException, SQLException
*/
public static void updateUserData(UserDAO user) throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
sqlClient.update("updateUserPermission", user); //$NON-NLS-1$
}
/**
* 유저의 name, password 를 수정한다.
* @param user
* @throws TadpoleSQLManagerException, SQLException
*/
public static void updateUserNameEmail(UserDAO user) throws TadpoleSQLManagerException, SQLException, Exception {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
sqlClient.update("updateUserNameEmail", user); //$NON-NLS-1$
}
/**
* 유저의 기본정보를 수정
* @param user
* @throws TadpoleSQLManagerException, SQLException
*/
public static void updateUserBasic(UserDAO user) throws TadpoleSQLManagerException, SQLException, Exception {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
sqlClient.update("updateUserBasic", user); //$NON-NLS-1$
}
/**
* 유저의 패스워드 번경
* @param user
* @throws TadpoleSQLManagerException, SQLException
*/
public static void updateUserPassword(UserDAO user) throws TadpoleSQLManagerException, SQLException, Exception {
user.setPasswd(SHA256Utils.getSHA256(user.getPasswd()));
user.setChanged_passwd_time(new Timestamp(System.currentTimeMillis()));
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
sqlClient.update("updateUserPassword", user); //$NON-NLS-1$
}
/**
* 유저의 패스워드 번경
* @param user
* @throws TadpoleSQLManagerException, SQLException
*/
public static void updateUserPasswordWithID(UserDAO user) throws TadpoleSQLManagerException, SQLException, Exception {
user.setPasswd(SHA256Utils.getSHA256(user.getPasswd()));
user.setChanged_passwd_time(new Timestamp(System.currentTimeMillis()));
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
sqlClient.update("updateUserPasswordWithID", user); //$NON-NLS-1$
}
/**
* 사용자 힌트 변경
*
* @param user
* @throws TadpoleSQLManagerException, SQLException
*/
public static void updateUserOTPCode(UserDAO user) throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
sqlClient.update("updateUserOTPCode", user); //$NON-NLS-1$
}
/**
* 사용자 정보.
*
* @param userSeq
* @return
* @throws TadpoleSQLManagerException, SQLException
*/
public static UserDAO getUserInfo(int userSeq) throws TadpoleSQLManagerException, SQLException {
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
return (UserDAO)sqlClient.queryForObject("getUserInfo", userSeq); //$NON-NLS-1$
}
/**
* 사용자 정보 값을 수정합니다.
* @param userDAO
* @param name
*/
public static void updateUserApproval(UserDAO userDAO, String yesNo) throws TadpoleSQLManagerException, SQLException {
UserDAO tmpUser = new UserDAO();
tmpUser.setSeq(userDAO.getSeq());
tmpUser.setApproval_yn(yesNo);
SqlMapClient sqlClient = TadpoleSQLManager.getInstance(TadpoleSystemInitializer.getUserDB());
sqlClient.update("updateUserApproval", tmpUser); //$NON-NLS-1$
}
}