-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathRuleCollectionView.cs
109 lines (95 loc) · 3.98 KB
/
RuleCollectionView.cs
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Fiddler;
namespace FiddlerCSP
{
public partial class RuleCollectionView : UserControl
{
private CSPRuleCollector collector;
public RuleCollectionView(CSPRuleCollector collector)
{
this.collector = collector;
collector.OnRuleAddedOrModified += AddToListViewOnUIThread;
InitializeComponent();
}
private void RuleCollectionView_Load(object sender, EventArgs e)
{
ContextMenu contextMenu = new ContextMenu();
contextMenu.MenuItems.Add("Copy", new EventHandler(delegate(object o, EventArgs copyEventArgs) {
if (RuleCollectionListView.SelectedItems.Count > 0)
{
StringBuilder sbToCopy = new StringBuilder();
foreach (ListViewItem item in RuleCollectionListView.SelectedItems)
{
sbToCopy.AppendFormat("{0} {1}\n", item.Text, item.SubItems[1].Text);
}
Clipboard.SetText(sbToCopy.ToString());
}
}));
RuleCollectionListView.ContextMenu = contextMenu;
RuleCollectionListView.ItemSelectionChanged += RuleCollectionListView_ItemSelectionChanged;
VerboseLoggingCheckBox.Checked = FiddlerExtension.Settings.verboseLogging;
EnableRuleCollectionCheckBox.Checked = FiddlerExtension.Settings.enabled;
}
void RuleCollectionListView_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
string[] uris = e.Item.ListView.SelectedItems.Cast<ListViewItem>().Where(x => x != null).Select(x => x.Text).ToArray();
string result = "";
if (uris.Count() > 0)
{
string rule = collector.Get(uris);
string formattedRule = rule.Replace("Content-Security-Policy: ", "").Replace("; ", "\r\n\r\n").Replace(" ", "\r\n\t");
result = "Document: " + uris.Aggregate((l, r) => l + " " + r) + "\r\n\r\n" + rule + "\r\n\r\n" + formattedRule;
}
SelectedRuleText.Text = result;
}
private delegate void AddToListView(string uri, string rule);
private void AddToListViewOnUIThread(string uri, string rule)
{
if (RuleCollectionListView.InvokeRequired)
{
RuleCollectionListView.Invoke(new AddToListView(AddToListViewOnUIThread), new object[] {uri, rule});
}
else
{
ListViewItem listViewItem = null;
foreach (ListViewItem check in RuleCollectionListView.Items)
{
if (check.Text == uri)
{
listViewItem = check;
break;
}
}
if (listViewItem == null)
{
listViewItem = new ListViewItem(uri);
listViewItem.SubItems.Add(rule);
RuleCollectionListView.Items.Add(listViewItem);
}
else
{
listViewItem.SubItems[1].Text = rule;
}
}
}
private void VerboseLoggingCheckBox_CheckedChanged(object sender, EventArgs e)
{
FiddlerExtension.Settings.verboseLogging = VerboseLoggingCheckBox.Checked;
}
private void EnableRuleCollectionCheckBox_CheckedChanged(object sender, EventArgs e)
{
FiddlerExtension.Settings.enabled = EnableRuleCollectionCheckBox.Checked;
}
private void lnkHelp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Utilities.LaunchHyperlink("https://github.com/david-risney/CSP-Fiddler-Extension");
}
}
}