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)
7980return
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. semverelse {
90+ loginError= . missingServerVersion
91+ return
92+ }
93+ // x.compare(y) is .orderedDescending if x > y
94+ guard SignatureValidator . minimumCoderVersion. compare ( semver, options: . numeric) != . orderedDescendingelse {
95+ loginError= . outdatedCoderVersion
96+ return
97+ }
8198 state. login ( baseAccessURL: url, sessionToken: sessionToken)
8299dismiss ( )
83100}
@@ -190,6 +207,8 @@ enum LoginError: Error {
190207case httpsRequired
191208case noHost
192209case invalidURL
210+ case outdatedCoderVersion
211+ case missingServerVersion
193212case failedAuth( ClientError )
194213
195214var description : String {
@@ -200,8 +219,15 @@ enum LoginError: Error {
200219" URL must have a host "
201220case . 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+ """
203227case 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