mirror of
https://github.com/luxfi/safe-ios.git
synced 2026-10-30 15:19:20 +00:00
89 lines
2.6 KiB
Swift
89 lines
2.6 KiB
Swift
//
|
|
// AddOwnerRequestUrlValidator.swift
|
|
// Multisig
|
|
//
|
|
// Created by Dmitry Bespalov on 14.06.22.
|
|
// Copyright © 2022 Gnosis Ltd. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
struct AddOwnerRequestParameters {
|
|
var chain: Chain
|
|
var safeAddress: Address
|
|
var ownerAddress: Address
|
|
|
|
func link(base: URL = App.configuration.services.webAppURL) -> String {
|
|
var url = base
|
|
.appendingPathComponent("settings")
|
|
.appendingPathComponent("setup")
|
|
|
|
let result: String
|
|
|
|
let queryItems = [
|
|
URLQueryItem(name: "safe", value: "\(chain.shortName!):\(safeAddress.checksummed)"),
|
|
URLQueryItem(name: "address", value: ownerAddress.checksummed)
|
|
]
|
|
|
|
if #available(iOS 16, *) {
|
|
url.append(queryItems: queryItems)
|
|
result = url.absoluteString
|
|
} else {
|
|
var comps = URLComponents(url: url, resolvingAgainstBaseURL: false)!
|
|
comps.queryItems = queryItems
|
|
result = comps.url!.absoluteString
|
|
}
|
|
|
|
return result
|
|
}
|
|
}
|
|
|
|
struct AddOwnerRequestValidator {
|
|
|
|
private static var _webAppURL: URL = App.configuration.services.webAppURL
|
|
static var webAppURL: URL {
|
|
get {
|
|
_webAppURL
|
|
}
|
|
set {
|
|
_webAppURL = newValue
|
|
pattern = "^\(newValue)settings/setup\\?safe=([-a-zA-Z0-9]{1,20}):(0x[a-fA-F0-9]{40})&address=(0x[a-fA-F0-9]{40})$"
|
|
}
|
|
}
|
|
private static var pattern = "^\(webAppURL)settings/setup\\?safe=([-a-zA-Z0-9]{1,20}):(0x[a-fA-F0-9]{40})&address=(0x[a-fA-F0-9]{40})$"
|
|
|
|
static func isValid(url: URL) -> Bool {
|
|
guard url.absoluteString.matches(pattern: pattern) else { return false }
|
|
|
|
let matches = url.absoluteString.capturedValues(pattern: pattern).flatMap { $0 }
|
|
|
|
guard
|
|
matches.count == 3 &&
|
|
// safe address at position 1
|
|
Address(matches[1]) != nil &&
|
|
// owner address at position 2
|
|
Address(matches[2]) != nil
|
|
else {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
static func parameters(from url: URL) -> AddOwnerRequestParameters? {
|
|
let matches = url.absoluteString.capturedValues(pattern: pattern).flatMap { $0 }
|
|
guard
|
|
matches.count == 3,
|
|
let chain = Chain.by(shortName: matches[0]),
|
|
let safe = Address(matches[1]),
|
|
let owner = Address(matches[2])
|
|
else {
|
|
return nil
|
|
}
|
|
return AddOwnerRequestParameters(
|
|
chain: chain,
|
|
safeAddress: safe,
|
|
ownerAddress: owner
|
|
)
|
|
}
|
|
}
|