From a4b663e19adc0ac8f6fe64e837cba1691d8a1c66 Mon Sep 17 00:00:00 2001 From: Seraj Ahmad Date: Wed, 17 May 2017 17:40:48 -0700 Subject: [PATCH 1/2] Added Cookie Header to XML and Websocket request --- Libraries/Network/RCTHTTPRequestHandler.mm | 3 +++ Libraries/Network/RCTNetworking.mm | 16 +++++++++++++++- Libraries/WebSocket/RCTWebSocketModule.m | 13 +++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/Libraries/Network/RCTHTTPRequestHandler.mm b/Libraries/Network/RCTHTTPRequestHandler.mm index 1b06eab35167d2..814b647c25cf89 100644 --- a/Libraries/Network/RCTHTTPRequestHandler.mm +++ b/Libraries/Network/RCTHTTPRequestHandler.mm @@ -63,6 +63,9 @@ - (NSURLSessionDataTask *)sendRequest:(NSURLRequest *)request callbackQueue.maxConcurrentOperationCount = 1; callbackQueue.underlyingQueue = [[_bridge networking] methodQueue]; NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; + [ configuration setHTTPShouldSetCookies:YES]; + [ configuration setHTTPCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; + [ configuration setHTTPCookieStorage:[NSHTTPCookieStorage sharedHTTPCookieStorage]]; _session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:callbackQueue]; diff --git a/Libraries/Network/RCTNetworking.mm b/Libraries/Network/RCTNetworking.mm index 4a7f7ccd668743..c5a4c71679c9a6 100644 --- a/Libraries/Network/RCTNetworking.mm +++ b/Libraries/Network/RCTNetworking.mm @@ -228,7 +228,21 @@ - (RCTURLRequestCancellationBlock)buildRequest:(NSDictionary *)q NSURL *URL = [RCTConvert NSURL:query[@"url"]]; // this is marked as nullable in JS, but should not be null NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL]; request.HTTPMethod = [RCTConvert NSString:RCTNilIfNull(query[@"method"])].uppercaseString ?: @"GET"; - request.allHTTPHeaderFields = [self stripNullsInRequestHeaders:[RCTConvert NSDictionary:query[@"headers"]]]; + + // Load and set the cookie header. + NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:URL]; + request.allHTTPHeaderFields = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies]; + + + // set supplied headers + NSDictionary* headers = [RCTConvert NSDictionary:query[@"headers"]]; + [headers enumerateKeysAndObjectsUsingBlock:^(NSString *key, id value, BOOL *stop) { + //request.allHTTPHeaderFields = [self stripNullsInRequestHeaders:[RCTConvert NSDictionary:query[@"headers"]]]; + if(value) { + [request addValue:[RCTConvert NSString:value] forHTTPHeaderField:key]; + } + }]; + request.timeoutInterval = [RCTConvert NSTimeInterval:query[@"timeout"]]; request.HTTPShouldHandleCookies = [RCTConvert BOOL:query[@"withCredentials"]]; NSDictionary *data = [RCTConvert NSDictionary:RCTNilIfNull(query[@"data"])]; diff --git a/Libraries/WebSocket/RCTWebSocketModule.m b/Libraries/WebSocket/RCTWebSocketModule.m index b345bea89f2c5f..523bea918cee6b 100644 --- a/Libraries/WebSocket/RCTWebSocketModule.m +++ b/Libraries/WebSocket/RCTWebSocketModule.m @@ -60,6 +60,19 @@ - (void)dealloc RCT_EXPORT_METHOD(connect:(NSURL *)URL protocols:(NSArray *)protocols headers:(NSDictionary *)headers socketID:(nonnull NSNumber *)socketID) { NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL]; + + // We load cookies from sharedHTTPCookieStorage (shared with XHR and + // fetch). To get secure cookies for wss URLs, replace wss with https + // in the URL. + NSURLComponents *components = [NSURLComponents componentsWithURL:URL resolvingAgainstBaseURL:true]; + if ([[components.scheme lowercaseString] isEqualToString:@"wss"]) { + components.scheme = @"https"; + } + // Load and set the cookie header. + NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:components.URL]; + request.allHTTPHeaderFields = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies]; + + // Load supplied headers [headers enumerateKeysAndObjectsUsingBlock:^(NSString *key, id value, BOOL *stop) { [request addValue:[RCTConvert NSString:value] forHTTPHeaderField:key]; }]; From f80ad958ae5595741770973245b1067b5951fa29 Mon Sep 17 00:00:00 2001 From: Seraj Ahmad Date: Thu, 18 May 2017 18:37:43 -0700 Subject: [PATCH 2/2] lint error fixes --- Libraries/Network/RCTHTTPRequestHandler.mm | 6 +++--- Libraries/Network/RCTNetworking.mm | 8 +++----- Libraries/WebSocket/RCTWebSocketModule.m | 3 ++- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/Libraries/Network/RCTHTTPRequestHandler.mm b/Libraries/Network/RCTHTTPRequestHandler.mm index 814b647c25cf89..1a6858820a20c1 100644 --- a/Libraries/Network/RCTHTTPRequestHandler.mm +++ b/Libraries/Network/RCTHTTPRequestHandler.mm @@ -63,9 +63,9 @@ - (NSURLSessionDataTask *)sendRequest:(NSURLRequest *)request callbackQueue.maxConcurrentOperationCount = 1; callbackQueue.underlyingQueue = [[_bridge networking] methodQueue]; NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; - [ configuration setHTTPShouldSetCookies:YES]; - [ configuration setHTTPCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; - [ configuration setHTTPCookieStorage:[NSHTTPCookieStorage sharedHTTPCookieStorage]]; + [configuration setHTTPShouldSetCookies:YES]; + [configuration setHTTPCookieAcceptPolicy:NSHTTPCookieAcceptPolicyAlways]; + [configuration setHTTPCookieStorage:[NSHTTPCookieStorage sharedHTTPCookieStorage]]; _session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:callbackQueue]; diff --git a/Libraries/Network/RCTNetworking.mm b/Libraries/Network/RCTNetworking.mm index c5a4c71679c9a6..248dfce227c3d1 100644 --- a/Libraries/Network/RCTNetworking.mm +++ b/Libraries/Network/RCTNetworking.mm @@ -233,12 +233,10 @@ - (RCTURLRequestCancellationBlock)buildRequest:(NSDictionary *)q NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:URL]; request.allHTTPHeaderFields = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies]; - - // set supplied headers - NSDictionary* headers = [RCTConvert NSDictionary:query[@"headers"]]; + // Set supplied headers. + NSDictionary *headers = [RCTConvert NSDictionary:query[@"headers"]]; [headers enumerateKeysAndObjectsUsingBlock:^(NSString *key, id value, BOOL *stop) { - //request.allHTTPHeaderFields = [self stripNullsInRequestHeaders:[RCTConvert NSDictionary:query[@"headers"]]]; - if(value) { + if (value) { [request addValue:[RCTConvert NSString:value] forHTTPHeaderField:key]; } }]; diff --git a/Libraries/WebSocket/RCTWebSocketModule.m b/Libraries/WebSocket/RCTWebSocketModule.m index 523bea918cee6b..5a420b70e6f6f1 100644 --- a/Libraries/WebSocket/RCTWebSocketModule.m +++ b/Libraries/WebSocket/RCTWebSocketModule.m @@ -65,9 +65,10 @@ - (void)dealloc // fetch). To get secure cookies for wss URLs, replace wss with https // in the URL. NSURLComponents *components = [NSURLComponents componentsWithURL:URL resolvingAgainstBaseURL:true]; - if ([[components.scheme lowercaseString] isEqualToString:@"wss"]) { + if ([components.scheme.lowercaseString isEqualToString:@"wss"]) { components.scheme = @"https"; } + // Load and set the cookie header. NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:components.URL]; request.allHTTPHeaderFields = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies];