From 72fac8dda1379909fc71e6809b6f4474985532a6 Mon Sep 17 00:00:00 2001 From: Gaston Thea Date: Tue, 15 Oct 2024 17:03:10 -0300 Subject: [PATCH] iOS changes --- splitio/example/ios/Podfile.lock | 10 +++---- splitio_ios/example/ios/Podfile.lock | 10 +++---- .../SplitClientConfigHelperTests.swift | 21 +++++++++++++++ splitio_ios/example/pubspec.lock | 7 +++-- .../ios/Classes/SplitClientConfigHelper.swift | 27 ++++++++++++++++--- splitio_ios/ios/splitio_ios.podspec | 4 +-- 6 files changed, 59 insertions(+), 20 deletions(-) diff --git a/splitio/example/ios/Podfile.lock b/splitio/example/ios/Podfile.lock index 6d9b1ac..cea8fa6 100644 --- a/splitio/example/ios/Podfile.lock +++ b/splitio/example/ios/Podfile.lock @@ -1,9 +1,9 @@ PODS: - Flutter (1.0.0) - - Split (2.25.0) - - splitio_ios (0.5.0): + - Split (2.26.1) + - splitio_ios (0.6.0): - Flutter - - Split (~> 2.25.0) + - Split (~> 2.26.1) DEPENDENCIES: - Flutter (from `Flutter`) @@ -21,8 +21,8 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 - Split: 268875814285de6ab6cd25744e170b407651a080 - splitio_ios: f6af0613ceedf0c037673afe256479bb0f6fc6ec + Split: 15cab642eb8b8bb4f289a2190f7b26e655f99756 + splitio_ios: 931b5df7148d0dca9acb31a65505bd619f198fcf PODFILE CHECKSUM: 4e8f8b2be68aeea4c0d5beb6ff1e79fface1d048 diff --git a/splitio_ios/example/ios/Podfile.lock b/splitio_ios/example/ios/Podfile.lock index 522e427..2a8c261 100644 --- a/splitio_ios/example/ios/Podfile.lock +++ b/splitio_ios/example/ios/Podfile.lock @@ -1,9 +1,9 @@ PODS: - Flutter (1.0.0) - - Split (2.25.0) - - splitio_ios (0.5.0): + - Split (2.26.1) + - splitio_ios (0.6.0): - Flutter - - Split (~> 2.25.0) + - Split (~> 2.26.1) DEPENDENCIES: - Flutter (from `Flutter`) @@ -21,8 +21,8 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 - Split: 268875814285de6ab6cd25744e170b407651a080 - splitio_ios: f6af0613ceedf0c037673afe256479bb0f6fc6ec + Split: 15cab642eb8b8bb4f289a2190f7b26e655f99756 + splitio_ios: 931b5df7148d0dca9acb31a65505bd619f198fcf PODFILE CHECKSUM: aed42fc5c94ade572556b7ed357c5c57f1bd83a2 diff --git a/splitio_ios/example/ios/SplitTests/SplitClientConfigHelperTests.swift b/splitio_ios/example/ios/SplitTests/SplitClientConfigHelperTests.swift index 339e629..d07edd7 100644 --- a/splitio_ios/example/ios/SplitTests/SplitClientConfigHelperTests.swift +++ b/splitio_ios/example/ios/SplitTests/SplitClientConfigHelperTests.swift @@ -48,6 +48,7 @@ class SplitClientConfigHelperTests: XCTestCase { XCTAssertTrue(splitClientConfig.encryptionEnabled) XCTAssertEqual(.verbose, splitClientConfig.logLevel) XCTAssertEqual(10000, splitClientConfig.sdkReadyTimeOut) + XCTAssertNil(splitClientConfig.certificatePinningConfig) } func testEnableDebugLogLevelIsMappedCorrectly() { @@ -114,4 +115,24 @@ class SplitClientConfigHelperTests: XCTestCase { XCTAssertEqual(.bySet, splitClientConfig.sync.filters[0].type) XCTAssertEqual(["set_1", "set_2"], splitClientConfig.sync.filters[0].values) } + + func testCertificatePinningConfigurationValuesAreMappedCorrectly() { + let configValues = [ + "certificatePinningConfiguration": [ + "pins": [ + "host1": [ "sha256/pin1", "sha1/pin2" ], + "host2": [ "sha256/pin2" ] + ] + ] + ] + + let splitClientConfig: SplitClientConfig = SplitClientConfigHelper.fromMap(configurationMap: configValues, impressionListener: nil) + let actualConfig = splitClientConfig.certificatePinningConfig?.pins + + let containsPins = actualConfig?.contains { pin in + (pin.host == "host1" && pin.algo == KeyHashAlgo.sha256) && + (pin.host == "host1" && pin.algo == KeyHashAlgo.sha1) && + (pin.host == "host2" && pin.algo == KeyHashAlgo.sha256 ) + } + } } diff --git a/splitio_ios/example/pubspec.lock b/splitio_ios/example/pubspec.lock index 6f5b775..23342f6 100644 --- a/splitio_ios/example/pubspec.lock +++ b/splitio_ios/example/pubspec.lock @@ -170,10 +170,9 @@ packages: splitio_platform_interface: dependency: transitive description: - name: splitio_platform_interface - sha256: eb0ec278e782bb403856f0921d2023ed8ed1a9e97eafb0f3de5cc4a107d1e04f - url: "https://pub.dev" - source: hosted + path: "../../splitio_platform_interface" + relative: true + source: path version: "1.4.0" stack_trace: dependency: transitive diff --git a/splitio_ios/ios/Classes/SplitClientConfigHelper.swift b/splitio_ios/ios/Classes/SplitClientConfigHelper.swift index feaaa5d..025237b 100644 --- a/splitio_ios/ios/Classes/SplitClientConfigHelper.swift +++ b/splitio_ios/ios/Classes/SplitClientConfigHelper.swift @@ -31,6 +31,8 @@ class SplitClientConfigHelper { static private let ENCRYPTION_ENABLED = "encryptionEnabled" static private let LOG_LEVEL = "logLevel" static private let READY_TIMEOUT = "readyTimeout" + static private let CERTIFICATE_PINNING_CONFIGURATION = "certificatePinningConfiguration" + static private let CERTIFICATE_PINNING_CONFIGURATION_PINS = "pins"; static func fromMap(configurationMap: [String: Any?], impressionListener: SplitImpressionListener?) -> SplitClientConfig { let config = SplitClientConfig() @@ -143,6 +145,8 @@ class SplitClientConfigHelper { } } + config.serviceEndpoints = serviceEndpointsBuilder.build() + if let impressionListener = impressionListener { config.impressionListener = impressionListener } @@ -168,11 +172,11 @@ class SplitClientConfigHelper { config.sync = syncConfigBuilder.build() } } - + if let impressionsMode = configurationMap[IMPRESSIONS_MODE] as? String { config.impressionsMode = impressionsMode.uppercased() } - + if let syncEnabled = configurationMap[SYNC_ENABLED] as? Bool { config.syncEnabled = syncEnabled } @@ -213,14 +217,29 @@ class SplitClientConfigHelper { config.sdkReadyTimeOut = readyTimeout * 1000 // iOS SDK uses this parameter in millis } - config.serviceEndpoints = serviceEndpointsBuilder.build() + if let certPinningConfig = configurationMap[CERTIFICATE_PINNING_CONFIGURATION] as? [String: Any?] { + if let pins = certPinningConfig[CERTIFICATE_PINNING_CONFIGURATION_PINS] as? [String: [String]] { + let pinningConfigBuilder = CertificatePinningConfig.builder() + for (hostName, hostPins) in pins { + for hostPin in hostPins { + pinningConfigBuilder.addPin(host: hostName, keyHash: hostPin) + } + } + + do { + try config.certificatePinningConfig = pinningConfigBuilder.build() + } catch { + + } + } + } return config } static func impressionListenerEnabled(configurationMap: [String: Any?]) -> Bool { if configurationMap[IMPRESSION_LISTENER] != nil { - if let impressionListenerEnabled = configurationMap[IMPRESSION_LISTENER] as? Bool { + if configurationMap[IMPRESSION_LISTENER] is Bool { return true } } diff --git a/splitio_ios/ios/splitio_ios.podspec b/splitio_ios/ios/splitio_ios.podspec index 9fcdaeb..401300a 100644 --- a/splitio_ios/ios/splitio_ios.podspec +++ b/splitio_ios/ios/splitio_ios.podspec @@ -4,7 +4,7 @@ # Pod::Spec.new do |s| s.name = 'splitio_ios' - s.version = '0.5.0' + s.version = '0.6.0' s.summary = 'split.io official Flutter plugin.' s.description = <<-DESC split.io official Flutter plugin. @@ -15,7 +15,7 @@ split.io official Flutter plugin. s.source = { :path => '.' } s.source_files = 'Classes/**/*' s.dependency 'Flutter' - s.dependency 'Split', '~> 2.25.0' + s.dependency 'Split', '~> 2.26.1' s.platform = :ios, '9.0' # Flutter.framework does not contain a i386 slice.