Skip to content

Commit

Permalink
Adding Learn More and Remediation Examples tabs in SAST (#135)
Browse files Browse the repository at this point in the history
* Adding Learn More and Remediation Examples tabs

* Fix for sca vulnerabilities with no packages

* PR review fix

* remove empty line

* remove unused import

* remove empty line

* fix for non utf8 characters in learn more

* refactor in AddTextWithTitle and AddSectionTitle functions

---------

Co-authored-by: hmmachadocx <[email protected]>
  • Loading branch information
igorlombacx and hmmachadocx authored Aug 25, 2023
1 parent f668355 commit 7346db4
Show file tree
Hide file tree
Showing 9 changed files with 381 additions and 34 deletions.
121 changes: 119 additions & 2 deletions ast-visual-studio-extension/CxExtension/CxWindowControl.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -491,7 +491,7 @@
</StackPanel>

<!-- Column 1 -->
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Margin="1,1,2,0" PreviewMouseWheel="ResultsTreePanelPreviewMouseWheel">
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Margin="1,1,2,0" PreviewMouseWheel="PreviewMouseWheel">
<TreeView Background="Transparent" Margin="10,5,0,13" x:Name="TreeViewResults" HorizontalAlignment="Left" VerticalAlignment="Top" BorderThickness="0">
<TreeView.Resources>
<!-- Style the inactive selection the same as active -->
Expand Down Expand Up @@ -638,8 +638,9 @@
</TabControl>
</StackPanel>


<!-- Column 3 -->
<ScrollViewer Grid.Row="1" Grid.Column="2" x:Name="VulnerabilitiesPanel" Visibility="Hidden" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Margin="1,1,2,0" PreviewMouseWheel="VulnerabilitiesPanelPreviewMouseWheel">
<ScrollViewer Grid.Row="1" Grid.Column="2" x:Name="VulnerabilitiesPanel" Visibility="Hidden" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Margin="1,1,2,0" PreviewMouseWheel="PreviewMouseWheel">
<StackPanel>
<!-- Result Title -->
<WrapPanel Orientation="Horizontal" Margin="10" MinHeight="24">
Expand All @@ -658,6 +659,122 @@
</ListView>
</StackPanel>
</ScrollViewer>

<ScrollViewer Grid.Row="1" Grid.Column="2" x:Name="SastVulnerabilitiesPanel" Visibility="Hidden" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Disabled" Margin="1,1,2,0">
<TabControl x:Name="LearnMoreAndRemediationTabControl" TabStripPlacement="Top" HorizontalAlignment="Stretch" Background="Transparent" BorderBrush="Transparent" Margin="0,10,0,0">
<TabControl.Resources>
<Style TargetType="TabItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="TabItem">
<StackPanel Name="Panel" Cursor="Hand" Orientation="Vertical">
<ContentPresenter x:Name="ContentSite" VerticalAlignment="Center" HorizontalAlignment="Center" ContentSource="Header" Margin="10,2"/>
<TextBlock Name="BottomBar" Background="Transparent" Height="3" />
<StackPanel.Style>
<Style TargetType="{x:Type StackPanel}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{DynamicResource {x:Static vsfx:VsBrushes.AccentDarkKey}}"/>
</Trigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
</StackPanel>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter TargetName="BottomBar" Property="Background" Value="LightBlue" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</TabControl.Resources>
<TabItem x:Name="VulnerabilitiesTabItem">
<TabItem.HeaderTemplate>
<DataTemplate>
<DataTemplate.Resources>
<Style TargetType="TextBlock" BasedOn="{StaticResource {x:Type TextBlock}}" />
</DataTemplate.Resources>
<Grid HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="5*" />
</Grid.ColumnDefinitions>
<TextBlock Text="Attack Vector" Grid.Column="1" VerticalAlignment="Center"/>
</Grid>
</DataTemplate>
</TabItem.HeaderTemplate>
<TabItem.Content>
<ScrollViewer PreviewMouseWheel="PreviewMouseWheel">
<ScrollViewer.VerticalScrollBarVisibility>Auto</ScrollViewer.VerticalScrollBarVisibility>
<ScrollViewer.Content>
<StackPanel>
<ListView x:Name="VulnerabilitiesListSast" Grid.Column="2" Background="Transparent" BorderThickness="0">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Focusable" Value="false"/>
<Setter Property="Margin" Value="5"/>
</Style>
</ListView.ItemContainerStyle>
</ListView>
</StackPanel>
</ScrollViewer.Content>
</ScrollViewer>
</TabItem.Content>
</TabItem>
<TabItem Name="LearnMore" MouseUp="OnClickLearnMoreRemediation">
<TabItem.HeaderTemplate>
<DataTemplate>
<DataTemplate.Resources>
<Style TargetType="TextBlock" BasedOn="{StaticResource {x:Type TextBlock}}" />
</DataTemplate.Resources>
<Grid HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="5*" />
</Grid.ColumnDefinitions>
<TextBlock Text="Learn More" Grid.Column="1" VerticalAlignment="Center"/>
</Grid>
</DataTemplate>
</TabItem.HeaderTemplate>
<TabItem.Content>
<ScrollViewer PreviewMouseWheel="PreviewMouseWheel">
<ScrollViewer.VerticalScrollBarVisibility>Auto</ScrollViewer.VerticalScrollBarVisibility>
<ScrollViewer.Content>
<StackPanel x:Name="LearnMorePanelTitle" CanVerticallyScroll="True">
</StackPanel>
</ScrollViewer.Content>
</ScrollViewer>
</TabItem.Content>
</TabItem>
<TabItem Name="Remediation" MouseUp="OnClickLearnMoreRemediation">
<TabItem.HeaderTemplate>
<DataTemplate>
<DataTemplate.Resources>
<Style TargetType="TextBlock" BasedOn="{StaticResource {x:Type TextBlock}}" />
</DataTemplate.Resources>
<Grid HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" />
<ColumnDefinition Width="5*" />
</Grid.ColumnDefinitions>
<TextBlock Text="Remediation" Grid.Column="1" VerticalAlignment="Center"/>
</Grid>
</DataTemplate>
</TabItem.HeaderTemplate>
<TabItem.Content>
<ScrollViewer PreviewMouseWheel="PreviewMouseWheel">
<ScrollViewer.VerticalScrollBarVisibility>Auto</ScrollViewer.VerticalScrollBarVisibility>
<ScrollViewer.Content>
<StackPanel x:Name="RemediationPanelTitle" CanVerticallyScroll="True">
</StackPanel>
</ScrollViewer.Content>
</ScrollViewer>
</TabItem.Content>
</TabItem>
</TabControl>
</ScrollViewer>
</Grid>


Expand Down
24 changes: 10 additions & 14 deletions ast-visual-studio-extension/CxExtension/CxWindowControl.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public partial class CxWindowControl : UserControl
private readonly CxToolbar cxToolbar;
private readonly ResultInfoPanel resultInfoPanel;
private readonly AsyncPackage package;

private readonly ResultVulnerabilitiesPanel resultsVulnPanel;
public CxWindowControl(AsyncPackage package)
{
InitializeComponent();
Expand All @@ -27,7 +27,9 @@ public CxWindowControl(AsyncPackage package)

resultInfoPanel = new ResultInfoPanel(this);

ResultsTreePanel resultsTreePanel = new ResultsTreePanel(package, this, resultInfoPanel);
resultsVulnPanel = new ResultVulnerabilitiesPanel(package, this);

ResultsTreePanel resultsTreePanel = new ResultsTreePanel(package, this, resultInfoPanel, resultsVulnPanel);

// Subscribe OnApply event in checkmarx settings window
CxPreferencesUI.GetInstance().OnApplySettingsEvent += CheckToolWindowPanel;
Expand Down Expand Up @@ -105,21 +107,11 @@ private void CheckToolWindowPanel()
}

/// <summary>
/// Handle mouse wheel in the vulnerabilities panel
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void VulnerabilitiesPanelPreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
HandleScrollViewer((ScrollViewer)sender, e);
}

/// <summary>
/// Handle mouse wheel in the results tree panel
/// Handle mouse wheel
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void ResultsTreePanelPreviewMouseWheel(object sender, MouseWheelEventArgs e)
private void PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
HandleScrollViewer((ScrollViewer)sender, e);
}
Expand Down Expand Up @@ -271,5 +263,9 @@ private void OnClickCodebashingLink(object sender, MouseButtonEventArgs e)
{
_ = resultInfoPanel.CodeBashingListAsync(cxToolbar);
}
private void OnClickLearnMoreRemediation(object sender, RoutedEventArgs e)
{
_ = resultsVulnPanel.LearnMoreAndRemediationAsync(cxToolbar);
}
}
}
Loading

0 comments on commit 7346db4

Please sign in to comment.