EduNetworkBuilder/EduNetworkBuilder/FirewallEditor.cs

183 lines
5.9 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;
namespace EduNetworkBuilder
{
public partial class FirewallEditor : Form
{
NetworkDevice FirewallDevice = null;
public FirewallEditor(NetworkDevice WhatToEdit)
{
InitializeComponent();
FirewallDevice = WhatToEdit;
UpdateForm();
Icon = Properties.Resources.NBIco;
}
string InterfaceVLAN(string device)
{
string answer = "";
string basedevice = Regex.Replace(device, ":.*","");
NetworkCard nic = FirewallDevice.NicFromName(basedevice);
if (nic != null)
{
NetworkInterface nif = nic.InterfaceFromName(device);
if(nif != null)
{
Network myNet = NB.GetNetwork();
int id = nif.GetNonForbiddenVLANID();
foreach(VLANName vn in myNet.VlanNames)
{
if(vn.ID == id)
{
answer = vn.Name;
break;
}
}
}
}
return answer;
}
void UpdateForm()
{
int selected = lbRules.SelectedIndex;
lbRules.Items.Clear();
foreach (FirewallRule FW in FirewallDevice.FirewallRules)
{
string svlan = InterfaceVLAN(FW.Source);
if (svlan != "") svlan = svlan + " ";
string dvlan = InterfaceVLAN(FW.Destination);
if (dvlan != "") dvlan = dvlan + " ";
string OneLine = FW.Action.ToString() + " " + FW.Source + " " + svlan + " -> " + FW.Destination + " " + dvlan;
lbRules.Items.Add(OneLine);
}
if (selected >= 0 && selected < lbRules.Items.Count)
lbRules.SelectedIndex = selected;
else
{
if (lbRules.Items.Count > 0)
lbRules.SelectedIndex = 0;
}
//Make the buttons visible
if (lbRules.SelectedIndex >= 0)
{
btnDel.Visible = true;
btnEdit.Visible = true;
}
else
{
btnDel.Visible = false;
btnEdit.Visible = false;
}
}
private void btnNew_Click(object sender, EventArgs e)
{
FirewallRule FW = new FirewallRule("","",FirewallRuleType.Drop);
NetTestEditor NTE = new NetTestEditor(FW,FirewallDevice);
NTE.ShowDialog();
if(FW.Source!="" && FW.Destination != "")
{
FirewallDevice.FirewallRules.Add(FW);
}
UpdateForm();
}
private void btnDel_Click(object sender, EventArgs e)
{
if (lbRules.SelectedIndex >= 0)
{
if (FirewallDevice.FirewallRules.Count > lbRules.SelectedIndex)
{
int old = lbRules.SelectedIndex;
FirewallDevice.FirewallRules.RemoveAt(lbRules.SelectedIndex);
old--;
if (old > -1)
lbRules.SelectedIndex = old;
UpdateForm();
}
}
}
private void btnDone_Click(object sender, EventArgs e)
{
Close();
}
private void btnEdit_Click(object sender, EventArgs e)
{
EditCurrent();
}
private void EditCurrent()
{
if (lbRules.SelectedIndex >= 0)
{
if (FirewallDevice.FirewallRules.Count > lbRules.SelectedIndex)
{
FirewallRule FW = FirewallDevice.FirewallRules[lbRules.SelectedIndex];
NetTestEditor NTE = new NetTestEditor(FW, FirewallDevice);
NTE.ShowDialog();
UpdateForm();
}
}
}
private void lbRules_DoubleClick(object sender, EventArgs e)
{
EditCurrent();
}
private void lbRules_MouseDown(object sender, MouseEventArgs e)
{
//Do right-click stuff here
if(e.Button == MouseButtons.Right)
{
if (lbRules.ContextMenuStrip == null)
{
lbRules.ContextMenuStrip = new ContextMenuStrip();
}
lbRules.ContextMenuStrip.Items.Clear();
//we can open a right-click menu
int index = 0;
lbRules.ContextMenuStrip.Items.Add(NB.Translate("_Add"));
lbRules.ContextMenuStrip.Items[index++].Click += btnNew_Click;
if (lbRules.SelectedIndex >= 0)
{
lbRules.ContextMenuStrip.Items.Add(NB.Translate("_Edit"));
lbRules.ContextMenuStrip.Items[index++].Click += btnEdit_Click;
lbRules.ContextMenuStrip.Items.Add(NB.Translate("_Delete"));
lbRules.ContextMenuStrip.Items[index++].Click += btnDel_Click;
}
lbRules.ContextMenuStrip.Visible = true;
lbRules.ContextMenuStrip.Show(Cursor.Position);
}
}
private void FirewallEditor_Shown(object sender, EventArgs e)
{
BuilderWindow BW = NB.GetBuilderWin();
if (BW != null)
{
Point tLocation = new Point(BW.Location.X + ((BW.Width - Width) / 2), BW.Location.Y + ((BW.Height - Height) / 2));
Location = tLocation;
}
}
}
}