aboutsummaryrefslogtreecommitdiff
path: root/Hotline/Models/Server.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Hotline/Models/Server.swift')
-rw-r--r--Hotline/Models/Server.swift33
1 files changed, 29 insertions, 4 deletions
diff --git a/Hotline/Models/Server.swift b/Hotline/Models/Server.swift
index 62c6867..27d45c6 100644
--- a/Hotline/Models/Server.swift
+++ b/Hotline/Models/Server.swift
@@ -4,22 +4,47 @@ struct Server: Codable {
var name: String?
var description: String?
var users: Int
+
var address: String
var port: Int
+ var login: String
+ var password: String
- init(name: String?, description: String?, address: String, port: Int = HotlinePorts.DefaultServerPort, users: Int = 0) {
+ init(name: String?, description: String?, address: String, port: Int = HotlinePorts.DefaultServerPort, users: Int = 0, login: String = "", password: String = "") {
self.name = name
self.description = description
self.address = address.lowercased()
self.port = port
self.users = users
+ self.login = login
+ self.password = password
+ }
+
+ init?(url: URL) {
+ guard url.scheme?.lowercased() == "hotline" else {
+ return nil
+ }
+
+ guard let host = url.host(percentEncoded: false) else {
+ return nil
+ }
+
+ self.name = nil
+ self.description = nil
+ self.users = 0
+
+ self.address = host.lowercased()
+ self.port = url.port ?? HotlinePorts.DefaultServerPort
+
+ self.login = url.user(percentEncoded: false) ?? ""
+ self.password = url.password(percentEncoded: false) ?? ""
}
static func parseServerAddressAndPort(_ address: String) -> (String, Int) {
let url = URL(string: "hotline://\(address)")
let port = url?.port ?? HotlinePorts.DefaultServerPort
- let host = url?.host(percentEncoded: false) ?? address
- return (host, port)
+ let host = url?.host(percentEncoded: false) ?? ""
+ return (host.lowercased().trimmingCharacters(in: .whitespacesAndNewlines), port)
}
}
@@ -29,7 +54,7 @@ extension Server: Identifiable {
extension Server: Equatable {
static func == (lhs: Server, rhs: Server) -> Bool {
- return (lhs.address == rhs.address) && (lhs.port == rhs.port)
+ return (lhs.address == rhs.address) && (lhs.port == rhs.port) && (lhs.login == rhs.login) && (lhs.password == rhs.password)
}
}