Skip to content

Commit 393d240

Browse files
fix: validate server URL has a host (#57)
1 parent 84d6ad3 commit 393d240

File tree

1 file changed

+30
-5
lines changed

1 file changed

+30
-5
lines changed

Coder Desktop/Coder Desktop/Views/LoginForm.swift

+30-5
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,11 @@ struct LoginForm<S: Session>: View {
6363
guard sessionToken != "" else {
6464
return
6565
}
66-
guard let url = URL(string: baseAccessURL), url.scheme == "https" else {
67-
loginError = .invalidURL
66+
let url: URL
67+
do {
68+
url = try validateURL(baseAccessURL)
69+
} catch {
70+
loginError = error
6871
return
6972
}
7073
loading = true
@@ -152,8 +155,10 @@ struct LoginForm<S: Session>: View {
152155
guard baseAccessURL != "" else {
153156
return
154157
}
155-
guard let url = URL(string: baseAccessURL), url.scheme == "https" else {
156-
loginError = .invalidURL
158+
do {
159+
try validateURL(baseAccessURL)
160+
} catch {
161+
loginError = error
157162
return
158163
}
159164
withAnimation {
@@ -170,12 +175,32 @@ struct LoginForm<S: Session>: View {
170175
}
171176
}
172177

173-
enum LoginError {
178+
@discardableResult
179+
func validateURL(_ url: String) throws(LoginError) -> URL {
180+
guard let url = URL(string: url) else {
181+
throw LoginError.invalidURL
182+
}
183+
guard url.scheme == "https" else {
184+
throw LoginError.httpsRequired
185+
}
186+
guard url.host != nil else {
187+
throw LoginError.noHost
188+
}
189+
return url
190+
}
191+
192+
enum LoginError: Error {
193+
case httpsRequired
194+
case noHost
174195
case invalidURL
175196
case failedAuth(ClientError)
176197

177198
var description: String {
178199
switch self {
200+
case .httpsRequired:
201+
"URL must use HTTPS"
202+
case .noHost:
203+
"URL must have a host"
179204
case .invalidURL:
180205
"Invalid URL"
181206
case let .failedAuth(err):

0 commit comments

Comments
 (0)