mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
41 lines
1.4 KiB
Swift
41 lines
1.4 KiB
Swift
import Foundation
|
|
|
|
public struct ParsedWalletUrl {
|
|
public let address: String
|
|
public let amount: Int64?
|
|
public let comment: String?
|
|
}
|
|
|
|
private let invalidWalletAddressCharacters = CharacterSet(charactersIn: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=").inverted
|
|
private func isValidWalletAddress(_ address: String) -> Bool {
|
|
if address.count != 48 || address.rangeOfCharacter(from: invalidWalletAddressCharacters) != nil {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
public func parseWalletUrl(_ url: URL) -> ParsedWalletUrl? {
|
|
guard url.scheme == "ton" && url.host == "transfer" else {
|
|
return nil
|
|
}
|
|
var address: String?
|
|
let path = url.path.trimmingCharacters(in: CharacterSet(charactersIn: "/"))
|
|
if isValidWalletAddress(path) {
|
|
address = path
|
|
}
|
|
var amount: Int64?
|
|
var comment: String?
|
|
if let query = url.query, let components = URLComponents(string: "/?" + query), let queryItems = components.queryItems {
|
|
for queryItem in queryItems {
|
|
if let value = queryItem.value {
|
|
if queryItem.name == "amount", !value.isEmpty, let amountValue = Int64(value) {
|
|
amount = amountValue
|
|
} else if queryItem.name == "text", !value.isEmpty {
|
|
comment = value
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return address.flatMap { ParsedWalletUrl(address: $0, amount: amount, comment: comment) }
|
|
}
|