Repository navigation
Expand file tree
/
Copy pathMainWindow.xaml
More file actions
174 lines (167 loc) · 11.5 KB
/
Copy pathMainWindow.xaml
File metadata and controls
174 lines (167 loc) · 11.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
<Window x:Class="OpenIPRadar.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:OpenIPRadar.Presentation.ViewModels"
mc:Ignorable="d"
d:DataContext="{d:DesignInstance Type=vm:MainViewModel}"
Title="OpenIPRadar — Bulk IP Reputation Analysis" Height="720" Width="1200"
WindowStartupLocation="CenterScreen">
<DockPanel>
<!-- Status bar -->
<StatusBar DockPanel.Dock="Bottom">
<StatusBarItem>
<TextBlock Text="{Binding StatusMessage}" />
</StatusBarItem>
<StatusBarItem HorizontalAlignment="Right">
<ProgressBar Width="220" Height="16" Minimum="0" Maximum="100"
Value="{Binding ProgressValue, Mode=OneWay}" />
</StatusBarItem>
</StatusBar>
<TabControl Margin="8">
<!-- ================= SCAN TAB ================= -->
<TabItem Header="Scan">
<Grid Margin="8">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!-- Input -->
<GroupBox Grid.Row="0" Header="Input (paste IPs, or load a TXT/CSV file)">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0" Height="110" Margin="0,0,8,0"
Text="{Binding InputText, UpdateSourceTrigger=PropertyChanged}"
AcceptsReturn="True" TextWrapping="Wrap"
VerticalScrollBarVisibility="Auto"
IsEnabled="{Binding IsNotScanning}" />
<StackPanel Grid.Column="1" Width="140">
<Button Content="Load File…" Margin="0,0,0,6" Padding="6,4"
Command="{Binding LoadFileCommand}" />
<Button Content="Extract IPs" Margin="0,0,0,6" Padding="6,4"
Command="{Binding ExtractCommand}" />
<Button Content="Clear" Padding="6,4"
Command="{Binding ClearCommand}" />
<TextBlock Margin="0,8,0,0" TextWrapping="Wrap"
Text="{Binding ExtractedIps.Count, StringFormat='{}{0} IP(s) ready'}" />
</StackPanel>
</Grid>
</GroupBox>
<!-- Providers -->
<GroupBox Grid.Row="1" Header="Providers" Margin="0,8,0,0">
<ItemsControl ItemsSource="{Binding Providers}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type vm:ProviderToggleViewModel}">
<CheckBox Margin="8,4" VerticalContentAlignment="Center"
IsChecked="{Binding IsSelected}"
IsEnabled="{Binding IsConfigured}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding DisplayName}" FontWeight="SemiBold" />
<TextBlock Text=" (no API key)" Foreground="#B00020">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsConfigured}" Value="False">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</StackPanel>
</CheckBox>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</GroupBox>
<!-- Actions -->
<StackPanel Grid.Row="2" Orientation="Horizontal" Margin="0,8">
<Button Content="Scan" Width="110" Padding="6,6" FontWeight="Bold"
Command="{Binding ScanCommand}" />
<Button Content="Cancel" Width="90" Padding="6,6" Margin="8,0,0,0"
Command="{Binding CancelCommand}" />
<Separator Margin="16,0" />
<Button Content="Export HTML" Width="110" Padding="6,6"
Command="{Binding ExportHtmlCommand}" />
<Button Content="Export PDF" Width="110" Padding="6,6" Margin="8,0,0,0"
Command="{Binding ExportPdfCommand}" />
</StackPanel>
<!-- Results -->
<DataGrid Grid.Row="3" Margin="0,8,0,0" AutoGenerateColumns="False"
IsReadOnly="True" CanUserAddRows="False"
ItemsSource="{Binding Reports}"
GridLinesVisibility="All" HeadersVisibility="Column">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Background"
Value="{Binding RiskLevel, Converter={StaticResource RiskToBrush}}" />
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="IP" Binding="{Binding IpAddress}" />
<DataGridTextColumn Header="Country" Binding="{Binding Country, Converter={StaticResource NullToNa}}" />
<DataGridTextColumn Header="ASN" Binding="{Binding Asn, Converter={StaticResource NullToNa}}" />
<DataGridTextColumn Header="ISP" Binding="{Binding Isp, Converter={StaticResource NullToNa}}" />
<DataGridTextColumn Header="Hostname" Binding="{Binding Hostname, Converter={StaticResource NullToNa}}" />
<DataGridTextColumn Header="Abuse Conf." Binding="{Binding AbuseConfidence, Converter={StaticResource NullToNa}}" />
<DataGridTextColumn Header="Reports" Binding="{Binding Reports, Converter={StaticResource NullToNa}}" />
<DataGridTextColumn Header="Last Reported" Binding="{Binding LastReported, Converter={StaticResource NullToNa}}" />
<DataGridTextColumn Header="VT Rep." Binding="{Binding VtReputation, Converter={StaticResource NullToNa}}" />
<DataGridTextColumn Header="VT Mal." Binding="{Binding VtMalicious, Converter={StaticResource NullToNa}}" />
<DataGridTextColumn Header="VT Susp." Binding="{Binding VtSuspicious, Converter={StaticResource NullToNa}}" />
<DataGridTextColumn Header="Open Ports" Binding="{Binding OpenPorts, Converter={StaticResource NullToNa}}" />
<DataGridTextColumn Header="OS" Binding="{Binding OperatingSystem, Converter={StaticResource NullToNa}}" />
<DataGridTextColumn Header="Tags" Binding="{Binding Tags, Converter={StaticResource NullToNa}}" />
<DataGridTextColumn Header="Threat Score" Binding="{Binding ThreatScore}" FontWeight="Bold" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</TabItem>
<!-- ================= SETTINGS TAB ================= -->
<TabItem Header="Settings">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<ItemsControl Margin="8" ItemsSource="{Binding Settings.Providers}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type vm:ProviderKeyViewModel}">
<GroupBox Header="{Binding DisplayName}" Margin="0,0,0,10">
<Grid Margin="4">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBox Grid.Row="0" Grid.Column="0" Margin="0,0,8,0"
VerticalContentAlignment="Center"
Text="{Binding ApiKey, UpdateSourceTrigger=PropertyChanged}" />
<StackPanel Grid.Row="0" Grid.Column="1" Orientation="Horizontal">
<Button Content="Save" Width="70" Padding="4" Command="{Binding SaveCommand}" />
<Button Content="Test" Width="70" Padding="4" Margin="6,0,0,0" Command="{Binding TestCommand}" />
<Button Content="Clear" Width="70" Padding="4" Margin="6,0,0,0" Command="{Binding ClearCommand}" />
</StackPanel>
<TextBlock Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" Margin="0,6,0,0"
Foreground="#444" Text="{Binding Status}" />
</Grid>
</GroupBox>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
</TabItem>
</TabControl>
</DockPanel>
</Window>