fix: fall back to TLS trust when cluster CA path is missing#317
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThis PR redesigns TLS trust resolution, OAuth discovery and token exchange, OpenShift API client construction, authentication strategy integration, and wizard connection execution. It also updates kubeconfig handling, selected timing conversions, UI trust prompts, and related tests. ChangesTLS, authentication, and wizard connection flow
Kubeconfig, timing, and repository support
Estimated code review effort: 5 (Critical) | ~120 minutes Sequence Diagram(s)sequenceDiagram
participant Wizard
participant TLSManager
participant OAuthDiscovery
participant AuthStrategy
participant ApiClientBuilder
Wizard->>TLSManager: createOpenShiftTlsContext(apiServerUrl)
TLSManager->>OAuthDiscovery: endpointBaseUrls()
OAuthDiscovery-->>TLSManager: OAuth endpoint URLs
TLSManager-->>Wizard: TlsContext
Wizard->>AuthStrategy: authenticate(tlsContext)
AuthStrategy->>ApiClientBuilder: build()
ApiClientBuilder-->>AuthStrategy: ApiClient
AuthStrategy-->>Wizard: authentication result
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
aaa5778 to
c0a8be0
Compare
615e1a3 to
ee48a19
Compare
There was a problem hiding this comment.
🧹 Nitpick comments (1)
src/main/kotlin/com/redhat/devtools/gateway/devworkspace/DevWorkspaces.kt (1)
271-293: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winUnused/swallowed exception in
waitPhaseChanges.
catch (e: Exception)bindsebut never logs/uses it before delaying and retrying, silently discarding potential diagnostic info (flagged by detekt). The siblingwaitPhaseusescatch (_: Exception)for the same pattern — align for consistency, or better, log at debug level like other catch blocks in this codebase.Proposed fix
val devWorkspace = try { DevWorkspaces(client).get(namespace, name) - } catch (e: Exception) { + } catch (e: Exception) { + thisLogger().debug("Failed to fetch devworkspace phase, retrying", e) delay(1000L) continue }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@src/main/kotlin/com/redhat/devtools/gateway/devworkspace/DevWorkspaces.kt` around lines 271 - 293, The waitPhaseChanges retry block in DevWorkspaces is swallowing an exception by binding it as e and never using it, so either change the catch to discard the exception like the sibling waitPhase method for consistency, or log the caught Exception at debug level before delaying and continuing. Keep the behavior of DevWorkspaces.waitPhaseChanges and its DevWorkspaces(client).get(namespace, name) polling loop the same, but avoid the unused exception binding flagged by detekt.Source: Linters/SAST tools
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@src/main/kotlin/com/redhat/devtools/gateway/devworkspace/DevWorkspaces.kt`:
- Around line 271-293: The waitPhaseChanges retry block in DevWorkspaces is
swallowing an exception by binding it as e and never using it, so either change
the catch to discard the exception like the sibling waitPhase method for
consistency, or log the caught Exception at debug level before delaying and
continuing. Keep the behavior of DevWorkspaces.waitPhaseChanges and its
DevWorkspaces(client).get(namespace, name) polling loop the same, but avoid the
unused exception binding flagged by detekt.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Enterprise
Run ID: 39e955cd-3899-4f08-af2a-1c543d3e294e
📒 Files selected for processing (63)
.gitignoresrc/main/kotlin/com/redhat/devtools/gateway/DevSpacesConnection.ktsrc/main/kotlin/com/redhat/devtools/gateway/DevSpacesConnectionProvider.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/code/HttpClientExtensions.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/code/OAuthDiscovery.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/code/OpenShiftAuthCodeFlow.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/code/RedHatAuthCodeFlow.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/sandbox/SandboxClusterAuthProvider.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/session/AbstractAuthSessionManager.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/DefaultTlsTrustManager.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/KubeConfigTlsUtils.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/SslContextFactory.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsContext.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsEndpointKind.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsServerCertificateInfo.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsTrustManager.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/TLSTrustDecisionHandler.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/TlsTrustDecisionDialog.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/UITlsDecisionAdapter.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/UiTlsDecisionAdapter.ktsrc/main/kotlin/com/redhat/devtools/gateway/devworkspace/DevWorkspaceRestart.ktsrc/main/kotlin/com/redhat/devtools/gateway/devworkspace/DevWorkspaces.ktsrc/main/kotlin/com/redhat/devtools/gateway/devworkspace/RestartDevWorkspaceAnnotationWatch.ktsrc/main/kotlin/com/redhat/devtools/gateway/kubeconfig/BlockStyleFilePersister.ktsrc/main/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigEntries.ktsrc/main/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigUtils.ktsrc/main/kotlin/com/redhat/devtools/gateway/openshift/DevWorkspacePods.ktsrc/main/kotlin/com/redhat/devtools/gateway/openshift/OpenShiftClientFactory.ktsrc/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/ApiClientUtils.ktsrc/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/BaseClientBuilder.ktsrc/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/ClientCertClientBuilder.ktsrc/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/LinkClientBuilder.ktsrc/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/TokenClientBuilder.ktsrc/main/kotlin/com/redhat/devtools/gateway/server/RemoteIDEServer.ktsrc/main/kotlin/com/redhat/devtools/gateway/util/ClipboardTokenMonitor.ktsrc/main/kotlin/com/redhat/devtools/gateway/util/ExceptionUtils.ktsrc/main/kotlin/com/redhat/devtools/gateway/util/ProgressCountdown.ktsrc/main/kotlin/com/redhat/devtools/gateway/util/UrlUtils.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/DevSpacesWizardView.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/SelectClusterDialog.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/DevSpacesServerStepView.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/DevSpacesWizardStep.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/WizardAsyncWork.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/AbstractAuthenticationStrategy.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/AuthenticationStrategy.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/ClientCertificateAuthenticationStrategy.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/OpenShiftCredentialsAuthenticationStrategy.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/OpenShiftOAuthAuthenticationStrategy.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/RedHatSSOAuthenticationStrategy.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/TokenAuthenticationStrategy.ktsrc/test/kotlin/com/redhat/devtools/gateway/auth/code/OAuthDiscoveryTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/auth/code/OpenShiftAuthCodeFlowTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/auth/tls/DefaultTlsTrustManagerCaTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/auth/tls/DefaultTlsTrustManagerTrustTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/auth/tls/KubeConfigTlsUtilsTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/auth/tls/TlsTestCertificates.ktsrc/test/kotlin/com/redhat/devtools/gateway/auth/tls/TlsTrustManagerTestFixtures.ktsrc/test/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigClusterTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigNamedClusterTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigTestHelpers.ktsrc/test/kotlin/com/redhat/devtools/gateway/openshift/ApiClientUtilsTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/openshift/OpenShiftClientBuilderTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/util/ExceptionUtilsTest.kt
💤 Files with no reviewable changes (4)
- src/test/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigTestHelpers.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/TLSTrustDecisionHandler.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/UiTlsDecisionAdapter.kt
- src/main/kotlin/com/redhat/devtools/gateway/openshift/OpenShiftClientFactory.kt
✅ Files skipped from review due to trivial changes (3)
- src/main/kotlin/com/redhat/devtools/gateway/devworkspace/RestartDevWorkspaceAnnotationWatch.kt
- src/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/ApiClientUtils.kt
- .gitignore
🚧 Files skipped from review as they are similar to previous changes (47)
- src/test/kotlin/com/redhat/devtools/gateway/auth/tls/DefaultTlsTrustManagerCaTest.kt
- src/test/kotlin/com/redhat/devtools/gateway/auth/tls/TlsTestCertificates.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsEndpointKind.kt
- src/test/kotlin/com/redhat/devtools/gateway/openshift/ApiClientUtilsTest.kt
- src/test/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigNamedClusterTest.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsServerCertificateInfo.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/UITlsDecisionAdapter.kt
- src/test/kotlin/com/redhat/devtools/gateway/auth/tls/KubeConfigTlsUtilsTest.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/TlsTrustDecisionDialog.kt
- src/main/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigUtils.kt
- src/main/kotlin/com/redhat/devtools/gateway/kubeconfig/BlockStyleFilePersister.kt
- src/main/kotlin/com/redhat/devtools/gateway/util/ExceptionUtils.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/code/OAuthDiscovery.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/WizardAsyncWork.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/DevSpacesWizardStep.kt
- src/test/kotlin/com/redhat/devtools/gateway/util/ExceptionUtilsTest.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/sandbox/SandboxClusterAuthProvider.kt
- src/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/BaseClientBuilder.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/RedHatSSOAuthenticationStrategy.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsTrustManager.kt
- src/test/kotlin/com/redhat/devtools/gateway/auth/code/OpenShiftAuthCodeFlowTest.kt
- src/main/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigEntries.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/OpenShiftOAuthAuthenticationStrategy.kt
- src/main/kotlin/com/redhat/devtools/gateway/util/UrlUtils.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/code/HttpClientExtensions.kt
- src/test/kotlin/com/redhat/devtools/gateway/auth/code/OAuthDiscoveryTest.kt
- src/test/kotlin/com/redhat/devtools/gateway/auth/tls/DefaultTlsTrustManagerTrustTest.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsContext.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/ClientCertificateAuthenticationStrategy.kt
- src/main/kotlin/com/redhat/devtools/gateway/DevSpacesConnectionProvider.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/TokenAuthenticationStrategy.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/KubeConfigTlsUtils.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/SslContextFactory.kt
- src/test/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigClusterTest.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/AuthenticationStrategy.kt
- src/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/LinkClientBuilder.kt
- src/test/kotlin/com/redhat/devtools/gateway/auth/tls/TlsTrustManagerTestFixtures.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/SelectClusterDialog.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/OpenShiftCredentialsAuthenticationStrategy.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/code/RedHatAuthCodeFlow.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/DevSpacesWizardView.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/code/OpenShiftAuthCodeFlow.kt
- src/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/TokenClientBuilder.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/AbstractAuthenticationStrategy.kt
- src/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/ClientCertClientBuilder.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/DefaultTlsTrustManager.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/DevSpacesServerStepView.kt
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@src/main/kotlin/com/redhat/devtools/gateway/devworkspace/DevWorkspaces.kt`:
- Around line 289-294: The waitPhaseChanges loop in DevWorkspaces is swallowing
every exception, unlike waitPhase, which only retries retryable ApiException
cases. Update the catch around DevWorkspaces(client).get(namespace, name) to
mirror waitPhase’s selective retry logic: catch ApiException, retry only when
isRetryable() is true, and rethrow all other exceptions instead of delaying and
continuing. Keep the behavior aligned with waitPhase so non-retryable failures
surface immediately.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Enterprise
Run ID: 1b4ef047-d2d4-4062-be83-fd67f264d0ab
📒 Files selected for processing (63)
.gitignoresrc/main/kotlin/com/redhat/devtools/gateway/DevSpacesConnection.ktsrc/main/kotlin/com/redhat/devtools/gateway/DevSpacesConnectionProvider.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/code/HttpClientExtensions.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/code/OAuthDiscovery.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/code/OpenShiftAuthCodeFlow.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/code/RedHatAuthCodeFlow.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/sandbox/SandboxClusterAuthProvider.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/session/AbstractAuthSessionManager.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/DefaultTlsTrustManager.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/KubeConfigTlsUtils.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/SslContextFactory.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsContext.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsEndpointKind.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsServerCertificateInfo.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsTrustManager.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/TLSTrustDecisionHandler.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/TlsTrustDecisionDialog.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/UITlsDecisionAdapter.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/UiTlsDecisionAdapter.ktsrc/main/kotlin/com/redhat/devtools/gateway/devworkspace/DevWorkspaceRestart.ktsrc/main/kotlin/com/redhat/devtools/gateway/devworkspace/DevWorkspaces.ktsrc/main/kotlin/com/redhat/devtools/gateway/devworkspace/RestartDevWorkspaceAnnotationWatch.ktsrc/main/kotlin/com/redhat/devtools/gateway/kubeconfig/BlockStyleFilePersister.ktsrc/main/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigEntries.ktsrc/main/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigUtils.ktsrc/main/kotlin/com/redhat/devtools/gateway/openshift/DevWorkspacePods.ktsrc/main/kotlin/com/redhat/devtools/gateway/openshift/OpenShiftClientFactory.ktsrc/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/ApiClientUtils.ktsrc/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/BaseClientBuilder.ktsrc/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/ClientCertClientBuilder.ktsrc/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/LinkClientBuilder.ktsrc/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/TokenClientBuilder.ktsrc/main/kotlin/com/redhat/devtools/gateway/server/RemoteIDEServer.ktsrc/main/kotlin/com/redhat/devtools/gateway/util/ClipboardTokenMonitor.ktsrc/main/kotlin/com/redhat/devtools/gateway/util/ExceptionUtils.ktsrc/main/kotlin/com/redhat/devtools/gateway/util/ProgressCountdown.ktsrc/main/kotlin/com/redhat/devtools/gateway/util/UrlUtils.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/DevSpacesWizardView.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/SelectClusterDialog.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/DevSpacesServerStepView.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/DevSpacesWizardStep.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/WizardAsyncWork.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/AbstractAuthenticationStrategy.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/AuthenticationStrategy.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/ClientCertificateAuthenticationStrategy.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/OpenShiftCredentialsAuthenticationStrategy.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/OpenShiftOAuthAuthenticationStrategy.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/RedHatSSOAuthenticationStrategy.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/TokenAuthenticationStrategy.ktsrc/test/kotlin/com/redhat/devtools/gateway/auth/code/OAuthDiscoveryTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/auth/code/OpenShiftAuthCodeFlowTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/auth/tls/DefaultTlsTrustManagerCaTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/auth/tls/DefaultTlsTrustManagerTrustTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/auth/tls/KubeConfigTlsUtilsTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/auth/tls/TlsTestCertificates.ktsrc/test/kotlin/com/redhat/devtools/gateway/auth/tls/TlsTrustManagerTestFixtures.ktsrc/test/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigClusterTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigNamedClusterTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigTestHelpers.ktsrc/test/kotlin/com/redhat/devtools/gateway/openshift/ApiClientUtilsTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/openshift/OpenShiftClientBuilderTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/util/ExceptionUtilsTest.kt
💤 Files with no reviewable changes (4)
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/UiTlsDecisionAdapter.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/TLSTrustDecisionHandler.kt
- src/test/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigTestHelpers.kt
- src/main/kotlin/com/redhat/devtools/gateway/openshift/OpenShiftClientFactory.kt
✅ Files skipped from review due to trivial changes (2)
- .gitignore
- src/test/kotlin/com/redhat/devtools/gateway/openshift/ApiClientUtilsTest.kt
🚧 Files skipped from review as they are similar to previous changes (55)
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsEndpointKind.kt
- src/main/kotlin/com/redhat/devtools/gateway/kubeconfig/BlockStyleFilePersister.kt
- src/test/kotlin/com/redhat/devtools/gateway/auth/tls/DefaultTlsTrustManagerCaTest.kt
- src/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/LinkClientBuilder.kt
- src/test/kotlin/com/redhat/devtools/gateway/util/ExceptionUtilsTest.kt
- src/test/kotlin/com/redhat/devtools/gateway/auth/tls/TlsTestCertificates.kt
- src/test/kotlin/com/redhat/devtools/gateway/auth/tls/KubeConfigTlsUtilsTest.kt
- src/test/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigNamedClusterTest.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsServerCertificateInfo.kt
- src/main/kotlin/com/redhat/devtools/gateway/util/ExceptionUtils.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/session/AbstractAuthSessionManager.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/ClientCertificateAuthenticationStrategy.kt
- src/main/kotlin/com/redhat/devtools/gateway/openshift/DevWorkspacePods.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/code/HttpClientExtensions.kt
- src/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/TokenClientBuilder.kt
- src/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/ClientCertClientBuilder.kt
- src/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/ApiClientUtils.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsContext.kt
- src/main/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigEntries.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/code/OAuthDiscovery.kt
- src/main/kotlin/com/redhat/devtools/gateway/DevSpacesConnectionProvider.kt
- src/main/kotlin/com/redhat/devtools/gateway/util/ProgressCountdown.kt
- src/test/kotlin/com/redhat/devtools/gateway/auth/code/OpenShiftAuthCodeFlowTest.kt
- src/main/kotlin/com/redhat/devtools/gateway/devworkspace/RestartDevWorkspaceAnnotationWatch.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/sandbox/SandboxClusterAuthProvider.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/code/RedHatAuthCodeFlow.kt
- src/test/kotlin/com/redhat/devtools/gateway/auth/code/OAuthDiscoveryTest.kt
- src/test/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigClusterTest.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/OpenShiftOAuthAuthenticationStrategy.kt
- src/main/kotlin/com/redhat/devtools/gateway/DevSpacesConnection.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/DevSpacesWizardStep.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/SslContextFactory.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsTrustManager.kt
- src/main/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigUtils.kt
- src/main/kotlin/com/redhat/devtools/gateway/util/UrlUtils.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/TlsTrustDecisionDialog.kt
- src/main/kotlin/com/redhat/devtools/gateway/util/ClipboardTokenMonitor.kt
- src/test/kotlin/com/redhat/devtools/gateway/auth/tls/TlsTrustManagerTestFixtures.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/RedHatSSOAuthenticationStrategy.kt
- src/main/kotlin/com/redhat/devtools/gateway/server/RemoteIDEServer.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/OpenShiftCredentialsAuthenticationStrategy.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/SelectClusterDialog.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/WizardAsyncWork.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/AuthenticationStrategy.kt
- src/test/kotlin/com/redhat/devtools/gateway/auth/tls/DefaultTlsTrustManagerTrustTest.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/KubeConfigTlsUtils.kt
- src/main/kotlin/com/redhat/devtools/gateway/devworkspace/DevWorkspaceRestart.kt
- src/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/BaseClientBuilder.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/UITlsDecisionAdapter.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/code/OpenShiftAuthCodeFlow.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/DevSpacesWizardView.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/AbstractAuthenticationStrategy.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/TokenAuthenticationStrategy.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/DevSpacesServerStepView.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/DefaultTlsTrustManager.kt
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@src/test/kotlin/com/redhat/devtools/gateway/openshift/OpenShiftClientBuilderTest.kt`:
- Around line 111-119: Update both fallback tests for LinkClientBuilder,
including `LinkClientBuilder falls back when no kubeconfig files exist`, to
assert the result of `build()` rather than discarding `runCatching`. Verify the
expected successful client properties, such as `basePath`, or replace
`runCatching` with `assertThatThrownBy` and assert the specific expected
exception type when failure is intended, while retaining the existing
interaction verifications.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Enterprise
Run ID: 69430ff4-bb12-41ed-903a-18706fabd7a8
📒 Files selected for processing (55)
.gitignoresrc/main/kotlin/com/redhat/devtools/gateway/DevSpacesConnectionProvider.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/code/HttpClientExtensions.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/code/OAuthDiscovery.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/code/OpenShiftAuthCodeFlow.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/code/RedHatAuthCodeFlow.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/sandbox/SandboxClusterAuthProvider.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/DefaultTlsTrustManager.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/KubeConfigTlsUtils.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/SslContextFactory.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsContext.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsEndpointKind.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsServerCertificateInfo.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsTrustManager.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/TLSTrustDecisionHandler.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/TlsTrustDecisionDialog.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/UITlsDecisionAdapter.ktsrc/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/UiTlsDecisionAdapter.ktsrc/main/kotlin/com/redhat/devtools/gateway/kubeconfig/BlockStyleFilePersister.ktsrc/main/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigEntries.ktsrc/main/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigUtils.ktsrc/main/kotlin/com/redhat/devtools/gateway/openshift/DevWorkspacePods.ktsrc/main/kotlin/com/redhat/devtools/gateway/openshift/OpenShiftClientFactory.ktsrc/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/ApiClientUtils.ktsrc/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/BaseClientBuilder.ktsrc/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/ClientCertClientBuilder.ktsrc/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/LinkClientBuilder.ktsrc/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/TokenClientBuilder.ktsrc/main/kotlin/com/redhat/devtools/gateway/util/ExceptionUtils.ktsrc/main/kotlin/com/redhat/devtools/gateway/util/UrlUtils.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/DevSpacesWizardView.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/SelectClusterDialog.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/DevSpacesServerStepView.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/DevSpacesWizardStep.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/WizardAsyncWork.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/AbstractAuthenticationStrategy.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/AuthenticationStrategy.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/ClientCertificateAuthenticationStrategy.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/OpenShiftCredentialsAuthenticationStrategy.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/OpenShiftOAuthAuthenticationStrategy.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/RedHatSSOAuthenticationStrategy.ktsrc/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/TokenAuthenticationStrategy.ktsrc/test/kotlin/com/redhat/devtools/gateway/auth/code/OAuthDiscoveryTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/auth/code/OpenShiftAuthCodeFlowTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/auth/tls/DefaultTlsTrustManagerCaTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/auth/tls/DefaultTlsTrustManagerTrustTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/auth/tls/KubeConfigTlsUtilsTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/auth/tls/TlsTestCertificates.ktsrc/test/kotlin/com/redhat/devtools/gateway/auth/tls/TlsTrustManagerTestFixtures.ktsrc/test/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigClusterTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigNamedClusterTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigTestHelpers.ktsrc/test/kotlin/com/redhat/devtools/gateway/openshift/ApiClientUtilsTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/openshift/OpenShiftClientBuilderTest.ktsrc/test/kotlin/com/redhat/devtools/gateway/util/ExceptionUtilsTest.kt
💤 Files with no reviewable changes (4)
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/UiTlsDecisionAdapter.kt
- src/test/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigTestHelpers.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/TLSTrustDecisionHandler.kt
- src/main/kotlin/com/redhat/devtools/gateway/openshift/OpenShiftClientFactory.kt
✅ Files skipped from review due to trivial changes (3)
- src/test/kotlin/com/redhat/devtools/gateway/openshift/ApiClientUtilsTest.kt
- .gitignore
- src/test/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigNamedClusterTest.kt
🚧 Files skipped from review as they are similar to previous changes (47)
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsEndpointKind.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/UITlsDecisionAdapter.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/AuthenticationStrategy.kt
- src/test/kotlin/com/redhat/devtools/gateway/util/ExceptionUtilsTest.kt
- src/main/kotlin/com/redhat/devtools/gateway/kubeconfig/BlockStyleFilePersister.kt
- src/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/LinkClientBuilder.kt
- src/main/kotlin/com/redhat/devtools/gateway/util/ExceptionUtils.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsServerCertificateInfo.kt
- src/test/kotlin/com/redhat/devtools/gateway/auth/tls/DefaultTlsTrustManagerCaTest.kt
- src/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/ApiClientUtils.kt
- src/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/TokenClientBuilder.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/code/OAuthDiscovery.kt
- src/test/kotlin/com/redhat/devtools/gateway/auth/tls/TlsTestCertificates.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/SslContextFactory.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsTrustManager.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/ui/TlsTrustDecisionDialog.kt
- src/main/kotlin/com/redhat/devtools/gateway/DevSpacesConnectionProvider.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/TokenAuthenticationStrategy.kt
- src/test/kotlin/com/redhat/devtools/gateway/auth/tls/KubeConfigTlsUtilsTest.kt
- src/test/kotlin/com/redhat/devtools/gateway/auth/code/OAuthDiscoveryTest.kt
- src/test/kotlin/com/redhat/devtools/gateway/auth/code/OpenShiftAuthCodeFlowTest.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/OpenShiftOAuthAuthenticationStrategy.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/SelectClusterDialog.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/code/HttpClientExtensions.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/TlsContext.kt
- src/main/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigUtils.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/DevSpacesWizardStep.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/WizardAsyncWork.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/sandbox/SandboxClusterAuthProvider.kt
- src/main/kotlin/com/redhat/devtools/gateway/openshift/DevWorkspacePods.kt
- src/test/kotlin/com/redhat/devtools/gateway/auth/tls/TlsTrustManagerTestFixtures.kt
- src/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/ClientCertClientBuilder.kt
- src/main/kotlin/com/redhat/devtools/gateway/openshift/apiclient/BaseClientBuilder.kt
- src/main/kotlin/com/redhat/devtools/gateway/util/UrlUtils.kt
- src/test/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigClusterTest.kt
- src/main/kotlin/com/redhat/devtools/gateway/kubeconfig/KubeConfigEntries.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/code/RedHatAuthCodeFlow.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/OpenShiftCredentialsAuthenticationStrategy.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/AbstractAuthenticationStrategy.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/ClientCertificateAuthenticationStrategy.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/DevSpacesWizardView.kt
- src/test/kotlin/com/redhat/devtools/gateway/auth/tls/DefaultTlsTrustManagerTrustTest.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/KubeConfigTlsUtils.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/auth/RedHatSSOAuthenticationStrategy.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/code/OpenShiftAuthCodeFlow.kt
- src/main/kotlin/com/redhat/devtools/gateway/auth/tls/DefaultTlsTrustManager.kt
- src/main/kotlin/com/redhat/devtools/gateway/view/steps/DevSpacesServerStepView.kt
1672c8d to
faa157f
Compare
9d1fdfe to
dc022db
Compare
Add the missing import for ApiClientUtils, remove unused imports, and suppress warnings in DevWorkspacePodsTest.
53c8178 to
80ae047
Compare
|
@azatsarynnyy, @vrubezhny, @msivasubramaniaan: How to test: Steps:
Result: |
vrubezhny
left a comment
There was a problem hiding this comment.
Looks good to me. And works fine with the airgap-cluster. Thanks!
…rust dialogs (crw-11253) - fix: skip unreadable kubeconfig CA paths during TLS setup - fix: build token API client from wizard TLS context - refactor: client factory -> builder - refactor: removed duplicate http request codes - refactor: extracted #getTrustedCerts for better readable code - refactor: move cluster-by-server lookup to KubeConfigUtils - fix: wire wizard CA field into TLS trust resolution - fix: show sequential TLS trust dialogs during OpenShift connect - refactor: extracted OAuthDiscovery for better readable OpenShiftAuthCodeFlow class - fix: insecure-skip-tls-verify is honoured by OAuth strategy - fix: improve TLS trust dialog UI — clickable URL, text wrapping, certificate display - fix: avoid deadlock when displaying trust dialog - refactor: symmetrize OpenShift TLS trust establishment - refactor: extracted apiclient builders to own files and package - fix: TokenClientBuilder is using ssl trust - refactor: address review complaints Signed-off-by: Andre Dietisheim <adietish@redhat.com> Co-authored-by: Cursor <cursoragent@cursor.com>
Composite JVM default CAs with custom trusted certificates when building TLS contexts so merged OpenShift/OAuth trust retains public CA coverage. Author: Cristian SFERCOCI Co-authored-by: Cursor <cursoragent@cursor.com>
Use SelfSubjectAccessReview instead of listing namespaces to check authentication, avoiding broader permissions during OAuth validation. Author: Cristian SFERCOCI Co-authored-by: Cursor <cursoragent@cursor.com>
Complete immediately when the thin client is already running before listeners attach, and fail with a timeout if IDE readiness never arrives. Author: Cristian SFERCOCI Co-authored-by: Cursor <cursoragent@cursor.com>
Update ProjectsTest for SelfSubjectAccessReview auth validation and adjust mergeTrustedContext assertions for composite JVM plus custom trust. Co-authored-by: Cursor <cursoragent@cursor.com>
fixes eclipse-che/che#23878