From dc77b844f5712ed1d2d86693f490b17c106132c6 Mon Sep 17 00:00:00 2001 From: Ingenico ePayments Date: Mon, 16 Oct 2023 16:43:55 +0200 Subject: [PATCH] Release 5.11.1. --- IngenicoConnectKit.podspec | 2 +- IngenicoConnectKit.xcodeproj/project.pbxproj | 4 + .../AuthenticationIndicator.swift | 24 ++++++ .../imageMapping.plist | 2 +- .../IngenicoConnectKit.bundle/pp_logo_320.png | Bin 6487 -> 16511 bytes .../PaymentProducts/BasicPaymentProduct.swift | 19 +++++ .../PaymentProducts/PaymentProduct.swift | 3 + IngenicoConnectKit/Session.swift | 80 ++++++++++++------ IngenicoConnectKit/Util.swift | 2 +- 9 files changed, 105 insertions(+), 31 deletions(-) create mode 100644 IngenicoConnectKit/AuthenticationIndicator.swift diff --git a/IngenicoConnectKit.podspec b/IngenicoConnectKit.podspec index 64882e6..78e7487 100644 --- a/IngenicoConnectKit.podspec +++ b/IngenicoConnectKit.podspec @@ -1,7 +1,7 @@ Pod::Spec.new do |s| s.name = "IngenicoConnectKit" - s.version = "5.11.0" + s.version = "5.11.1" s.summary = "Ingenico Connect Swift SDK" s.description = <<-DESC This native iOS SDK facilitates handling payments in your apps diff --git a/IngenicoConnectKit.xcodeproj/project.pbxproj b/IngenicoConnectKit.xcodeproj/project.pbxproj index 514df87..090480a 100644 --- a/IngenicoConnectKit.xcodeproj/project.pbxproj +++ b/IngenicoConnectKit.xcodeproj/project.pbxproj @@ -94,6 +94,7 @@ 73CBAE531F9E2CC500FAB37F /* CustomerDetailsError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73CBAE521F9E2CC500FAB37F /* CustomerDetailsError.swift */; }; 7BC4941129657E5500F6138A /* ValidatorResidentIdNumberTestCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BC4941029657E5500F6138A /* ValidatorResidentIdNumberTestCase.swift */; }; 7BC494192965AA3C00F6138A /* ValidatorResidentIdNumber.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BC494182965AA3C00F6138A /* ValidatorResidentIdNumber.swift */; }; + 7BEEA28929BA2F160085406C /* AuthenticationIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BEEA28829BA2F160085406C /* AuthenticationIndicator.swift */; }; 7BFB26CE2954536D00A95841 /* OHHTTPStubs.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7BFB26CB2954536C00A95841 /* OHHTTPStubs.xcframework */; }; 7BFB26CF2954536D00A95841 /* OHHTTPStubs.xcframework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 7BFB26CB2954536C00A95841 /* OHHTTPStubs.xcframework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 7BFB26D02954536D00A95841 /* CryptoSwift.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7BFB26CC2954536C00A95841 /* CryptoSwift.xcframework */; }; @@ -263,6 +264,7 @@ 73CBAE521F9E2CC500FAB37F /* CustomerDetailsError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = CustomerDetailsError.swift; path = Models/PaymentProducts/CustomerDetailsError.swift; sourceTree = ""; }; 7BC4941029657E5500F6138A /* ValidatorResidentIdNumberTestCase.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ValidatorResidentIdNumberTestCase.swift; path = IngenicoConnectKitTests/Models/ValidatorResidentIdNumberTestCase.swift; sourceTree = ""; }; 7BC494182965AA3C00F6138A /* ValidatorResidentIdNumber.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = ValidatorResidentIdNumber.swift; path = Models/PaymentProducts/ValidatorResidentIdNumber.swift; sourceTree = ""; }; + 7BEEA28829BA2F160085406C /* AuthenticationIndicator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationIndicator.swift; sourceTree = ""; }; 7BFB26CB2954536C00A95841 /* OHHTTPStubs.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = OHHTTPStubs.xcframework; path = Carthage/Build/OHHTTPStubs.xcframework; sourceTree = ""; }; 7BFB26CC2954536C00A95841 /* CryptoSwift.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = CryptoSwift.xcframework; path = Carthage/Build/CryptoSwift.xcframework; sourceTree = ""; }; 7BFB26CD2954536C00A95841 /* Alamofire.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = Alamofire.xcframework; path = Carthage/Build/Alamofire.xcframework; sourceTree = ""; }; @@ -730,6 +732,7 @@ children = ( 73AABACE1F1F806B00B76782 /* CustomerDetails.swift */, 73CBAE521F9E2CC500FAB37F /* CustomerDetailsError.swift */, + 7BEEA28829BA2F160085406C /* AuthenticationIndicator.swift */, 73AABACF1F1F806B00B76782 /* DisplayElement.swift */, 6D7822651DF066C700B5A9AB /* DataRestrictions.swift */, 6D7822691DF067A900B5A9AB /* ToolTip.swift */, @@ -953,6 +956,7 @@ 6D4E7AA71DF5656600BAE336 /* BasicPaymentProductGroup.swift in Sources */, 735404512153C71700771041 /* PaymentProduct863SpecificData.swift in Sources */, 6D7822641DF0660B00B5A9AB /* PaymentItemDisplayHints.swift in Sources */, + 7BEEA28929BA2F160085406C /* AuthenticationIndicator.swift in Sources */, 73AABAD11F1F806B00B76782 /* DisplayElement.swift in Sources */, 6D7822461DF03D2100B5A9AB /* FormElement.swift in Sources */, B43C1F6D1DEC59E300E210DF /* Region.swift in Sources */, diff --git a/IngenicoConnectKit/AuthenticationIndicator.swift b/IngenicoConnectKit/AuthenticationIndicator.swift new file mode 100644 index 0000000..445c960 --- /dev/null +++ b/IngenicoConnectKit/AuthenticationIndicator.swift @@ -0,0 +1,24 @@ +// +// AuthenticationIndicator.swift +// IngenicoConnectKit +// +// Created for Ingenico ePayments on 09/03/2023. +// Copyright © 2023 Global Collect Services. All rights reserved. +// + +import Foundation + +public class AuthenticationIndicator: ResponseObjectSerializable { + public var name: String + public var value: String + + public required init?(json: [String: Any]) { + guard let name = json["name"] as? String, + let value = json["value"] as? String else { + return nil + } + + self.name = name + self.value = value + } +} diff --git a/IngenicoConnectKit/IngenicoConnectKit.bundle/imageMapping.plist b/IngenicoConnectKit/IngenicoConnectKit.bundle/imageMapping.plist index 67f7a68..6eb215f 100644 --- a/IngenicoConnectKit/IngenicoConnectKit.bundle/imageMapping.plist +++ b/IngenicoConnectKit/IngenicoConnectKit.bundle/imageMapping.plist @@ -95,7 +95,7 @@ pp_logo_302 templates/master/global/css/img/ppimages/pp_logo_302_v1.png pp_logo_320 - templates/master/global/css/img/ppimages/pp_logo_320_v3.png + templates/master/global/css/img/ppimages/pp_logo_320_v4.png pp_logo_402 templates/master/global/css/img/ppimages/pp_logo_402_v2.png pp_logo_420 diff --git a/IngenicoConnectKit/IngenicoConnectKit.bundle/pp_logo_320.png b/IngenicoConnectKit/IngenicoConnectKit.bundle/pp_logo_320.png index 1d193bdb68bf9a592e8a4b609a142c090aaf0e9e..79de72df7eb9af6125e82cc5250452b6209c0242 100644 GIT binary patch literal 16511 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 PaymentProductField? { diff --git a/IngenicoConnectKit/Session.swift b/IngenicoConnectKit/Session.swift index 1eb96cd..7ac9c51 100644 --- a/IngenicoConnectKit/Session.swift +++ b/IngenicoConnectKit/Session.swift @@ -409,42 +409,66 @@ public class Session { } } + public func publicKey( + success: @escaping (_ publicKeyResponse: PublicKeyResponse) -> Void, + failure: @escaping (_ error: Error) -> Void + ) { + communicator.publicKey( + success: { publicKeyResponse in + success(publicKeyResponse) + }, + failure: { error in + failure(error) + } + ) + + } + public func prepare( _ paymentRequest: PaymentRequest, success: @escaping (_ preparedPaymentRequest: PreparedPaymentRequest) -> Void, failure: @escaping (_ error: Error) -> Void ) { - communicator.publicKey(success: { publicKeyResponse in - let publicKeyAsData = publicKeyResponse.encodedPublicKey.decode() - guard let strippedPublicKeyAsData = self.encryptor.stripPublicKey(data: publicKeyAsData) else { - failure(SessionError.RuntimeError("Failed to decode Public key.")) - return - } - let tag = "globalcollect-sdk-public-key-swift" + self.publicKey( + success: { publicKeyResponse in + let publicKeyAsData = publicKeyResponse.encodedPublicKey.decode() + guard let strippedPublicKeyAsData = self.encryptor.stripPublicKey(data: publicKeyAsData) else { + failure(SessionError.RuntimeError("Failed to decode Public key.")) + return + } + let tag = "globalcollect-sdk-public-key-swift" - self.encryptor.deleteRSAKey(withTag: tag) - self.encryptor.storePublicKey(publicKey: strippedPublicKeyAsData, tag: tag) + self.encryptor.deleteRSAKey(withTag: tag) + self.encryptor.storePublicKey(publicKey: strippedPublicKeyAsData, tag: tag) - guard let publicKey = self.encryptor.RSAKey(withTag: tag) else { - failure(SessionError.RuntimeError("Failed to find RSA Key.")) - return - } + guard let publicKey = self.encryptor.RSAKey(withTag: tag) else { + failure(SessionError.RuntimeError("Failed to find RSA Key.")) + return + } - let paymentRequestJSON = - self.preparePaymentRequestJSON(forClientSessionId: self.clientSessionId, paymentRequest: paymentRequest) - let encryptedFields = - self.joseEncryptor.encryptToCompactSerialization( - JSON: paymentRequestJSON, - withPublicKey: publicKey, - keyId: publicKeyResponse.keyId - ) - let encodedClientMetaInfo = self.communicator.base64EncodedClientMetaInfo - let preparedRequest = - PreparedPaymentRequest(encryptedFields: encryptedFields, encodedClientMetaInfo: encodedClientMetaInfo) - success(preparedRequest) - }, failure: { error in - failure(error) - }) + let paymentRequestJSON = + self.preparePaymentRequestJSON( + forClientSessionId: self.clientSessionId, + paymentRequest: paymentRequest + ) + let encryptedFields = + self.joseEncryptor.encryptToCompactSerialization( + JSON: paymentRequestJSON, + withPublicKey: publicKey, + keyId: publicKeyResponse.keyId + ) + let encodedClientMetaInfo = self.communicator.base64EncodedClientMetaInfo + let preparedRequest = + PreparedPaymentRequest( + encryptedFields: encryptedFields, + encodedClientMetaInfo: encodedClientMetaInfo + ) + success(preparedRequest) + }, + failure: { error in + failure(error) + } + ) } private func preparePaymentRequestJSON( diff --git a/IngenicoConnectKit/Util.swift b/IngenicoConnectKit/Util.swift index 4a0c6c9..32dbcaf 100644 --- a/IngenicoConnectKit/Util.swift +++ b/IngenicoConnectKit/Util.swift @@ -43,7 +43,7 @@ public class Util { public init() { metaInfo = [ "platformIdentifier": platformIdentifier, - "sdkIdentifier": "SwiftClientSDK/v5.11.0", + "sdkIdentifier": "SwiftClientSDK/v5.11.1", "sdkCreator": "Ingenico", "screenSize": screenSize, "deviceBrand": "Apple",