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

Commit

Permalink
Fix getCookie and removeCookie API #230 #249
Browse files Browse the repository at this point in the history
  • Loading branch information
wkh237 committed Feb 5, 2017
1 parent bec79ef commit 80c23f2
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 31 deletions.
7 changes: 4 additions & 3 deletions src/android/src/main/java/com/RNFetchBlob/RNFetchBlob.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.WritableArray;
import com.facebook.react.bridge.WritableMap;

import java.util.Map;
import java.util.concurrent.LinkedBlockingQueue;
Expand Down Expand Up @@ -230,11 +231,11 @@ public void run() {
@ReactMethod
/**
* Get cookies belongs specific host.
* @param host String host name.
* @param host String domain name.
*/
public void getCookies(String host, Promise promise) {
public void getCookies(String domain, Promise promise) {
try {
WritableArray cookies = RNFBCookieJar.getCookies(host);
WritableMap cookies = RNFBCookieJar.getCookies(domain);
promise.resolve(cookies);
} catch(Exception err) {
promise.reject("RNFetchBlob.getCookies", err.getMessage());
Expand Down
35 changes: 20 additions & 15 deletions src/android/src/main/java/com/RNFetchBlob/Utils/RNFBCookieJar.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;

import okhttp3.Cookie;
import okhttp3.CookieJar;
Expand Down Expand Up @@ -36,26 +37,30 @@ public List<Cookie> loadForRequest(HttpUrl url) {
}

public static void removeCookies(String domain) {
if(domain == null) {
cookieStore.clear();
if(domain != null && domain.length() > 0) {
if(cookieStore.containsKey(domain))
cookieStore.remove(domain);
}
else if(cookieStore.containsKey(domain))
cookieStore.remove(domain);
else
cookieStore.clear();
}

public static WritableArray getCookies(String host) {
HttpUrl url = HttpUrl.parse(host);
List<Cookie> cookies = null;
if(url != null) {
cookies = cookieStore.get(url.host());
public static WritableMap getCookies(String host) {
Set<String> domains = cookieStore.keySet();
WritableMap cookieMap = Arguments.createMap();
if(host.length() > 0 && cookieStore.containsKey(host)) {
domains.clear();
domains.add(host);
}
WritableArray cookieList = Arguments.createArray();
if(cookies != null) {
for(Cookie c : cookies){
cookieList.pushString(c.toString());
// no domain specified, return all cookies
for(String key : domains) {
WritableArray cookiesInDomain = Arguments.createArray();
for(Cookie c: cookieStore.get(key)){
cookiesInDomain.pushString(c.toString());
}
return cookieList;
cookieMap.putArray(key, cookiesInDomain);
}
return null;

return cookieMap;
}
}
2 changes: 1 addition & 1 deletion src/ios/RNFetchBlobNetwork.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ typedef void(^DataTaskCompletionHander) (NSData * _Nullable resp, NSURLResponse
+ (void) removeCookies:(NSString *) domain error:(NSError **)error;
+ (void) enableProgressReport:(NSString *) taskId config:(RNFetchBlobProgress *)config;
+ (void) enableUploadProgress:(NSString *) taskId config:(RNFetchBlobProgress *)config;
+ (NSArray *) getCookies:(NSString *) url;
+ (NSDictionary *) getCookies:(NSString *) url;



Expand Down
23 changes: 15 additions & 8 deletions src/ios/RNFetchBlobNetwork.m
Original file line number Diff line number Diff line change
Expand Up @@ -579,20 +579,27 @@ - (void) URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didSen

# pragma mark - cookies handling API

+ (NSArray *) getCookies:(NSString *) domain
+ (NSDictionary *) getCookies:(NSString *) domain
{
NSMutableArray * cookies = [NSMutableArray new];
NSMutableDictionary * result = [NSMutableDictionary new];
NSHTTPCookieStorage * cookieStore = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for(NSHTTPCookie * cookie in cookieStore)
for(NSHTTPCookie * cookie in [cookieStore cookies])
{
if([[cookie domain] isEqualToString:domain])
NSString * cDomain = [cookie domain];
if([result objectForKey:cDomain] == nil)
{
[result setObject:[NSMutableArray new] forKey:cDomain];
}
if([cDomain isEqualToString:domain] || [domain length] == 0)
{
NSMutableString * cookieStr = [[NSMutableString alloc] init];
cookieStr = [[self class] getCookieString:cookie];
[cookies addObject:cookieStr];
NSMutableArray * ary = [result objectForKey:cDomain];
[ary addObject:cookieStr];
[result setObject:ary forKey:cDomain];
}
}
return cookies;
return result;
}

// remove cookies for given domain, if domain is empty remove all cookies in shared cookie storage.
Expand All @@ -601,9 +608,9 @@ + (void) removeCookies:(NSString *) domain error:(NSError **)error
@try
{
NSHTTPCookieStorage * cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for(NSHTTPCookie * cookie in cookies)
for(NSHTTPCookie * cookie in [cookies cookies])
{
BOOL shouldRemove = domain == nil || [[cookie domain] isEqualToString:domain];
BOOL shouldRemove = domain == nil || [domain length] < 1 || [[cookie domain] isEqualToString:domain];
if(shouldRemove)
{
[cookies deleteCookie:cookie];
Expand Down
8 changes: 4 additions & 4 deletions src/net.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ const RNFetchBlob = NativeModules.RNFetchBlob

/**
* Get cookie according to the given url.
* @param {string} url HTTP URL string.
* @param {string} domain Domain of the cookies to be removed, remove all
* @return {Promise<Array<String>>} Cookies of a specific domain.
*/
function getCookies(url:string):Promise<Array<String>> {
return RNFetchBlob.getCookies(url)
function getCookies(domain:string):Promise<Array<String>> {
return RNFetchBlob.getCookies(domain || '')
}

/**
Expand All @@ -27,7 +27,7 @@ function getCookies(url:string):Promise<Array<String>> {
* @return {Promise<null>}
*/
function removeCookies(domain:?string):Promise<null> {
return RNFetchBlob.removeCookies(url || null)
return RNFetchBlob.removeCookies(domain || '')
}

export default {
Expand Down

0 comments on commit 80c23f2

Please sign in to comment.