package bce.server.servicers; import java.io.File; import java.util.List; import bce.java.entities.BCEPrivateKey; import bce.java.utils.Hash; import bce.jni.utils.BCEUtils; import bce.server.dao.BCESystemDAO; import bce.server.dao.PrivateKeyDAO; import bce.server.entities.PersistentBCESystem; import bce.server.entities.PersistentPrivateKey; import bce.server.entities.PersistentUser; import bce.server.util.BCEObjectConverter; /** * 业务类,MainPageServlet的业务服务者 * * @author robins * */ public class MainPageServicer { PrivateKeyDAO privateKeyDAO; BCESystemDAO systemDAO; public void setPrivateKeyDAO(PrivateKeyDAO privateKeyDAO) { this.privateKeyDAO = privateKeyDAO; } public void setSystemDAO(BCESystemDAO systemDAO) { this.systemDAO = systemDAO; } public MainPageServicer() { } /** * 为当前用户申请一个新的BCE私钥 * * @param user 当前用户对象 * @return 新申请的BCE私钥持久化对象 */ public PersistentPrivateKey applyBCEPrivateKey(PersistentUser user) { PersistentPrivateKey privateKey = privateKeyDAO.getFirstAvailable(); privateKey.setBelongedUser(user); privateKeyDAO.update(privateKey); return privateKey; } /** * 在首次加载用户主页面时,或用户主页面刷新时,为当前用户准备已有BCE数据 * * @param user 当前用户持久化对象 * @return 当前用户已有的BCE私钥集合 */ public List<PersistentPrivateKey> prepareBCEData(PersistentUser user) { List<PersistentPrivateKey> dataList = privateKeyDAO.get(user); return dataList; } /** * 用户在下载某个已有BCE私钥时,为其准备该私钥 * * @param privateKeyId 私钥的标志符 * @return BCE私钥业务对象 */ public BCEPrivateKey prepareBCEPrivateKey(Integer privateKeyId) { PersistentPrivateKey persistentPrivateKey = privateKeyDAO.get(privateKeyId); BCEPrivateKey privateKey = BCEObjectConverter.transform(persistentPrivateKey); persistentPrivateKey.abort(); return privateKey; } public File prepareBCEClientParams(Integer systemId) { PersistentBCESystem bceSystem = systemDAO.get(systemId); String paramsFileName = bceSystem.getGlobalSysParamsURI(); File paramsFile = new File(paramsFileName); return paramsFile; } /** * 用户申请新的BCE私钥时,用于验证用户二次输入的密码是否正确 * * @param password 用户二次输入的密码 * @param user 存在session中的当前登录用户 * @return true:密码正确;false:密码错误 */ public boolean isValidPassword(String password, PersistentUser user) { if (password == null) return false; else if (BCEUtils.hex(Hash.sha1(password)).equals(user.getPassword())) return true; else return false; } /** * 用户申请新的BCE私钥时,用于验证验证码是否正确 * * @param vcodeInRequest存储在request域中的验证码 * @param codeInSession 存储在session域中的验证码 * @return true:验证码正确;false:验证码错误 */ public boolean isValidVcode(String vcodeInRequest, String vcodeInSession) { if (vcodeInRequest == null || vcodeInSession == null) return false; else if (vcodeInRequest.equals(vcodeInSession)) return true; else return false; } }