Преглед на файлове

Fix getCookie and removeCookie API #230 #249

Ben Hsieh преди 8 години
родител
ревизия
80c23f2dc6

+ 4
- 3
src/android/src/main/java/com/RNFetchBlob/RNFetchBlob.java Целия файл

@@ -13,6 +13,7 @@ import com.facebook.react.bridge.ReactMethod;
13 13
 import com.facebook.react.bridge.ReadableArray;
14 14
 import com.facebook.react.bridge.ReadableMap;
15 15
 import com.facebook.react.bridge.WritableArray;
16
+import com.facebook.react.bridge.WritableMap;
16 17
 
17 18
 import java.util.Map;
18 19
 import java.util.concurrent.LinkedBlockingQueue;
@@ -230,11 +231,11 @@ public class RNFetchBlob extends ReactContextBaseJavaModule {
230 231
     @ReactMethod
231 232
     /**
232 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 237
         try {
237
-            WritableArray cookies = RNFBCookieJar.getCookies(host);
238
+            WritableMap cookies = RNFBCookieJar.getCookies(domain);
238 239
             promise.resolve(cookies);
239 240
         } catch(Exception err) {
240 241
             promise.reject("RNFetchBlob.getCookies", err.getMessage());

+ 20
- 15
src/android/src/main/java/com/RNFetchBlob/Utils/RNFBCookieJar.java Целия файл

@@ -8,6 +8,7 @@ import com.facebook.react.bridge.WritableMap;
8 8
 import java.util.ArrayList;
9 9
 import java.util.HashMap;
10 10
 import java.util.List;
11
+import java.util.Set;
11 12
 
12 13
 import okhttp3.Cookie;
13 14
 import okhttp3.CookieJar;
@@ -36,26 +37,30 @@ public class RNFBCookieJar implements CookieJar {
36 37
     }
37 38
 
38 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 Целия файл

@@ -52,7 +52,7 @@ typedef void(^DataTaskCompletionHander) (NSData * _Nullable resp, NSURLResponse
52 52
 + (void) removeCookies:(NSString *) domain error:(NSError **)error;
53 53
 + (void) enableProgressReport:(NSString *) taskId config:(RNFetchBlobProgress *)config;
54 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 Целия файл

@@ -579,20 +579,27 @@ NSOperationQueue *taskQueue;
579 579
 
580 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 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 595
             NSMutableString * cookieStr = [[NSMutableString alloc] init];
591 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 605
 // remove cookies for given domain, if domain is empty remove all cookies in shared cookie storage.
@@ -601,9 +608,9 @@ NSOperationQueue *taskQueue;
601 608
     @try
602 609
     {
603 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 614
             if(shouldRemove)
608 615
             {
609 616
                 [cookies deleteCookie:cookie];

+ 4
- 4
src/net.js Целия файл

@@ -13,11 +13,11 @@ const RNFetchBlob = NativeModules.RNFetchBlob
13 13
 
14 14
 /**
15 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 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,7 +27,7 @@ function getCookies(url:string):Promise<Array<String>> {
27 27
  * @return {Promise<null>}
28 28
  */
29 29
 function removeCookies(domain:?string):Promise<null> {
30
-  return RNFetchBlob.removeCookies(url || null)
30
+  return RNFetchBlob.removeCookies(domain || '')
31 31
 }
32 32
 
33 33
 export default {