package com.mossle.api.whitelist;
import java.io.IOException;
import javax.annotation.Resource;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mossle.api.tenant.TenantConnector;
import com.mossle.api.tenant.TenantDTO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class WhitelistFilter implements Filter {
private static Logger logger = LoggerFactory
.getLogger(WhitelistFilter.class);
private WhitelistConnector whitelistConnector;
private String code;
private WhitelistDTO whitelistDto;
private long timestamp;
private String defaultTenantCode = "default";
private TenantConnector tenantConnector;
public void init(FilterConfig filterConfig) {
}
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain filterChain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
this.checkAndReload();
if (whitelistDto.notValidIp(request.getRemoteAddr())) {
response.sendError(HttpServletResponse.SC_FORBIDDEN);
return;
}
filterChain.doFilter(req, res);
}
public void checkAndReload() {
if ((whitelistDto != null) && (System.currentTimeMillis() > timestamp)) {
return;
}
TenantDTO tenantDto = tenantConnector.findByCode(defaultTenantCode);
whitelistDto = whitelistConnector.getWhitelist(code, tenantDto.getId());
timestamp = System.currentTimeMillis() + (1000 * 60 * 2);
}
public void destroy() {
}
public void setWhitelistConnector(WhitelistConnector whitelistConnector) {
this.whitelistConnector = whitelistConnector;
}
public void setCode(String code) {
this.code = code;
}
public void setDefaultTenantCode(String defaultTenantCode) {
this.defaultTenantCode = defaultTenantCode;
}
@Resource
public void setTenantConnector(TenantConnector tenantConnector) {
this.tenantConnector = tenantConnector;
}
}