From 469ace48b5a2fb98ab6d6e24a3856c95db04fd3f Mon Sep 17 00:00:00 2001 From: ronnie ren Date: Wed, 28 Dec 2022 18:34:46 +0800 Subject: [PATCH 1/4] support public asset path for capacitor engine --- src/ios/SM_AFNetworking/SM_AFSecurityPolicy.m | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/ios/SM_AFNetworking/SM_AFSecurityPolicy.m b/src/ios/SM_AFNetworking/SM_AFSecurityPolicy.m index c15efb9..9f11d64 100644 --- a/src/ios/SM_AFNetworking/SM_AFSecurityPolicy.m +++ b/src/ios/SM_AFNetworking/SM_AFSecurityPolicy.m @@ -156,7 +156,15 @@ static NSArray * AFPublicKeyTrustChainForServerTrust(SecTrustRef serverTrust) { @implementation SM_AFSecurityPolicy + (NSSet *)certificatesInBundle:(NSBundle *)bundle { - NSArray *paths = [bundle pathsForResourcesOfType:@"cer" inDirectory:@"www/certificates"]; + NSArray* paths = @[]; + for(NSString* dir in @[@"www", @"public"]) { + NSArray* certificatePaths = [bundle pathsForResourcesOfType:@"cer" inDirectory: [NSString stringWithFormat:@"%@/certificates", dir]]; + if(certificatePaths.count > 0) { + paths = certificatePaths; + break; + } + } + NSMutableSet *certificates = [NSMutableSet setWithCapacity:[paths count]]; for (NSString *path in paths) { From 0c26ada84724e59625b173d2c74ee26bc4566f57 Mon Sep 17 00:00:00 2001 From: uf200387 Date: Sun, 5 Mar 2023 00:13:06 +0800 Subject: [PATCH 2/4] use the correct asset dir based on we are running on capacitor or cordova --- .../com/silkimen/cordovahttp/CordovaServerTrust.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/android/com/silkimen/cordovahttp/CordovaServerTrust.java b/src/android/com/silkimen/cordovahttp/CordovaServerTrust.java index 822079e..5e97364 100644 --- a/src/android/com/silkimen/cordovahttp/CordovaServerTrust.java +++ b/src/android/com/silkimen/cordovahttp/CordovaServerTrust.java @@ -71,7 +71,7 @@ class CordovaServerTrust implements Runnable { this.tlsConfiguration.setTrustManagers(this.noOpTrustManagers); } else if ("pinned".equals(this.mode)) { this.tlsConfiguration.setHostnameVerifier(null); - this.tlsConfiguration.setTrustManagers(this.getTrustManagers(this.getCertsFromBundle("www/certificates"))); + this.tlsConfiguration.setTrustManagers(this.getTrustManagers(this.getCertsFromBundle(getWebAssetDir() + "/certificates"))); } else { this.tlsConfiguration.setHostnameVerifier(null); this.tlsConfiguration.setTrustManagers(this.getTrustManagers(this.getCertsFromKeyStore("AndroidCAStore"))); @@ -84,6 +84,14 @@ class CordovaServerTrust implements Runnable { } } + private String getWebAssetDir() { + return isRunningOnCapacitor()? "public" : "www"; + } + + private boolean isRunningOnCapacitor() { + return this.activity.getClass().getSuperclass().getName().contains("com.getcapacitor"); + } + private TrustManager[] getTrustManagers(KeyStore store) throws GeneralSecurityException { String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm(); TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm); From f6adf1e920d369e4bedb241dffdd6c450649fbb3 Mon Sep 17 00:00:00 2001 From: uf200387 Date: Sun, 5 Mar 2023 00:37:17 +0800 Subject: [PATCH 3/4] use correct asset name for ios platform if we are running capacitor --- src/ios/SM_AFNetworking/SM_AFSecurityPolicy.m | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/ios/SM_AFNetworking/SM_AFSecurityPolicy.m b/src/ios/SM_AFNetworking/SM_AFSecurityPolicy.m index 9f11d64..33872fc 100644 --- a/src/ios/SM_AFNetworking/SM_AFSecurityPolicy.m +++ b/src/ios/SM_AFNetworking/SM_AFSecurityPolicy.m @@ -156,15 +156,14 @@ static NSArray * AFPublicKeyTrustChainForServerTrust(SecTrustRef serverTrust) { @implementation SM_AFSecurityPolicy + (NSSet *)certificatesInBundle:(NSBundle *)bundle { - NSArray* paths = @[]; - for(NSString* dir in @[@"www", @"public"]) { - NSArray* certificatePaths = [bundle pathsForResourcesOfType:@"cer" inDirectory: [NSString stringWithFormat:@"%@/certificates", dir]]; - if(certificatePaths.count > 0) { - paths = certificatePaths; - break; - } + NSString* assetDir = @"www"; + Class capacitorPluginClass = NSClassFromString(@"CAPPlugin"); + if(capacitorPluginClass != nil) { + // we are running on capacitor and its assets dir is 'public' + assetDir = @"public"; } + NSArray *paths = [bundle pathsForResourcesOfType:@"cer" inDirectory: [NSString stringWithFormat:@"%@/certificates", assetDir]]; NSMutableSet *certificates = [NSMutableSet setWithCapacity:[paths count]]; for (NSString *path in paths) { @@ -179,7 +178,7 @@ static NSArray * AFPublicKeyTrustChainForServerTrust(SecTrustRef serverTrust) { static NSSet *_defaultPinnedCertificates = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - NSBundle *bundle = [NSBundle bundleForClass:[self class]]; + NSBundle *bundle = [NSBundle mainBundle]; _defaultPinnedCertificates = [self certificatesInBundle:bundle]; }); From 8acefd2791dc61d6c519200f8c12c18af95ae0c8 Mon Sep 17 00:00:00 2001 From: uf200387 Date: Sun, 5 Mar 2023 00:50:42 +0800 Subject: [PATCH 4/4] for capacitor, we need to find the certificates from main bundle --- src/ios/SM_AFNetworking/SM_AFSecurityPolicy.m | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/ios/SM_AFNetworking/SM_AFSecurityPolicy.m b/src/ios/SM_AFNetworking/SM_AFSecurityPolicy.m index 33872fc..7319e40 100644 --- a/src/ios/SM_AFNetworking/SM_AFSecurityPolicy.m +++ b/src/ios/SM_AFNetworking/SM_AFSecurityPolicy.m @@ -155,10 +155,13 @@ static NSArray * AFPublicKeyTrustChainForServerTrust(SecTrustRef serverTrust) { @implementation SM_AFSecurityPolicy ++(BOOL) isRunningOnCapacitor { + return NSClassFromString(@"CAPPlugin") != nil; +} + + (NSSet *)certificatesInBundle:(NSBundle *)bundle { NSString* assetDir = @"www"; - Class capacitorPluginClass = NSClassFromString(@"CAPPlugin"); - if(capacitorPluginClass != nil) { + if([self isRunningOnCapacitor]) { // we are running on capacitor and its assets dir is 'public' assetDir = @"public"; } @@ -178,7 +181,7 @@ static NSArray * AFPublicKeyTrustChainForServerTrust(SecTrustRef serverTrust) { static NSSet *_defaultPinnedCertificates = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - NSBundle *bundle = [NSBundle mainBundle]; + NSBundle *bundle = [self isRunningOnCapacitor] ? [NSBundle mainBundle] : [NSBundle bundleForClass:[self class]]; _defaultPinnedCertificates = [self certificatesInBundle:bundle]; });