package de.rwth.idsg.bikeman.ixsi;
import de.rwth.idsg.bikeman.config.IxsiConfiguration;
import de.rwth.idsg.bikeman.ixsi.repository.SystemValidator;
import de.rwth.idsg.bikeman.web.rest.exception.DatabaseException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor;
import java.net.InetSocketAddress;
import java.util.Map;
/**
* Created by max on 08/09/14.
*/
@Slf4j
@RequiredArgsConstructor
public class HandshakeInterceptor extends HttpSessionHandshakeInterceptor {
private final SystemValidator systemValidator;
@Override
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response,
WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
InetSocketAddress inetSocketAddress = request.getRemoteAddress();
log.trace("Starting handshake with {}", inetSocketAddress);
String ip = inetSocketAddress.getAddress().getHostAddress();
try {
String systemId = systemValidator.getSystemID(ip);
// to be be used in future
attributes.put(IxsiConfiguration.SYSTEM_ID_KEY, systemId);
return super.beforeHandshake(request, response, wsHandler, attributes);
} catch (DatabaseException e) {
log.error("Exception occurred", e);
throw e;
}
}
@Override
public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response,
WebSocketHandler wsHandler, Exception ex) {
super.afterHandshake(request, response, wsHandler, ex);
log.trace("Handshake complete with {}", request.getRemoteAddress());
}
}