Browse Source

Fix getCookie and removeCookie API #230 #249

Ben Hsieh 8 years ago
parent
commit
80c23f2dc6

+ 4
- 3
src/android/src/main/java/com/RNFetchBlob/RNFetchBlob.java View File

13
 import com.facebook.react.bridge.ReadableArray;
13
 import com.facebook.react.bridge.ReadableArray;
14
 import com.facebook.react.bridge.ReadableMap;
14
 import com.facebook.react.bridge.ReadableMap;
15
 import com.facebook.react.bridge.WritableArray;
15
 import com.facebook.react.bridge.WritableArray;
16
+import com.facebook.react.bridge.WritableMap;
16
 
17
 
17
 import java.util.Map;
18
 import java.util.Map;
18
 import java.util.concurrent.LinkedBlockingQueue;
19
 import java.util.concurrent.LinkedBlockingQueue;
230
     @ReactMethod
231
     @ReactMethod
231
     /**
232
     /**
232
      * Get cookies belongs specific host.
233
      * Get cookies belongs specific host.
233
-     * @param host String host name.
234
+     * @param host String domain name.
234
      */
235
      */
235
-    public void getCookies(String host, Promise promise) {
236
+    public void getCookies(String domain, Promise promise) {
236
         try {
237
         try {
237
-            WritableArray cookies = RNFBCookieJar.getCookies(host);
238
+            WritableMap cookies = RNFBCookieJar.getCookies(domain);
238
             promise.resolve(cookies);
239
             promise.resolve(cookies);
239
         } catch(Exception err) {
240
         } catch(Exception err) {
240
             promise.reject("RNFetchBlob.getCookies", err.getMessage());
241
             promise.reject("RNFetchBlob.getCookies", err.getMessage());

+ 20
- 15
src/android/src/main/java/com/RNFetchBlob/Utils/RNFBCookieJar.java View File

8
 import java.util.ArrayList;
8
 import java.util.ArrayList;
9
 import java.util.HashMap;
9
 import java.util.HashMap;
10
 import java.util.List;
10
 import java.util.List;
11
+import java.util.Set;
11
 
12
 
12
 import okhttp3.Cookie;
13
 import okhttp3.Cookie;
13
 import okhttp3.CookieJar;
14
 import okhttp3.CookieJar;
36
     }
37
     }
37
 
38
 
38
     public static void removeCookies(String domain) {
39
     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);
41
         }
43
         }
42
-        else if(cookieStore.containsKey(domain))
43
-            cookieStore.remove(domain);
44
+        else
45
+            cookieStore.clear();
44
     }
46
     }
45
 
47
 
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);
51
         }
54
         }
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());
56
             }
60
             }
57
-            return cookieList;
61
+            cookieMap.putArray(key, cookiesInDomain);
58
         }
62
         }
59
-        return null;
63
+
64
+        return cookieMap;
60
     }
65
     }
61
 }
66
 }

+ 1
- 1
src/ios/RNFetchBlobNetwork.h View File

52
 + (void) removeCookies:(NSString *) domain error:(NSError **)error;
52
 + (void) removeCookies:(NSString *) domain error:(NSError **)error;
53
 + (void) enableProgressReport:(NSString *) taskId config:(RNFetchBlobProgress *)config;
53
 + (void) enableProgressReport:(NSString *) taskId config:(RNFetchBlobProgress *)config;
54
 + (void) enableUploadProgress:(NSString *) taskId config:(RNFetchBlobProgress *)config;
54
 + (void) enableUploadProgress:(NSString *) taskId config:(RNFetchBlobProgress *)config;
55
-+ (NSArray *) getCookies:(NSString *) url;
55
++ (NSDictionary *) getCookies:(NSString *) url;
56
 
56
 
57
 
57
 
58
 
58
 

+ 15
- 8
src/ios/RNFetchBlobNetwork.m View File

579
 
579
 
580
 # pragma mark - cookies handling API
580
 # pragma mark - cookies handling API
581
 
581
 
582
-+ (NSArray *) getCookies:(NSString *) domain
582
++ (NSDictionary *) getCookies:(NSString *) domain
583
 {
583
 {
584
-    NSMutableArray * cookies = [NSMutableArray new];
584
+    NSMutableDictionary * result = [NSMutableDictionary new];
585
     NSHTTPCookieStorage * cookieStore = [NSHTTPCookieStorage sharedHTTPCookieStorage];
585
     NSHTTPCookieStorage * cookieStore = [NSHTTPCookieStorage sharedHTTPCookieStorage];
586
-    for(NSHTTPCookie * cookie in cookieStore)
586
+    for(NSHTTPCookie * cookie in [cookieStore cookies])
587
     {
587
     {
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)
589
         {
594
         {
590
             NSMutableString * cookieStr = [[NSMutableString alloc] init];
595
             NSMutableString * cookieStr = [[NSMutableString alloc] init];
591
             cookieStr = [[self class] getCookieString:cookie];
596
             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];
593
         }
600
         }
594
     }
601
     }
595
-    return cookies;
602
+    return result;
596
 }
603
 }
597
 
604
 
598
 // remove cookies for given domain, if domain is empty remove all cookies in shared cookie storage.
605
 // remove cookies for given domain, if domain is empty remove all cookies in shared cookie storage.
601
     @try
608
     @try
602
     {
609
     {
603
         NSHTTPCookieStorage * cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
610
         NSHTTPCookieStorage * cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
604
-        for(NSHTTPCookie * cookie in cookies)
611
+        for(NSHTTPCookie * cookie in [cookies cookies])
605
         {
612
         {
606
-            BOOL shouldRemove = domain == nil || [[cookie domain] isEqualToString:domain];
613
+            BOOL shouldRemove = domain == nil || [domain length] < 1 || [[cookie domain] isEqualToString:domain];
607
             if(shouldRemove)
614
             if(shouldRemove)
608
             {
615
             {
609
                 [cookies deleteCookie:cookie];
616
                 [cookies deleteCookie:cookie];

+ 4
- 4
src/net.js View File

13
 
13
 
14
 /**
14
 /**
15
  * Get cookie according to the given url.
15
  * 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
17
  * @return {Promise<Array<String>>}     Cookies of a specific domain.
17
  * @return {Promise<Array<String>>}     Cookies of a specific domain.
18
  */
18
  */
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 || '')
21
 }
21
 }
22
 
22
 
23
 /**
23
 /**
27
  * @return {Promise<null>}
27
  * @return {Promise<null>}
28
  */
28
  */
29
 function removeCookies(domain:?string):Promise<null> {
29
 function removeCookies(domain:?string):Promise<null> {
30
-  return RNFetchBlob.removeCookies(url || null)
30
+  return RNFetchBlob.removeCookies(domain || '')
31
 }
31
 }
32
 
32
 
33
 export default {
33
 export default {