diff --git a/src/main/java/com/corundumstudio/socketio/AuthorizationListener.java b/src/main/java/com/corundumstudio/socketio/AuthorizationListener.java index 886a076ce..261ae2316 100644 --- a/src/main/java/com/corundumstudio/socketio/AuthorizationListener.java +++ b/src/main/java/com/corundumstudio/socketio/AuthorizationListener.java @@ -15,14 +15,17 @@ */ package com.corundumstudio.socketio; +import java.util.Map; + public interface AuthorizationListener { /** * Checks is client with handshake data is authorized * * @param data - handshake data + * @param saveData - data need to save to store * @return - true if client is authorized of false otherwise */ - boolean isAuthorized(HandshakeData data); + boolean isAuthorized(HandshakeData data, Map saveData); } diff --git a/src/main/java/com/corundumstudio/socketio/handler/AuthorizeHandler.java b/src/main/java/com/corundumstudio/socketio/handler/AuthorizeHandler.java index b91859561..5fb99d82f 100644 --- a/src/main/java/com/corundumstudio/socketio/handler/AuthorizeHandler.java +++ b/src/main/java/com/corundumstudio/socketio/handler/AuthorizeHandler.java @@ -145,14 +145,15 @@ private boolean authorize(ChannelHandlerContext ctx, Channel channel, String ori headers.put(name, values); } - HandshakeData data = new HandshakeData(req.headers(), params, + HandshakeData handshakeData = new HandshakeData(req.headers(), params, (InetSocketAddress)channel.remoteAddress(), (InetSocketAddress)channel.localAddress(), req.uri(), origin != null && !origin.equalsIgnoreCase("null")); boolean result = false; + Map saveData = new HashMap(); try { - result = configuration.getAuthorizationListener().isAuthorized(data); + result = configuration.getAuthorizationListener().isAuthorized(handshakeData, saveData); } catch (Exception e) { log.error("Authorization error", e); } @@ -187,7 +188,8 @@ private boolean authorize(ChannelHandlerContext ctx, Channel channel, String ori return false; } - ClientHead client = new ClientHead(sessionId, ackManager, disconnectable, storeFactory, data, clientsBox, transport, disconnectScheduler, configuration); + + ClientHead client = new ClientHead(sessionId, ackManager, disconnectable, storeFactory, handshakeData, saveData, clientsBox, transport, disconnectScheduler, configuration); channel.attr(ClientHead.CLIENT).set(client); clientsBox.addClient(client); diff --git a/src/main/java/com/corundumstudio/socketio/handler/ClientHead.java b/src/main/java/com/corundumstudio/socketio/handler/ClientHead.java index f3b05e1a1..34e63a8d7 100644 --- a/src/main/java/com/corundumstudio/socketio/handler/ClientHead.java +++ b/src/main/java/com/corundumstudio/socketio/handler/ClientHead.java @@ -70,7 +70,7 @@ public class ClientHead { private volatile Transport currentTransport; public ClientHead(UUID sessionId, AckManager ackManager, DisconnectableHub disconnectable, - StoreFactory storeFactory, HandshakeData handshakeData, ClientsBox clientsBox, Transport transport, CancelableScheduler disconnectScheduler, + StoreFactory storeFactory, HandshakeData handshakeData, Map saveData, ClientsBox clientsBox, Transport transport, CancelableScheduler disconnectScheduler, Configuration configuration) { this.sessionId = sessionId; this.ackManager = ackManager; @@ -81,7 +81,9 @@ public ClientHead(UUID sessionId, AckManager ackManager, DisconnectableHub disco this.currentTransport = transport; this.disconnectScheduler = disconnectScheduler; this.configuration = configuration; - + for(Map.Entry entry : saveData.entrySet()) { + this.store.set(entry.getKey(), entry.getValue()); + } channels.put(Transport.POLLING, new TransportState()); channels.put(Transport.WEBSOCKET, new TransportState()); } diff --git a/src/main/java/com/corundumstudio/socketio/handler/SuccessAuthorizationListener.java b/src/main/java/com/corundumstudio/socketio/handler/SuccessAuthorizationListener.java index dfded95ce..7dc5444da 100644 --- a/src/main/java/com/corundumstudio/socketio/handler/SuccessAuthorizationListener.java +++ b/src/main/java/com/corundumstudio/socketio/handler/SuccessAuthorizationListener.java @@ -18,11 +18,12 @@ import com.corundumstudio.socketio.AuthorizationListener; import com.corundumstudio.socketio.HandshakeData; +import java.util.Map; + public class SuccessAuthorizationListener implements AuthorizationListener { @Override - public boolean isAuthorized(HandshakeData data) { + public boolean isAuthorized(HandshakeData data, Map saveData) { return true; } - }