Fix Passport request handling if no callbackUrl provided

This commit is contained in:
Ilya Laktyushin 2021-04-26 16:34:24 +04:00
parent 5b5e3f22de
commit 91b81eadff
2 changed files with 9 additions and 7 deletions

View File

@ -65,7 +65,7 @@ final class SecureIdAuthControllerInteraction {
} }
public enum SecureIdAuthControllerMode { public enum SecureIdAuthControllerMode {
case form(peerId: PeerId, scope: String, publicKey: String, callbackUrl: String, opaquePayload: Data, opaqueNonce: Data) case form(peerId: PeerId, scope: String, publicKey: String, callbackUrl: String?, opaquePayload: Data, opaqueNonce: Data)
case list case list
} }
@ -423,8 +423,8 @@ public final class SecureIdAuthController: ViewController, StandalonePresentable
@objc private func cancelPressed() { @objc private func cancelPressed() {
self.dismiss() self.dismiss()
if case let .form(reqForm) = self.mode { if case let .form(peerId, _, _, maybeCallbackUrl, _, _) = self.mode, let callbackUrl = maybeCallbackUrl {
self.openUrl(secureIdCallbackUrl(with: reqForm.callbackUrl, peerId: reqForm.peerId, result: .cancel, parameters: [:])) self.openUrl(secureIdCallbackUrl(with: callbackUrl, peerId: peerId, result: .cancel, parameters: [:]))
} }
} }
@ -639,13 +639,15 @@ public final class SecureIdAuthController: ViewController, StandalonePresentable
@objc private func grantAccess() { @objc private func grantAccess() {
switch self.state { switch self.state {
case let .form(form): case let .form(form):
if case let .form(reqForm) = self.mode, let encryptedFormData = form.encryptedFormData, let formData = form.formData { if case let .form(peerId, scope, publicKey, callbackUrl, opaquePayload, opaqueNonce) = self.mode, let encryptedFormData = form.encryptedFormData, let formData = form.formData {
let values = parseRequestedFormFields(formData.requestedFields, values: formData.values, primaryLanguageByCountry: encryptedFormData.primaryLanguageByCountry).map({ $0.1 }).flatMap({ $0 }) let values = parseRequestedFormFields(formData.requestedFields, values: formData.values, primaryLanguageByCountry: encryptedFormData.primaryLanguageByCountry).map({ $0.1 }).flatMap({ $0 })
let _ = (grantSecureIdAccess(network: self.context.account.network, peerId: encryptedFormData.servicePeer.id, publicKey: reqForm.publicKey, scope: reqForm.scope, opaquePayload: reqForm.opaquePayload, opaqueNonce: reqForm.opaqueNonce, values: values, requestedFields: formData.requestedFields) let _ = (grantSecureIdAccess(network: self.context.account.network, peerId: encryptedFormData.servicePeer.id, publicKey: publicKey, scope: scope, opaquePayload: opaquePayload, opaqueNonce: opaqueNonce, values: values, requestedFields: formData.requestedFields)
|> deliverOnMainQueue).start(completed: { [weak self] in |> deliverOnMainQueue).start(completed: { [weak self] in
self?.dismiss() self?.dismiss()
self?.openUrl(secureIdCallbackUrl(with: reqForm.callbackUrl, peerId: reqForm.peerId, result: .success, parameters: [:])) if let callbackUrl = callbackUrl {
self?.openUrl(secureIdCallbackUrl(with: callbackUrl, peerId: peerId, result: .success, parameters: [:]))
}
}) })
} }
case .list: case .list:

View File

@ -439,7 +439,7 @@ func openExternalUrlImpl(context: AccountContext, urlContext: OpenURLContext, ur
} }
if valid { if valid {
if let botId = botId, let scope = scope, let publicKey = publicKey, let callbackUrl = callbackUrl { if let botId = botId, let scope = scope, let publicKey = publicKey {
if scope.hasPrefix("{") && scope.hasSuffix("}") { if scope.hasPrefix("{") && scope.hasSuffix("}") {
opaquePayload = Data() opaquePayload = Data()
if opaqueNonce.isEmpty { if opaqueNonce.isEmpty {