Skip to content
This repository was archived by the owner on Mar 16, 2019. It is now read-only.

Commit 80c23f2

Browse files
committed
Fix getCookie and removeCookie API #230 #249
1 parent bec79ef commit 80c23f2

File tree

5 files changed

+44
-31
lines changed

5 files changed

+44
-31
lines changed

src/android/src/main/java/com/RNFetchBlob/RNFetchBlob.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.facebook.react.bridge.ReadableArray;
1414
import com.facebook.react.bridge.ReadableMap;
1515
import com.facebook.react.bridge.WritableArray;
16+
import com.facebook.react.bridge.WritableMap;
1617

1718
import java.util.Map;
1819
import java.util.concurrent.LinkedBlockingQueue;
@@ -230,11 +231,11 @@ public void run() {
230231
@ReactMethod
231232
/**
232233
* Get cookies belongs specific host.
233-
* @param host String host name.
234+
* @param host String domain name.
234235
*/
235-
public void getCookies(String host, Promise promise) {
236+
public void getCookies(String domain, Promise promise) {
236237
try {
237-
WritableArray cookies = RNFBCookieJar.getCookies(host);
238+
WritableMap cookies = RNFBCookieJar.getCookies(domain);
238239
promise.resolve(cookies);
239240
} catch(Exception err) {
240241
promise.reject("RNFetchBlob.getCookies", err.getMessage());

src/android/src/main/java/com/RNFetchBlob/Utils/RNFBCookieJar.java

+20-15
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.util.ArrayList;
99
import java.util.HashMap;
1010
import java.util.List;
11+
import java.util.Set;
1112

1213
import okhttp3.Cookie;
1314
import okhttp3.CookieJar;
@@ -36,26 +37,30 @@ public List<Cookie> loadForRequest(HttpUrl url) {
3637
}
3738

3839
public static void removeCookies(String domain) {
39-
if(domain == null) {
40-
cookieStore.clear();
40+
if(domain != null && domain.length() > 0) {
41+
if(cookieStore.containsKey(domain))
42+
cookieStore.remove(domain);
4143
}
42-
else if(cookieStore.containsKey(domain))
43-
cookieStore.remove(domain);
44+
else
45+
cookieStore.clear();
4446
}
4547

46-
public static WritableArray getCookies(String host) {
47-
HttpUrl url = HttpUrl.parse(host);
48-
List<Cookie> cookies = null;
49-
if(url != null) {
50-
cookies = cookieStore.get(url.host());
48+
public static WritableMap getCookies(String host) {
49+
Set<String> domains = cookieStore.keySet();
50+
WritableMap cookieMap = Arguments.createMap();
51+
if(host.length() > 0 && cookieStore.containsKey(host)) {
52+
domains.clear();
53+
domains.add(host);
5154
}
52-
WritableArray cookieList = Arguments.createArray();
53-
if(cookies != null) {
54-
for(Cookie c : cookies){
55-
cookieList.pushString(c.toString());
55+
// no domain specified, return all cookies
56+
for(String key : domains) {
57+
WritableArray cookiesInDomain = Arguments.createArray();
58+
for(Cookie c: cookieStore.get(key)){
59+
cookiesInDomain.pushString(c.toString());
5660
}
57-
return cookieList;
61+
cookieMap.putArray(key, cookiesInDomain);
5862
}
59-
return null;
63+
64+
return cookieMap;
6065
}
6166
}

src/ios/RNFetchBlobNetwork.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ typedef void(^DataTaskCompletionHander) (NSData * _Nullable resp, NSURLResponse
5252
+ (void) removeCookies:(NSString *) domain error:(NSError **)error;
5353
+ (void) enableProgressReport:(NSString *) taskId config:(RNFetchBlobProgress *)config;
5454
+ (void) enableUploadProgress:(NSString *) taskId config:(RNFetchBlobProgress *)config;
55-
+ (NSArray *) getCookies:(NSString *) url;
55+
+ (NSDictionary *) getCookies:(NSString *) url;
5656

5757

5858

src/ios/RNFetchBlobNetwork.m

+15-8
Original file line numberDiff line numberDiff line change
@@ -579,20 +579,27 @@ - (void) URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didSen
579579

580580
# pragma mark - cookies handling API
581581

582-
+ (NSArray *) getCookies:(NSString *) domain
582+
+ (NSDictionary *) getCookies:(NSString *) domain
583583
{
584-
NSMutableArray * cookies = [NSMutableArray new];
584+
NSMutableDictionary * result = [NSMutableDictionary new];
585585
NSHTTPCookieStorage * cookieStore = [NSHTTPCookieStorage sharedHTTPCookieStorage];
586-
for(NSHTTPCookie * cookie in cookieStore)
586+
for(NSHTTPCookie * cookie in [cookieStore cookies])
587587
{
588-
if([[cookie domain] isEqualToString:domain])
588+
NSString * cDomain = [cookie domain];
589+
if([result objectForKey:cDomain] == nil)
590+
{
591+
[result setObject:[NSMutableArray new] forKey:cDomain];
592+
}
593+
if([cDomain isEqualToString:domain] || [domain length] == 0)
589594
{
590595
NSMutableString * cookieStr = [[NSMutableString alloc] init];
591596
cookieStr = [[self class] getCookieString:cookie];
592-
[cookies addObject:cookieStr];
597+
NSMutableArray * ary = [result objectForKey:cDomain];
598+
[ary addObject:cookieStr];
599+
[result setObject:ary forKey:cDomain];
593600
}
594601
}
595-
return cookies;
602+
return result;
596603
}
597604

598605
// remove cookies for given domain, if domain is empty remove all cookies in shared cookie storage.
@@ -601,9 +608,9 @@ + (void) removeCookies:(NSString *) domain error:(NSError **)error
601608
@try
602609
{
603610
NSHTTPCookieStorage * cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
604-
for(NSHTTPCookie * cookie in cookies)
611+
for(NSHTTPCookie * cookie in [cookies cookies])
605612
{
606-
BOOL shouldRemove = domain == nil || [[cookie domain] isEqualToString:domain];
613+
BOOL shouldRemove = domain == nil || [domain length] < 1 || [[cookie domain] isEqualToString:domain];
607614
if(shouldRemove)
608615
{
609616
[cookies deleteCookie:cookie];

src/net.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ const RNFetchBlob = NativeModules.RNFetchBlob
1313

1414
/**
1515
* Get cookie according to the given url.
16-
* @param {string} url HTTP URL string.
16+
* @param {string} domain Domain of the cookies to be removed, remove all
1717
* @return {Promise<Array<String>>} Cookies of a specific domain.
1818
*/
19-
function getCookies(url:string):Promise<Array<String>> {
20-
return RNFetchBlob.getCookies(url)
19+
function getCookies(domain:string):Promise<Array<String>> {
20+
return RNFetchBlob.getCookies(domain || '')
2121
}
2222

2323
/**
@@ -27,7 +27,7 @@ function getCookies(url:string):Promise<Array<String>> {
2727
* @return {Promise<null>}
2828
*/
2929
function removeCookies(domain:?string):Promise<null> {
30-
return RNFetchBlob.removeCookies(url || null)
30+
return RNFetchBlob.removeCookies(domain || '')
3131
}
3232

3333
export default {

0 commit comments

Comments
 (0)