/*******************************************************************************
* Copyright (c) 2012 - 2015 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.security;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.ui.PlatformUI;
import com.hangum.tadpole.commons.libs.core.define.PublicTadpoleDefine;
import com.hangum.tadpole.commons.util.Utils;
import com.hangum.tadpole.engine.define.DBGroupDefine;
import com.hangum.tadpole.engine.query.dao.system.UserDBDAO;
import com.hangum.tadpole.preference.define.GetAdminPreference;
import com.hangum.tadpole.session.manager.SessionManager;
/**
* Tadpole Security manager
*
*
* @author hangum
* @version 1.6.1
* @since 2015. 3. 24.
*
*/
public class TadpoleSecurityManager {
private static TadpoleSecurityManager instance = new TadpoleSecurityManager();
/**
* security manager
*/
private TadpoleSecurityManager() {}
public static TadpoleSecurityManager getInstance() {
return instance;
}
/**
* Is db lock status?
* @param userDB
* @return
*/
public boolean isLockStatus(final UserDBDAO userDB) {
if(PublicTadpoleDefine.YES_NO.YES.name().equals(userDB.getIs_lock())) {
return true;
}
return false;
}
/**
* DB is lock?
*
* @param userDB
* @return
*/
public boolean isLock(final UserDBDAO userDB) {
if(userDB == null) return false;
if(PublicTadpoleDefine.YES_NO.YES.name().equals(userDB.getIs_lock()) // 디비가 잠겨 있거나
|| PublicTadpoleDefine.YES_NO.NO.name().equals(GetAdminPreference.getSaveDBPassword()) // 패스워드를 저장하지 않거나
|| !PublicTadpoleDefine.YES_NO.NO.name().equals(GetAdminPreference.getConnectionAskType()) // 어드민이 디비 연결시 마다 묻도록 했거나
) {
if(!SessionManager.isUnlockDB(userDB)) {
return false;
}
}
return true;
}
/**
* If DB lock than open dialog
*
* @param userDB
* @return
*/
public boolean ifLockOpenDialog(final UserDBDAO userDB) {
if(!isLock(userDB)) {
return openAskDialog(userDB);
}
return true;
}
/**
* 패스워드, otp, 패드워드 + otp 다이얼로그를 열지 결정한다.
*
* @param userDB
* @return
*/
private boolean openAskDialog(final UserDBDAO userDB) {
// SQLite은 패스워드가 없으므로..
if(DBGroupDefine.SQLITE_GROUP == userDB.getDBGroup()) {
SessionManager.setUnlokDB(userDB);
return true;
}
// PublicTadpoleDefine#DB_CONNECTION_ASK NO, PASSWORD, OTP, PASSWORD_OTP
final String strConnectionASK = GetAdminPreference.getConnectionAskType();
if(!"NO".equals(strConnectionASK)) {
// password
if(strConnectionASK.equals(PublicTadpoleDefine.DB_CONNECTION_ASK.PASSWORD.toString())) {
return checkPasswd(userDB);
} else if(strConnectionASK.equals(PublicTadpoleDefine.DB_CONNECTION_ASK.OTP.toString())) {
return checkOTP(userDB);
} else if(strConnectionASK.equals(PublicTadpoleDefine.DB_CONNECTION_ASK.PASSWORD_OTP.toString())) {
return checkPasswordOTP(userDB);
}
return true;
} else {
return checkPasswd(userDB);
}
}
/**
* check password dialog
*
* @param userDB
* @return
*/
private boolean checkPasswordOTP(final UserDBDAO userDB) {
DBPasswordAndOTPDialog dialog = new DBPasswordAndOTPDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), userDB);
if(Dialog.OK == dialog.open()) {
SessionManager.setUnlokDB(userDB);
return true;
} else {
userDB.setPasswd(Utils.getUniqueDigit(7));
return false;
}
}
/**
* check password dialog
*
* @param userDB
* @return
*/
private boolean checkOTP(final UserDBDAO userDB) {
OTPInputDialog dialog = new OTPInputDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), SessionManager.getEMAIL(), SessionManager.getOTPSecretKey());
if(Dialog.OK == dialog.open()) {
SessionManager.setUnlokDB(userDB);
return true;
} else {
userDB.setPasswd(Utils.getUniqueDigit(7));
return false;
}
}
/**
* check password dialog
*
* @param userDB
* @return
*/
private boolean checkPasswd(final UserDBDAO userDB) {
DBPasswordDialog dialog = new DBPasswordDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), userDB);
if(Dialog.OK == dialog.open()) {
SessionManager.setUnlokDB(userDB);
return true;
} else {
userDB.setPasswd(Utils.getUniqueDigit(7));
return false;
}
}
}