io.bitsensor.plugins.java.blocking.BlockingHandler Maven / Gradle / Ivy
package io.bitsensor.plugins.java.blocking;
import io.bitsensor.lib.entity.proto.Block;
import io.bitsensor.lib.entity.proto.Datapoint;
import io.bitsensor.plugins.java.core.BitSensor;
import io.bitsensor.plugins.java.http.AccessDeniedException;
import io.bitsensor.plugins.java.http.filter.handler.RequestHandler;
import io.bitsensor.plugins.shaded.org.springframework.beans.factory.annotation.Autowired;
import io.bitsensor.plugins.shaded.org.springframework.beans.factory.annotation.Value;
import io.bitsensor.plugins.shaded.org.springframework.core.annotation.Order;
import io.bitsensor.plugins.shaded.org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
@Component
@Order
public class BlockingHandler implements RequestHandler {
@Autowired
BlockingManager manager;
@Value("${bitsensor.blocking.message:This request has been blocked by BitSensor.}")
private String message;
@Override
public void handle(HttpServletRequest request, HttpServletResponse response) {
for (Block block : manager.getBlacklist()) {
if (block.getActive() && match(BitSensor.getDatapointBuilder().build(), block.getDatapointsList())) {
BitSensor.addEndpoint("blocking.id", block.getId());
BitSensor.addEndpoint("blocked", "true");
throw new AccessDeniedException(message);
}
}
}
private boolean match(Datapoint datapointToMatch, List datapoints) {
for (Datapoint datapoint : datapoints) {
if (datapoint == datapointToMatch ||
datapointToMatch.toBuilder().mergeFrom(datapoint).build().equals(datapointToMatch))
return true;
}
return false;
}
@Override
public ExecutionMoment getExecutionMoment() {
return ExecutionMoment.PRE_HANDLE;
}
}