11import CoderSDK
22import SwiftUI
3+ import VPNLib
34
45struct LoginForm : View {
56 @EnvironmentObject var state : AppState
@@ -78,6 +79,22 @@ struct LoginForm: View {
7879 loginError = . failedAuth( error)
7980 return
8081 }
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+ }
8198 state. login ( baseAccessURL: url, sessionToken: sessionToken)
8299 dismiss ( )
83100 }
@@ -190,6 +207,8 @@ enum LoginError: Error {
190207 case httpsRequired
191208 case noHost
192209 case invalidURL
210+ case outdatedCoderVersion
211+ case missingServerVersion
193212 case failedAuth( ClientError )
194213
195214 var description : String {
@@ -200,8 +219,15 @@ enum LoginError: Error {
200219 " URL must have a host "
201220 case . invalidURL:
202221 " Invalid URL "
222+ case . outdatedCoderVersion:
223+ """
224+ The Coder deployment must be version \( SignatureValidator . minimumCoderVersion)
225+ or higher to use Coder Desktop.
226+ """
203227 case let . failedAuth( err) :
204228 " Could not authenticate with Coder deployment: \n \( err. localizedDescription) "
229+ case . missingServerVersion:
230+ " Coder deployment did not provide a server version "
205231 }
206232 }
207233
0 commit comments