purple: add staging option to DamusPurpleURL

Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
William Casarin
2024-01-28 15:30:43 -08:00
parent 500f8bc2ec
commit 0c63f2ee26
4 changed files with 52 additions and 20 deletions

View File

@@ -7,39 +7,53 @@
import Foundation
enum DamusPurpleURL {
case verify_npub(checkout_id: String)
case welcome(checkout_id: String)
case landing
static func from_url(url: URL) -> DamusPurpleURL? {
struct DamusPurpleURL: Equatable {
let is_staging: Bool
let variant: Self.Variant
enum Variant: Equatable {
case verify_npub(checkout_id: String)
case welcome(checkout_id: String)
case landing
}
init(is_staging: Bool, variant: Self.Variant) {
self.is_staging = is_staging
self.variant = variant
}
init?(url: URL) {
guard let components = URLComponents(url: url, resolvingAgainstBaseURL: false) else { return nil }
guard components.scheme == "damus" else { return nil }
let is_staging = components.find("staging") != nil
switch components.path {
case "purple:verify":
guard let checkout_id = components.find("id") else { return nil }
return .verify_npub(checkout_id: checkout_id)
self = .init(is_staging: is_staging, variant: .verify_npub(checkout_id: checkout_id))
case "purple:welcome":
guard let checkout_id = components.find("id") else { return nil }
return .welcome(checkout_id: checkout_id)
self = .init(is_staging: is_staging, variant: .welcome(checkout_id: checkout_id))
case "purple:landing":
return .landing
self = .init(is_staging: is_staging, variant: .landing)
default:
return nil
}
}
func url_string() -> String {
switch self {
case .verify_npub(let id):
return "damus:purple:verify?id=\(id)"
case .welcome(let id):
return "damus:purple:welcome?id=\(id)"
case .landing:
return "damus:purple:landing"
let staging = is_staging ? "&staging=true" : ""
switch self.variant {
case .verify_npub(let id):
return "damus:purple:verify?id=\(id)\(staging)"
case .welcome(let id):
return "damus:purple:welcome?id=\(id)\(staging)"
case .landing:
let staging = is_staging ? "?staging=true" : ""
return "damus:purple:landing\(staging)"
}
}
}
extension URLComponents {