-
Notifications
You must be signed in to change notification settings - Fork 0
Ensure SSL_CERT_DIR messages are always shown and check for existing value #14
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: coderabbit_combined_20260121_qodo_grep_cursor_copilot_base_ensure_ssl_cert_dir_messages_are_always_shown_and_check_for_existing_value_pr82
Are you sure you want to change the base?
Ensure SSL_CERT_DIR messages are always shown and check for existing value #14
Conversation
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
WalkthroughThe changes enhance certificate generation and environment variable handling for OpenSSL-based certificate management. New event methods are added to report configuration status, SSL_CERT_DIR environment variable validation logic is implemented, an internal class structure is refactored, and event listener initialization is restructured for consistent reporting. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Poem
🚥 Pre-merge checks | ✅ 1 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (1 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🤖 Fix all issues with AI agents
In `@src/Shared/CertificateGeneration/UnixCertificateManager.cs`:
- Around line 362-382: The path comparison is using the display variable
prettyCertDir (which may contain the literal "$HOME") so Path.GetFullPath(...)
yields a wrong string; change the code in the SSL_CERT_DIR membership check to
use the real/expanded certificate directory variable (e.g., certDir or whatever
holds the actual expanded path) instead of prettyCertDir — compute
certDirFullPath = Path.GetFullPath(certDir) and use that in the Any(...)
comparison and string.Equals call, leaving the existing try/catch and whitespace
checks intact.
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
src/Shared/CertificateGeneration/CertificateManager.cssrc/Shared/CertificateGeneration/UnixCertificateManager.cssrc/Tools/dotnet-dev-certs/src/Program.cs
🧰 Additional context used
🧬 Code graph analysis (1)
src/Tools/dotnet-dev-certs/src/Program.cs (2)
src/Shared/CommandLineUtils/CommandLine/CommandOption.cs (1)
HasValue(93-96)src/Shared/CertificateGeneration/CertificateManager.cs (4)
CertificateManager(21-1356)CertificateManager(92-94)CertificateManager(97-100)CertificateManager(103-108)
🔇 Additional comments (4)
src/Tools/dotnet-dev-certs/src/Program.cs (1)
127-135: LGTM! Event listener restructuring ensures critical messages are always displayed.The unconditional listener creation with level-based filtering correctly ensures that
EventLevel.LogAlwaysevents (like SSL_CERT_DIR configuration guidance) are always shown to users, while verbose-level diagnostics remain opt-in.src/Shared/CertificateGeneration/UnixCertificateManager.cs (1)
994-1007: LGTM!Clean refactor of
NssDbto an explicit class with proper encapsulation. No behavioral change.src/Shared/CertificateGeneration/CertificateManager.cs (2)
1302-1305: LGTM!Message now correctly uses the dynamic
envVarNameparameter for consistency with the method signature and other similar events.
1313-1320: LGTM! New events properly support SSL_CERT_DIR validation flow.
- Event 113 at
Verboselevel is appropriate for the informational "already configured" case- Event 114 at
LogAlwaysensures users are always notified when they need to append to an existingSSL_CERT_DIRThe message format for Event 114 correctly suggests prepending the new directory:
export SSL_CERT_DIR="/path:$SSL_CERT_DIR".
✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.
| if (!string.IsNullOrEmpty(existingSslCertDir)) | ||
| { | ||
| var existingDirs = existingSslCertDir.Split(Path.PathSeparator); | ||
| var certDirFullPath = Path.GetFullPath(prettyCertDir); | ||
| var isCertDirIncluded = existingDirs.Any(dir => | ||
| { | ||
| if (string.IsNullOrWhiteSpace(dir)) | ||
| { | ||
| return false; | ||
| } | ||
|
|
||
| try | ||
| { | ||
| return string.Equals(Path.GetFullPath(dir), certDirFullPath, StringComparison.OrdinalIgnoreCase); | ||
| } | ||
| catch | ||
| { | ||
| // Ignore invalid directory entries in SSL_CERT_DIR | ||
| return false; | ||
| } | ||
| }); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bug: Path comparison uses display string with unexpanded $HOME placeholder.
prettyCertDir may contain the literal string "$HOME" (set at lines 354-356 for display purposes). Path.GetFullPath() does not expand shell variables—it treats $HOME as a literal directory component, producing an incorrect path like /cwd/$HOME/.aspnet/dev-certs/trust rather than /home/user/.aspnet/dev-certs/trust.
This causes the comparison against SSL_CERT_DIR entries to always fail when it should succeed.
🐛 Proposed fix: use the actual path for comparison
var existingSslCertDir = Environment.GetEnvironmentVariable(OpenSslCertificateDirectoryVariableName);
if (!string.IsNullOrEmpty(existingSslCertDir))
{
var existingDirs = existingSslCertDir.Split(Path.PathSeparator);
- var certDirFullPath = Path.GetFullPath(prettyCertDir);
+ var certDirFullPath = Path.GetFullPath(certDir);
var isCertDirIncluded = existingDirs.Any(dir =>📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| if (!string.IsNullOrEmpty(existingSslCertDir)) | |
| { | |
| var existingDirs = existingSslCertDir.Split(Path.PathSeparator); | |
| var certDirFullPath = Path.GetFullPath(prettyCertDir); | |
| var isCertDirIncluded = existingDirs.Any(dir => | |
| { | |
| if (string.IsNullOrWhiteSpace(dir)) | |
| { | |
| return false; | |
| } | |
| try | |
| { | |
| return string.Equals(Path.GetFullPath(dir), certDirFullPath, StringComparison.OrdinalIgnoreCase); | |
| } | |
| catch | |
| { | |
| // Ignore invalid directory entries in SSL_CERT_DIR | |
| return false; | |
| } | |
| }); | |
| if (!string.IsNullOrEmpty(existingSslCertDir)) | |
| { | |
| var existingDirs = existingSslCertDir.Split(Path.PathSeparator); | |
| var certDirFullPath = Path.GetFullPath(certDir); | |
| var isCertDirIncluded = existingDirs.Any(dir => | |
| { | |
| if (string.IsNullOrWhiteSpace(dir)) | |
| { | |
| return false; | |
| } | |
| try | |
| { | |
| return string.Equals(Path.GetFullPath(dir), certDirFullPath, StringComparison.OrdinalIgnoreCase); | |
| } | |
| catch | |
| { | |
| // Ignore invalid directory entries in SSL_CERT_DIR | |
| return false; | |
| } | |
| }); |
🤖 Prompt for AI Agents
In `@src/Shared/CertificateGeneration/UnixCertificateManager.cs` around lines 362
- 382, The path comparison is using the display variable prettyCertDir (which
may contain the literal "$HOME") so Path.GetFullPath(...) yields a wrong string;
change the code in the SSL_CERT_DIR membership check to use the real/expanded
certificate directory variable (e.g., certDir or whatever holds the actual
expanded path) instead of prettyCertDir — compute certDirFullPath =
Path.GetFullPath(certDir) and use that in the Any(...) comparison and
string.Equals call, leaving the existing try/catch and whitespace checks intact.
Benchmark PR from qodo-benchmark#82
Summary by CodeRabbit
✏️ Tip: You can customize this high-level summary in your review settings.