From 9ad10ded75d31c6b23e4ab8049b5808e4930e8be Mon Sep 17 00:00:00 2001 From: Team Mobile Schorsch Date: Fri, 6 May 2022 13:02:24 +0000 Subject: [PATCH] Release version 1.3.0 --- Package.swift | 2 +- README.md | 2 +- .../GiniBankAPI+Pinning.swift | 46 +++++++++++++++++-- .../GiniBankAPILibraryPinningVersion.swift | 2 +- 4 files changed, 44 insertions(+), 8 deletions(-) diff --git a/Package.swift b/Package.swift index cced54b..b7fcd01 100644 --- a/Package.swift +++ b/Package.swift @@ -17,7 +17,7 @@ let package = Package( // .package(url: /* package url */, from: "1.0.0"), .package(name: "TrustKit", url: "https://github.com/datatheorem/TrustKit.git", from: "2.0.0"), - .package(name: "GiniBankAPILibrary", url: "https://github.com/gini/bank-api-library-ios.git", .exact("1.2.1")), + .package(name: "GiniBankAPILibrary", url: "https://github.com/gini/bank-api-library-ios.git", .exact("1.3.0")), ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. diff --git a/README.md b/README.md index 004a0cd..6dd45bf 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- +

# Gini Bank API Library Pinning for iOS diff --git a/Sources/GiniBankAPILibraryPinning/GiniBankAPI+Pinning.swift b/Sources/GiniBankAPILibraryPinning/GiniBankAPI+Pinning.swift index d87a262..5ad03e8 100644 --- a/Sources/GiniBankAPILibraryPinning/GiniBankAPI+Pinning.swift +++ b/Sources/GiniBankAPILibraryPinning/GiniBankAPI+Pinning.swift @@ -9,12 +9,48 @@ import TrustKit import GiniBankAPILibrary public extension GiniBankAPI.Builder { + + /** + * Creates a Gini Bank API Library with certificate pinning configuration. + * + * - Parameter client: The Gini Bank API client credentials + * - Parameter api: The Gini Bank API that the library interacts with. `APIDomain.default` by default + * - Parameter userApi: The Gini User API that the library interacts with. `UserDomain.default` by default + * - Parameter pinningConfig: Configuration for certificate pinning. + * - Parameter logLevel: The log level. `LogLevel.none` by default. + */ init(client: Client, - api: APIDomain = .default, - pinningConfig: [String: Any], - logLevel: LogLevel = .none) { - self.init(client: client, api: api, logLevel: logLevel) - + api: APIDomain = .default, + userApi: UserDomain = .default, + pinningConfig: [String: Any], + logLevel: LogLevel = .none) { + self.init(client: client, api: api, userApi: userApi, logLevel: logLevel, sessionDelegate: SessionDelegate()) TrustKit.initSharedInstance(withConfiguration: pinningConfig) } + + /** + * Creates a Gini Bank API Library to be used with a transparent proxy and a custom api access token source and certificate pinning configuration. + * + * - Parameter customApiDomain: A custom api domain string. + * - Parameter alternativeTokenSource: A protocol for using custom api access token + * - Parameter pinningConfig: Configuration for certificate pinning. + * - Parameter logLevel: The log level. `LogLevel.none` by default. + */ + init(customApiDomain: String, + alternativeTokenSource: AlternativeTokenSource, + pinningConfig: [String: Any], + logLevel: LogLevel = .none) { + self.init(customApiDomain: customApiDomain, alternativeTokenSource: alternativeTokenSource, logLevel: logLevel, sessionDelegate: SessionDelegate()) + TrustKit.initSharedInstance(withConfiguration: pinningConfig) + } +} + +class SessionDelegate: NSObject, URLSessionDelegate { + public func urlSession(_ session: URLSession, + didReceive challenge: URLAuthenticationChallenge, + completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { + if TrustKit.sharedInstance().pinningValidator.handle(challenge, completionHandler: completionHandler) == false { + completionHandler(.performDefaultHandling, nil) + } + } } diff --git a/Sources/GiniBankAPILibraryPinning/GiniBankAPILibraryPinningVersion.swift b/Sources/GiniBankAPILibraryPinning/GiniBankAPILibraryPinningVersion.swift index 2d95184..1589ead 100644 --- a/Sources/GiniBankAPILibraryPinning/GiniBankAPILibraryPinningVersion.swift +++ b/Sources/GiniBankAPILibraryPinning/GiniBankAPILibraryPinningVersion.swift @@ -5,4 +5,4 @@ // Created by Nadya Karaban on 15.10.21. // -public let GiniBankAPILibraryPinningVersion = "1.2.0" +public let GiniBankAPILibraryPinningVersion = "1.3.0"