package org.akaza.openclinica.web.filter;
import org.akaza.openclinica.bean.login.UserAccountBean;
import org.akaza.openclinica.dao.hibernate.AuditUserLoginDao;
import org.akaza.openclinica.dao.login.UserAccountDAO;
import org.akaza.openclinica.domain.technicaladmin.AuditUserLoginBean;
import org.akaza.openclinica.domain.technicaladmin.LoginStatus;
import org.akaza.openclinica.i18n.util.ResourceBundleProvider;
import org.springframework.security.core.session.SessionInformation;
import org.springframework.security.core.session.SessionRegistryImpl;
import org.springframework.security.core.userdetails.User;
import javax.sql.DataSource;
import java.util.Date;
import java.util.Locale;
public class OpenClinicaSessionRegistryImpl extends SessionRegistryImpl {
AuditUserLoginDao auditUserLoginDao;
UserAccountDAO userAccountDao;
DataSource dataSource;
@Override
public void removeSessionInformation(String sessionId) {
SessionInformation info = getSessionInformation(sessionId);
if (info != null) {
User u = (User) info.getPrincipal();
auditLogout(u.getUsername());
}
super.removeSessionInformation(sessionId);
}
void auditLogout(String username) {
ResourceBundleProvider.updateLocale(new Locale("en_US"));
UserAccountBean userAccount = (UserAccountBean) getUserAccountDao().findByUserName(username);
AuditUserLoginBean auditUserLogin = new AuditUserLoginBean();
auditUserLogin.setUserName(username);
auditUserLogin.setLoginStatus(LoginStatus.SUCCESSFUL_LOGOUT);
auditUserLogin.setLoginAttemptDate(new Date());
auditUserLogin.setUserAccountId(userAccount != null ? userAccount.getId() : null);
getAuditUserLoginDao().saveOrUpdate(auditUserLogin);
}
public DataSource getDataSource() {
return dataSource;
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public UserAccountDAO getUserAccountDao() {
return userAccountDao != null ? userAccountDao : new UserAccountDAO(dataSource);
}
public AuditUserLoginDao getAuditUserLoginDao() {
return auditUserLoginDao;
}
public void setAuditUserLoginDao(AuditUserLoginDao auditUserLoginDao) {
this.auditUserLoginDao = auditUserLoginDao;
}
}