All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.bitsensor.plugins.java.blocking.BlockingHandler Maven / Gradle / Ivy

The newest version!
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.DispatcherType;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;

@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) {
        if (request.getDispatcherType() == DispatcherType.ERROR)
            return;

        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;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy