28
28
import com .facebook .react .bridge .WritableMap ;
29
29
import com .facebook .react .common .ReactConstants ;
30
30
import com .facebook .react .modules .core .DeviceEventManagerModule ;
31
+ import com .facebook .react .modules .network .ForwardingCookieHandler ;
31
32
32
33
import com .squareup .okhttp .OkHttpClient ;
33
34
import com .squareup .okhttp .Request ;
39
40
import java .net .URISyntaxException ;
40
41
import java .net .URI ;
41
42
import java .util .HashMap ;
43
+ import java .util .List ;
42
44
import java .util .Map ;
43
45
import java .util .concurrent .TimeUnit ;
44
46
@@ -50,10 +52,12 @@ public class WebSocketModule extends ReactContextBaseJavaModule {
50
52
51
53
private Map <Integer , WebSocket > mWebSocketConnections = new HashMap <>();
52
54
private ReactContext mReactContext ;
55
+ private ForwardingCookieHandler cookieHandler ;
53
56
54
57
public WebSocketModule (ReactApplicationContext context ) {
55
58
super (context );
56
59
mReactContext = context ;
60
+ cookieHandler = new ForwardingCookieHandler (context );
57
61
}
58
62
59
63
private void sendEvent (String eventName , WritableMap params ) {
@@ -80,6 +84,11 @@ public void connect(final String url, @Nullable final ReadableArray protocols, @
80
84
.tag (id )
81
85
.url (url );
82
86
87
+ String cookie = getCookie (url );
88
+ if (cookie != null ) {
89
+ builder .addHeader ("Cookie" , getCookie (url ));
90
+ }
91
+
83
92
if (headers != null ) {
84
93
ReadableMapKeySetIterator iterator = headers .keySetIterator ();
85
94
@@ -272,4 +281,25 @@ private static String setDefaultOrigin(String uri) {
272
281
}
273
282
}
274
283
284
+ /**
285
+ * Get cookie if exists
286
+ *
287
+ * @param websocket uri
288
+ * @return A cookie / null
289
+ */
290
+
291
+ private String getCookie (String uri ){
292
+ try {
293
+ Map <String , List <String >> cookieMap = cookieHandler .get (new URI (setDefaultOrigin (uri )), new HashMap ());
294
+ List <String > cookieList = cookieMap .get ("Cookie" );
295
+ if (cookieList != null ) {
296
+ return cookieList .get (0 );
297
+ } else {
298
+ return null ;
299
+ }
300
+ } catch (URISyntaxException | IOException e ) {
301
+ throw new IllegalArgumentException ("Unable to get cookie from the " + uri );
302
+ }
303
+ }
304
+
275
305
}
0 commit comments