Skip to content

Commit ba7ae89

Browse files
author
guillaumedebavelaere
committed
Cimb - implements 1 FA when canceling an order
1 parent 1616cec commit ba7ae89

File tree

6 files changed

+68
-38
lines changed

6 files changed

+68
-38
lines changed

TradeItIosEmsApi/TradeItCancelOrderRequest.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,8 @@
55
@property (nonatomic, copy, nullable) NSString * token;
66
@property (nonatomic, copy, nullable) NSString * accountNumber;
77
@property (nonatomic, copy, nullable) NSString * orderNumber;
8+
@property (nonatomic, copy, nullable) NSString * interAppAddressCallback;
9+
10+
- (_Nonnull id)initWithInterAppAddressCallback:(NSString * _Nonnull)interAppAddressCallback;
811

912
@end
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
#import "TradeItCancelOrderRequest.h"
22

33
@implementation TradeItCancelOrderRequest
4+
- (id)initWithInterAppAddressCallback:(NSString *)interAppAddressCallback {
5+
self = [super init];
46

7+
if (self) {
8+
self.interAppAddressCallback = interAppAddressCallback;
9+
}
10+
11+
return self;
12+
}
513
@end

TradeItIosTicketSDK2/TradeItLauncher.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,17 @@ protocol OAuthCompletionListener {
8686
)
8787
}
8888
}
89+
90+
if let cancelOrderViewController = originalViewController?.childViewControllers.last as? TradeItOrdersViewController {
91+
if let originalViewController = originalViewController {
92+
originalViewController.dismiss(
93+
animated: true,
94+
completion: {
95+
cancelOrderViewController.handleCancelOrderSecurityResponse()
96+
}
97+
)
98+
}
99+
}
89100
}
90101

91102
public func launchPortfolio(fromViewController viewController: UIViewController) {

TradeItIosTicketSDK2/TradeItLinkedBrokerAccount.swift

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -171,19 +171,18 @@
171171

172172
public func cancelOrder(orderNumber: String,
173173
onSuccess: @escaping () -> Void,
174-
onSecurityQuestion: @escaping (
175-
TradeItSecurityQuestionResult,
176-
_ submitAnswer: @escaping (String) -> Void,
177-
_ onCancelSecurityQuestion: @escaping () -> Void
174+
onVerifyUrl: @escaping (
175+
URL,
176+
_ complete1FA: @escaping () -> Void
178177
) -> Void,
179178
onFailure: @escaping (TradeItErrorResult) -> Void) {
180-
let request = TradeItCancelOrderRequest()
179+
let request = TradeItCancelOrderRequest(interAppAddressCallback: TradeItSDK.verify1FACallbackUrl.absoluteString)
181180
request.accountNumber = self.accountNumber
182181
request.orderNumber = orderNumber
183182
self.orderService?.cancelOrder(
184183
request,
185184
onSuccess: onSuccess,
186-
onSecurityQuestion: onSecurityQuestion,
185+
onVerifyUrl: onVerifyUrl,
187186
onFailure: { error in
188187
self.setError(error)
189188
onFailure(error)

TradeItIosTicketSDK2/TradeItOrderService.swift

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,9 @@ internal class TradeItOrderService: NSObject {
3636
func cancelOrder(
3737
_ data: TradeItCancelOrderRequest,
3838
onSuccess: @escaping () -> Void,
39-
onSecurityQuestion: @escaping (
40-
TradeItSecurityQuestionResult,
41-
_ submitAnswer: @escaping (String) -> Void,
42-
_ onCancelSecurityQuestion: @escaping () -> Void
39+
onVerifyUrl: @escaping (
40+
URL,
41+
_ complete1FA: @escaping () -> Void
4342
) -> Void,
4443
onFailure: @escaping (TradeItErrorResult) -> Void
4544
) {
@@ -54,24 +53,23 @@ internal class TradeItOrderService: NSObject {
5453
let cancelOrderResponseHandler = YCombinator { handler in
5554
{ (result: TradeItResult?) in
5655
switch result {
57-
case _ as TradeItAllOrderStatusResult:
58-
onSuccess()
59-
case let securityQuestion as TradeItSecurityQuestionResult:
60-
onSecurityQuestion(
61-
securityQuestion,
62-
{ securityQuestionAnswer in
63-
self.answerSecurityQuestionCancelOrder(securityQuestionAnswer, withCompletionBlock: handler)
64-
},
65-
{
66-
handler(
67-
TradeItErrorResult(
68-
title: "Authentication failed",
69-
message: "The security question was canceled.",
70-
code: .sessionError
71-
)
56+
case let verifyOAuthURLResult as TradeItVerifyOAuthURLResult:
57+
guard let oAuthUrl = verifyOAuthURLResult.oAuthUrl() else {
58+
onFailure(
59+
TradeItErrorResult(
60+
title: "Received empty OAuth verify popup URL"
7261
)
62+
)
63+
return
64+
}
65+
onVerifyUrl(
66+
oAuthUrl,
67+
{
68+
self.complete1FA(completionBlock: handler)
7369
}
7470
)
71+
case _ as TradeItAllOrderStatusResult:
72+
onSuccess()
7573
case let errorResult as TradeItErrorResult:
7674
onFailure(errorResult)
7775
default:
@@ -84,14 +82,15 @@ internal class TradeItOrderService: NSObject {
8482
cancelOrderResponseHandler(result)
8583
}
8684
}
87-
88-
func answerSecurityQuestionCancelOrder(_ answer: String, withCompletionBlock completionBlock: @escaping (TradeItResult) -> Void) {
89-
let secRequest = TradeItSecurityQuestionRequest(token: self.session.token, andAnswer: answer)
85+
86+
func complete1FA(completionBlock: @escaping (TradeItResult) -> Void) {
87+
let complete1FARequest = TradeItComplete1FARequest(token: self.session.token)
9088
let request = TradeItRequestFactory.buildJsonRequest(
91-
for: secRequest,
92-
emsAction: "user/answerSecurityQuestion",
89+
for: complete1FARequest,
90+
emsAction: "user/complete1FA",
9391
environment: self.session.connector.environment
9492
)
93+
9594
self.session.connector.send(request, targetClassType: TradeItAllOrderStatusResult.self) { result in
9695
completionBlock(
9796
result ?? TradeItErrorResult.tradeError(withSystemMessage: "Error canceling order.")

TradeItIosTicketSDK2/TradeItOrdersViewController.swift

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import UIKit
22
import PromiseKit
33
import MBProgressHUD
4+
import SafariServices
45

56
class TradeItOrdersViewController: TradeItViewController, TradeItOrdersTableDelegate {
67
var ordersTableViewManager: TradeItOrdersTableViewManager?
@@ -90,13 +91,10 @@ class TradeItOrdersViewController: TradeItViewController, TradeItOrdersTableDele
9091
activityView.hide(animated: true)
9192
self.loadOrders()
9293
},
93-
onSecurityQuestion: { securityQuestion, answerSecurityQuestion, cancelSecurityQuestion in
94-
self.alertManager.promptUserToAnswerSecurityQuestion(
95-
securityQuestion,
96-
onViewController: self,
97-
onAnswerSecurityQuestion: answerSecurityQuestion,
98-
onCancelSecurityQuestion: cancelSecurityQuestion
99-
)
94+
onVerifyUrl: { url, complete1FA in
95+
self.cancelOrderSecurityHandler = complete1FA
96+
let safariViewController = SFSafariViewController(url: url)
97+
self.present(safariViewController, animated: true, completion: nil)
10098
},
10199
onFailure: { error in
102100
activityView.hide(animated: true)
@@ -121,7 +119,19 @@ class TradeItOrdersViewController: TradeItViewController, TradeItOrdersTableDele
121119
onCancelActionTapped: {}
122120
)
123121
}
124-
122+
123+
private var cancelOrderSecurityHandler: (() -> Void)?
124+
internal func handleCancelOrderSecurityResponse() {
125+
if let cancelOrderSecurityHandler = self.cancelOrderSecurityHandler {
126+
cancelOrderSecurityHandler()
127+
} else {
128+
return self.alertManager.showError(
129+
TradeItErrorResult.error(withSystemMessage: "Canceling order could not be submitted please try again."),
130+
onViewController: self
131+
)
132+
}
133+
}
134+
125135
// MARK: private
126136

127137
private func loadOrders() {

0 commit comments

Comments
 (0)