@@ -80,6 +80,8 @@ class CoderRemoteProvider(
8080 )
8181 )
8282
83+ private val errorBuffer = mutableListOf<Throwable >()
84+
8385 /* *
8486 * With the provided client, start polling for workspaces. Every time a new
8587 * workspace is added, reconfigure SSH using the provided cli (including the
@@ -162,13 +164,12 @@ class CoderRemoteProvider(
162164 if (elapsed > POLL_INTERVAL * 2 ) {
163165 context.logger.info(" wake-up from an OS sleep was detected" )
164166 } else {
165- context.logger.error(ex, " workspace polling error encountered, trying to auto-login " )
167+ context.logger.error(ex, " workspace polling error encountered" )
166168 if (ex is APIResponseException && ex.isTokenExpired) {
167169 WorkspaceConnectionManager .shouldEstablishWorkspaceConnections = true
168170 close()
169- // force auto-login
170- firstRun = true
171171 context.envPageManager.showPluginEnvironmentsPage()
172+ errorBuffer.add(ex)
172173 break
173174 }
174175 }
@@ -194,9 +195,6 @@ class CoderRemoteProvider(
194195 * first page.
195196 */
196197 private fun logout () {
197- // Keep the URL and token to make it easy to log back in, but set
198- // rememberMe to false so we do not try to automatically log in.
199- context.secrets.rememberMe = false
200198 WorkspaceConnectionManager .reset()
201199 close()
202200 }
@@ -358,22 +356,17 @@ class CoderRemoteProvider(
358356 override fun getOverrideUiPage (): UiPage ? {
359357 // Show the setup page if we have not configured the client yet.
360358 if (client == null ) {
361- val errorBuffer = mutableListOf<Throwable >()
362359 // When coming back to the application, initializeSession immediately.
363- val autoSetup = shouldDoAutoSetup()
364- context.secrets.lastToken.let { lastToken ->
365- context.secrets.lastDeploymentURL.let { lastDeploymentURL ->
366- if (autoSetup && lastDeploymentURL.isNotBlank() && (lastToken.isNotBlank() || ! settings.requireTokenAuth)) {
367- try {
368- CoderCliSetupWizardState .goToStep(WizardStep .CONNECT )
369- return CoderCliSetupWizardPage (context, settingsPage, visibilityState, true , ::onConnect)
370- } catch (ex: Exception ) {
371- errorBuffer.add(ex)
372- }
373- }
360+ if (shouldDoAutoSetup()) {
361+ try {
362+ CoderCliSetupWizardState .goToStep(WizardStep .CONNECT )
363+ return CoderCliSetupWizardPage (context, settingsPage, visibilityState, true , ::onConnect)
364+ } catch (ex: Exception ) {
365+ errorBuffer.add(ex)
366+ } finally {
367+ firstRun = false
374368 }
375369 }
376- firstRun = false
377370
378371 // Login flow.
379372 val setupWizardPage =
@@ -382,21 +375,24 @@ class CoderRemoteProvider(
382375 errorBuffer.forEach {
383376 setupWizardPage.notify(" Error encountered" , it)
384377 }
378+ errorBuffer.clear()
385379 // and now reset the errors, otherwise we show it every time on the screen
386380 return setupWizardPage
387381 }
388382 return null
389383 }
390384
391- private fun shouldDoAutoSetup (): Boolean = firstRun && context.secrets.rememberMe == true
385+ /* *
386+ * Auto-login only on first the firs run if there is a url & token configured or the auth
387+ * should be done via certificates.
388+ */
389+ private fun shouldDoAutoSetup (): Boolean = firstRun && (context.secrets.canAutoLogin || ! settings.requireTokenAuth)
392390
393391 private fun onConnect (client : CoderRestClient , cli : CoderCLIManager ) {
394392 // Store the URL and token for use next time.
395393 context.secrets.lastDeploymentURL = client.url.toString()
396394 context.secrets.lastToken = client.token ? : " "
397395 context.secrets.storeTokenFor(client.url, context.secrets.lastToken)
398- // Currently we always remember, but this could be made an option.
399- context.secrets.rememberMe = true
400396 this .client = client
401397 pollJob?.cancel()
402398 environments.showLoadingMessage()
0 commit comments