Skip to content

Commit 4376a39

Browse files
Bugfix/LI-97987 Swifter SDK Embeds Trojan CDN - Polyfill.io (Supply Chain Attack) (#389)
* LI-97987 Replace Swifter by envoy/Ambassador to address Trojan CDN - Polyfill.io
1 parent f22218e commit 4376a39

File tree

13 files changed

+212
-116
lines changed

13 files changed

+212
-116
lines changed

CHANGELOG.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
Changelog
22
=========
3-
[1.0.2](https://github.com/hyperwallet/hyperwallet-ios-ui-sdk/releases/tag/1.0.0-beta21)
3+
[1.0.3](https://github.com/hyperwallet/hyperwallet-ios-ui-sdk/releases/tag/1.0.3)
4+
-------------------
5+
- Replace dependecy Swifter by Ambassador
6+
7+
[1.0.2](https://github.com/hyperwallet/hyperwallet-ios-ui-sdk/releases/tag/1.0.2)
48
-------------------
59
- iOS 18 Navigation Bar Display Issue Resolved it
610

7-
[1.0.1](https://github.com/hyperwallet/hyperwallet-ios-ui-sdk/releases/tag/1.0.0-beta21)
11+
[1.0.1](https://github.com/hyperwallet/hyperwallet-ios-ui-sdk/releases/tag/1.0.1)
812
-------------------
913
- Automatically select the default currency code based on the country's configuration
1014

Cartfile

Lines changed: 0 additions & 2 deletions
This file was deleted.

Cartfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
github "hyperwallet/hyperwallet-ios-sdk" "1.0.1"
2+
github "hyperwallet/hyperwallet-ios-insight" "1.0.0-beta08"

Cartfile.private

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
github "JanGorman/Hippolyte" "1.4.1"
2-
github "httpswift/swifter" "1.5.0"
2+
github "envoy/Ambassador" ~> 4.0
3+
github "envoy/Embassy" ~> 4.0

Cartfile.resolved

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
github "JanGorman/Hippolyte" "1.4.1"
2-
github "httpswift/swifter" "1.5.0"
3-
github "hyperwallet/hyperwallet-ios-insight" "1.0.0-beta08"
41
github "hyperwallet/hyperwallet-ios-sdk" "1.0.1"
2+
github "hyperwallet/hyperwallet-ios-insight" "1.0.0-beta08"
3+
github "JanGorman/Hippolyte" "1.4.1"
4+
github "envoy/Ambassador" "v4.0.5"
5+
github "envoy/Embassy" "v4.1.6"

HyperwalletUISDK.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |spec|
22
spec.name = 'HyperwalletUISDK'
3-
spec.version = '1.0.2'
3+
spec.version = '1.0.3'
44
spec.summary = 'Hyperwallet UI SDK for iOS to integrate with Hyperwallet Platform'
55
spec.homepage = 'https://github.com/hyperwallet/hyperwallet-ios-ui-sdk'
66
spec.license = { :type => 'MIT', :file => 'LICENSE' }

HyperwalletUISDK.xcodeproj/project.pbxproj

Lines changed: 130 additions & 17 deletions
Large diffs are not rendered by default.

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,21 +34,21 @@ Adding one or more of these frameworks allows users to explore the particular fu
3434
### Carthage
3535
Specify it in your Cartfile:
3636
```ogdl
37-
github "hyperwallet/hyperwallet-ios-ui-sdk" "1.0.2"
37+
github "hyperwallet/hyperwallet-ios-ui-sdk" "1.0.3"
3838
```
3939
Add desired modules using the `Linked Frameworks and Libraries` option to make them available in the app.
4040
Use `import <module-name>` to add the dependency within a file
4141

4242
### CocoaPods
4343
- Install a specific framework (install one or more frameworks based on your requirement)
4444
```ruby
45-
pod "HyperwalletUISDK/TransferMethod", "1.0.2"
46-
pod "HyperwalletUISDK/Transfer", "1.0.2"
47-
pod "HyperwalletUISDK/Receipt", "1.0.2"
45+
pod "HyperwalletUISDK/TransferMethod", "1.0.3"
46+
pod "HyperwalletUISDK/Transfer", "1.0.3"
47+
pod "HyperwalletUISDK/Receipt", "1.0.3"
4848
```
4949
- To install all available modules (TransferMethod, Transfer, Receipt)
5050
```ruby
51-
pod 'HyperwalletUISDK', '~> 1.0.2'
51+
pod 'HyperwalletUISDK', '~> 1.0.3'
5252
```
5353
Use `import HyperwalletUISDK` to add the dependency within a file.
5454

UITests/BaseTests/BaseTest.swift

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@ class BaseTests: XCTestCase {
4545
}
4646

4747
override func setUp() {
48-
mockServer = HyperwalletMockWebServer()
49-
mockServer.setUp()
48+
mockServer = HyperwalletMockWebServer.shared
5049

5150
mockServer.setupStub(url: "/rest/v3/users/usr-token/authentication-token",
5251
filename: "AuthenticationTokenWalletModelResponse",
@@ -104,8 +103,4 @@ class BaseTests: XCTestCase {
104103
func clickBackButton() {
105104
app.navigationBars.buttons[Common.navBackButton].tap()
106105
}
107-
108-
override func tearDown() {
109-
mockServer.tearDown()
110-
}
111106
}
Lines changed: 49 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,109 +1,88 @@
1+
import Ambassador
2+
import Embassy
13
import Foundation
2-
import Swifter
34

45
enum HTTPMethod {
56
case get
67
case post
78
case put
89
}
910

11+
// swiftlint:disable force_try
1012
final class HyperwalletMockWebServer {
11-
private var server: HttpServer!
13+
private var server: HTTPServer!
14+
private var router: Router! = Router()
15+
private var loop: EventLoop!
16+
private var thread: Thread!
1217
let testBundle = Bundle(for: HyperwalletMockWebServer.self)
18+
static let shared = HyperwalletMockWebServer(port: 8432)
1319

14-
func setUp() {
15-
server = HttpServer()
16-
do {
17-
try server.start(8432)
18-
} catch {
19-
print("Error info: \(error)")
20-
}
21-
}
20+
private init(port: Int) {
21+
loop = try! SelectorEventLoop(selector: try! KqueueSelector())
22+
router = Router()
23+
server = DefaultHTTPServer(eventLoop: loop, port: port, app: router.app)
24+
25+
try! server.start()
2226

23-
func tearDown() {
24-
if server.operating {
25-
server.stop()
27+
thread = Thread {
28+
self.loop.runForever()
2629
}
27-
server = nil
30+
thread.start()
2831
}
29-
30-
func setupStub(url: String, filename: String, method: HTTPMethod) {
32+
33+
func setupStub(url: String, filename: String, method: HTTPMethod, statusCode: Int = 200) {
3134
let filePath = testBundle.path(forResource: filename, ofType: "json")
3235
let fileUrl = URL(fileURLWithPath: filePath!)
36+
3337
do {
3438
let data = try Data(contentsOf: fileUrl, options: .uncached)
35-
let json = dataToJSON(data: data)
36-
let response: ((HttpRequest) -> HttpResponse) = { _ in
37-
HttpResponse.ok(.json(json as AnyObject))
38-
}
39-
40-
if method == .get {
41-
server.GET[url] = response
42-
} else if method == .put {
43-
server.PUT[url] = response
44-
} else {
45-
server.POST[url] = response
39+
guard let json = dataToJSON(data: data)
40+
else { return }
41+
42+
router[url] = JSONResponse(statusCode: statusCode) { _ -> Any in
43+
return json
4644
}
4745
} catch {
4846
print("Error info: \(error)")
4947
}
5048
}
51-
52-
func setupStubError(url: String,
53-
filename: String,
54-
method: HTTPMethod,
55-
statusCode: Int = 400) {
49+
50+
func setupStubError(url: String, filename: String, method: HTTPMethod, statusCode: Int = 400) {
5651
let filePath = testBundle.path(forResource: filename, ofType: "json")
5752
let fileUrl = URL(fileURLWithPath: filePath!)
5853
do {
5954
let data = try Data(contentsOf: fileUrl, options: .uncached)
60-
let reasonPhrase = "Bad Request"
61-
let headers = ["Content-Type": "application/json"]
62-
63-
let response: ((HttpRequest) -> HttpResponse) = { _ in
64-
HttpResponse.raw(statusCode, reasonPhrase, headers, { writer in
65-
try writer.write(data)
66-
})
67-
}
68-
69-
if method == .get {
70-
server.GET[url] = response
71-
} else if method == .put {
72-
server.PUT[url] = response
73-
} else {
74-
server.POST[url] = response
55+
guard let json = dataToJSON(data: data)
56+
else { return }
57+
58+
router[url] = JSONResponse(statusCode: statusCode) { _ -> Any in
59+
return json
7560
}
7661
} catch {
7762
print("Error info: \(error)")
7863
}
7964
}
80-
65+
8166
func setUpEmptyResponse(url: String) {
82-
let statusCode = 204
83-
let headers = ["Content-Type": "application/json"]
84-
85-
let response: ((HttpRequest) -> HttpResponse) = { _ in
86-
HttpResponse.raw(statusCode, "Empty", headers, nil)
67+
router[url] = DataResponse(
68+
statusCode: 204,
69+
statusMessage: "No Content",
70+
contentType: "application/json",
71+
headers: []
72+
) { _, sendData in
73+
sendData(Data())
8774
}
88-
89-
server.GET[url] = response
9075
}
76+
9177
func setupStubEmpty(url: String, statusCode: Int, method: HTTPMethod) {
92-
let headers = ["Content-Type": "application/json"]
93-
94-
let response: ((HttpRequest) -> HttpResponse) = { _ in
95-
HttpResponse.raw(statusCode, "Empty", headers, nil)
96-
}
97-
98-
if method == .get {
99-
server.GET[url] = response
100-
} else if method == .put {
101-
server.PUT[url] = response
102-
} else {
103-
server.POST[url] = response
104-
}
78+
router[url] = JSONResponse(statusCode: statusCode)
10579
}
106-
80+
81+
func shutDown() {
82+
server.stop()
83+
loop.stop()
84+
}
85+
10786
func dataToJSON(data: Data) -> Any? {
10887
do {
10988
return try JSONSerialization.jsonObject(with: data, options: .mutableContainers)
@@ -113,3 +92,4 @@ final class HyperwalletMockWebServer {
11392
return nil
11493
}
11594
}
95+
// swiftlint:enable force_try

0 commit comments

Comments
 (0)