File tree 1 file changed +30
-5
lines changed
Coder Desktop/Coder Desktop/Views
1 file changed +30
-5
lines changed Original file line number Diff line number Diff line change @@ -63,8 +63,11 @@ struct LoginForm<S: Session>: View {
63
63
guard sessionToken != " " else {
64
64
return
65
65
}
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
68
71
return
69
72
}
70
73
loading = true
@@ -152,8 +155,10 @@ struct LoginForm<S: Session>: View {
152
155
guard baseAccessURL != " " else {
153
156
return
154
157
}
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
157
162
return
158
163
}
159
164
withAnimation {
@@ -170,12 +175,32 @@ struct LoginForm<S: Session>: View {
170
175
}
171
176
}
172
177
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
174
195
case invalidURL
175
196
case failedAuth( ClientError )
176
197
177
198
var description : String {
178
199
switch self {
200
+ case . httpsRequired:
201
+ " URL must use HTTPS "
202
+ case . noHost:
203
+ " URL must have a host "
179
204
case . invalidURL:
180
205
" Invalid URL "
181
206
case let . failedAuth( err) :
You can’t perform that action at this time.
0 commit comments