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

Lines changed: 30 additions & 5 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy