package com.mossle.user.service;
import java.util.List;
import javax.annotation.Resource;
import com.mossle.api.user.AccountAliasConverter;
import com.mossle.api.user.AccountLogDTO;
import com.mossle.api.user.AccountStatus;
import com.mossle.api.user.ApplicationAliasConverter;
import com.mossle.api.user.MockAccountAliasConverter;
import com.mossle.api.user.MockApplicationAliasConverter;
import com.mossle.core.mapper.BeanMapper;
import com.mossle.user.persistence.domain.AccountLog;
import com.mossle.user.persistence.manager.AccountLogManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@Transactional
public class AccountLogService {
private static Logger logger = LoggerFactory
.getLogger(AccountLogService.class);
private BeanMapper beanMapper = new BeanMapper();
private AccountLogManager accountLogManager;
private AccountLockService accountLockService;
private AccountAliasConverter accountAliasConverter = new MockAccountAliasConverter();
private ApplicationAliasConverter applicationAliasConverter = new MockApplicationAliasConverter();
/**
* 批量记录认证日志.
*/
public void batchLog(List<AccountLogDTO> accountLogDtos) {
for (AccountLogDTO accountLogDto : accountLogDtos) {
AccountLog accountLog = new AccountLog();
beanMapper.copy(accountLogDto, accountLog);
if (accountAliasConverter != null) {
String username = accountLog.getUsername();
String realUsername = accountAliasConverter
.convertAlias(username);
accountLog.setUsername(realUsername);
}
String username = accountLog.getUsername();
if (username.length() > 64) {
logger.info("username : {}", username);
username = username.substring(0, 64);
accountLog.setUsername(username);
}
String reason = accountLog.getReason();
if (reason.length() > 200) {
logger.info("reason : {}", reason);
reason = reason.substring(0, 200);
accountLog.setReason(reason);
}
this.log(accountLog);
}
}
/**
* 记录一条日志.
*/
public void log(AccountLog accountLog) {
accountLogManager.save(accountLog);
// if ("success".equals(accountLog.getResult())) {
// accountLockService.unlock(accountLog.getUsername(),
// accountLog.getApplication());
// } else
if (AccountStatus.BAD_CREDENTIALS.equals(accountLog.getReason())) {
String application = accountLog.getApplication();
if (applicationAliasConverter != null) {
application = applicationAliasConverter.convertAlias(
application, accountLog.getClient());
}
accountLockService.addLockLog(accountLog.getUsername(),
application, accountLog.getLogTime());
}
}
@Resource
public void setAccountLogManager(AccountLogManager accountLogManager) {
this.accountLogManager = accountLogManager;
}
@Resource
public void setAccountLockService(AccountLockService accountLockService) {
this.accountLockService = accountLockService;
}
@Autowired(required = false)
public void setAccountAliasConverter(
AccountAliasConverter accountAliasConverter) {
this.accountAliasConverter = accountAliasConverter;
}
@Autowired(required = false)
public void setApplicationAliasConverter(
ApplicationAliasConverter applicationAliasConverter) {
this.applicationAliasConverter = applicationAliasConverter;
}
}