TM-SGNL-iOS/SignalServiceKit/Subscriptions/Donations/Stripe+3DSecure.swift
TeleMessage developers dde0620daf initial commit
2025-05-03 12:28:28 -07:00

40 lines
1.4 KiB
Swift

//
// Copyright 2022 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import Foundation
extension Stripe {
public enum RedirectAuthorizationError: Error {
case cancelled
case denied
case invalidCallback
}
// These values are somewhat arbitrary.
public static let SCHEME_FOR_3DS = "sgnlpay"
static let RETURN_URL_FOR_3DS = "\(SCHEME_FOR_3DS)://3ds"
static let RETURN_URL_FOR_IDEAL = "https://signaldonations.org/ideal"
/// Parse the redirect URL from a Stripe response. See [Stripe's docs][0].
///
/// [0]: https://stripe.com/docs/api/payment_intents/object#payment_intent_object-next_action-redirect_to_url-return_url
static func parseNextActionRedirectUrl(from responseBodyJson: Any?) -> URL? {
if
let responseDict = responseBodyJson as? [String: Any?],
let nextAction = responseDict["next_action"] as? [String: Any?],
let nextActionType = nextAction["type"] as? String,
nextActionType == "redirect_to_url",
let redirectToUrlDict = nextAction["redirect_to_url"] as? [String: Any?],
let redirectToUrlString = redirectToUrlDict["url"] as? String,
let redirectToUrl = URL(string: redirectToUrlString),
redirectToUrl.scheme != nil
{
return redirectToUrl
} else {
return nil
}
}
}