1
1
import CoderSDK
2
2
import SwiftUI
3
+ import VPNLib
3
4
4
5
struct LoginForm : View {
5
6
@EnvironmentObject var state : AppState
@@ -78,6 +79,22 @@ struct LoginForm: View {
78
79
loginError = . failedAuth( error)
79
80
return
80
81
}
82
+ let buildInfo : BuildInfoResponse
83
+ do {
84
+ buildInfo = try await client. buildInfo ( )
85
+ } catch {
86
+ loginError = . failedAuth( error)
87
+ return
88
+ }
89
+ guard let semver = buildInfo. semver else {
90
+ loginError = . missingServerVersion
91
+ return
92
+ }
93
+ // x.compare(y) is .orderedDescending if x > y
94
+ guard SignatureValidator . minimumCoderVersion. compare ( semver, options: . numeric) != . orderedDescending else {
95
+ loginError = . outdatedCoderVersion
96
+ return
97
+ }
81
98
state. login ( baseAccessURL: url, sessionToken: sessionToken)
82
99
dismiss ( )
83
100
}
@@ -190,6 +207,8 @@ enum LoginError: Error {
190
207
case httpsRequired
191
208
case noHost
192
209
case invalidURL
210
+ case outdatedCoderVersion
211
+ case missingServerVersion
193
212
case failedAuth( ClientError )
194
213
195
214
var description : String {
@@ -200,8 +219,15 @@ enum LoginError: Error {
200
219
" URL must have a host "
201
220
case . invalidURL:
202
221
" Invalid URL "
222
+ case . outdatedCoderVersion:
223
+ """
224
+ The Coder deployment must be version \( SignatureValidator . minimumCoderVersion)
225
+ or higher to use Coder Desktop.
226
+ """
203
227
case let . failedAuth( err) :
204
228
" Could not authenticate with Coder deployment: \n \( err. localizedDescription) "
229
+ case . missingServerVersion:
230
+ " Coder deployment did not provide a server version "
205
231
}
206
232
}
207
233
0 commit comments