diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/BUCK b/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/BUCK index 6289e05986f1c3..87c26ff736fa7a 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/BUCK +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/BUCK @@ -7,6 +7,7 @@ android_library( react_native_target('java/com/facebook/react/bridge:bridge'), react_native_target('java/com/facebook/react/common:common'), react_native_target('java/com/facebook/react/modules/core:core'), + react_native_target('java/com/facebook/react/modules/network:network'), react_native_dep('libraries/fbcore/src/main/java/com/facebook/common/logging:logging'), react_native_dep('third-party/java/infer-annotations:infer-annotations'), react_native_dep('third-party/java/jsr-305:jsr-305'), diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/WebSocketModule.java b/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/WebSocketModule.java index 1d9d1dda124e80..3f9e76286e176d 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/WebSocketModule.java +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/WebSocketModule.java @@ -26,6 +26,7 @@ import com.facebook.react.bridge.WritableMap; import com.facebook.react.common.ReactConstants; import com.facebook.react.modules.core.DeviceEventManagerModule; +import com.facebook.react.modules.network.ForwardingCookieHandler; import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; @@ -37,6 +38,7 @@ import java.net.URISyntaxException; import java.net.URI; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -47,10 +49,12 @@ public class WebSocketModule extends ReactContextBaseJavaModule { private Map mWebSocketConnections = new HashMap<>(); private ReactContext mReactContext; + private ForwardingCookieHandler cookieHandler; public WebSocketModule(ReactApplicationContext context) { super(context); mReactContext = context; + cookieHandler = new ForwardingCookieHandler(context); } private void sendEvent(String eventName, WritableMap params) { @@ -78,6 +82,11 @@ public void connect(final String url, @Nullable final ReadableArray protocols, @ .tag(id) .url(url); + String cookie = getCookie(url); + if (cookie != null) { + builder.addHeader("Cookie", getCookie(url)); + } + if (headers != null) { ReadableMapKeySetIterator iterator = headers.keySetIterator(); @@ -234,4 +243,25 @@ private static String setDefaultOrigin(String uri) { } } + /** + * Get cookie if exists + * + * @param websocket uri + * @return A cookie / null + */ + + private String getCookie(String uri){ + try { + Map> cookieMap = cookieHandler.get(new URI(setDefaultOrigin(uri)), new HashMap()); + List cookieList = cookieMap.get("Cookie"); + if (cookieList != null) { + return cookieList.get(0); + } else { + return null; + } + } catch(URISyntaxException | IOException e) { + throw new IllegalArgumentException("Unable to get cookie from the " + uri); + } + } + }