/// <summary> /// Manages the server menu /// </summary> /// <returns><c>true</c>, if the exit command was issued, <c>false</c> otherwise.</returns> bool ServerMenu() { ServerCommand command = ServerCommand.Invalid; while (command != ServerCommand.Back) { Console.Write("\r" + commandPrefix); string cmd = Console.ReadLine(); command = (ServerCommand)ToCommand(Menu.Server, cmd); switch (command) { case ServerCommand.List: Console.WriteLine(""); List <(string, string)> cmds = new List <(string, string)>(); foreach (string key in Program.server.clientHandlers.Keys) { ClientHandler handler = (ClientHandler)Program.server.clientHandlers[key]; IPAddress ip = ((IPEndPoint)handler.Socket.Client.RemoteEndPoint).Address; cmds.Add((key, ip.ToString())); } Console.WriteLine(cmds.ToStringTable( new[] { "Entity", "IP" }, a => a.Item1, a => a.Item2)); break; case ServerCommand.Back: break; case ServerCommand.Clear: Console.Clear(); break; case ServerCommand.Disconnect: MenuEventArgs listArgs = ProcessCommandArgs(Menu.Server, ServerCommand.Disconnect, cmd); string entity = (string)listArgs.Arguments.First(m => m.Key.Equals(ServerArg.Entity)).Value; Program.server.DisconnectClient(entity); ProcessLog(ProcessPrint.Info, "Entity " + entity + " was kicked", true); break; case ServerCommand.Exit: return(true); case ServerCommand.Help: HelpPrints.PrintServerHelp(); break; case ServerCommand.Invalid: ProcessLog(ProcessPrint.Error, "Invalid command", true); break; case ServerCommand.ServerInfo: ProcessLog(ProcessPrint.Info, string.Format("Server listening at {0}:{1}", Program.server.ListeningIP, Program.server.ListeningPort)); ProcessLog(ProcessPrint.Info, string.Format("There are {0} connected clients", Program.server.clientHandlers.Count)); Console.WriteLine(""); List <(string, string)> cmds1 = new List <(string, string)>(); foreach (string key in Program.server.clientHandlers.Keys) { ClientHandler handler = (ClientHandler)Program.server.clientHandlers[key]; IPAddress ip = ((IPEndPoint)handler.Socket.Client.RemoteEndPoint).Address; cmds1.Add((key, ip.ToString())); } Console.WriteLine(cmds1.ToStringTable( new[] { "Entity", "IP" }, a => a.Item1, a => a.Item2)); break; } } return(false); }
/// <summary> /// Manages the main menu /// </summary> void MainMenu() { MainCommand command = MainCommand.Invalid; bool terminate = false; while (command != MainCommand.Exit) { Console.Write("\r" + commandPrefix); command = (MainCommand)ToCommand(Menu.Main, Console.ReadLine()); switch (command) { case MainCommand.Keys: commandPrefix = String.Format("TrustAgent ({0}): Keys > ", computerName); terminate = KeysMenu(); commandPrefix = String.Format("TrustAgent ({0}) > ", computerName); if (terminate) { command = MainCommand.Exit; } break; case MainCommand.Server: commandPrefix = String.Format("TrustAgent ({0}): Server > ", computerName); terminate = ServerMenu(); commandPrefix = String.Format("TrustAgent ({0}) > ", computerName); if (terminate) { command = MainCommand.Exit; } break; case MainCommand.System: Console.WriteLine(""); IEnumerable <Tuple <string, string> > cmds = new[] { Tuple.Create("SEED 1", Program.dbSeed1.ToString()), Tuple.Create("SEED 2", Program.dbSeed2.ToString()), Tuple.Create("", ""), Tuple.Create("CIPHER", "AES-256"), Tuple.Create("HMAC", "SHA-256"), Tuple.Create("", ""), Tuple.Create("LOCAL IP", Program.server.ListeningIP.ToString()), Tuple.Create("LOCAL PORT", Program.server.ListeningPort.ToString()), Tuple.Create("", ""), Tuple.Create("DEBUG", Program.enableDebug.ToString()), Tuple.Create("SPY", Program.enableSpy.ToString()) }; Console.WriteLine(cmds.ToStringTable( new[] { "PARAMETER", "VALUE" }, a => a.Item1, a => a.Item2)); break; case MainCommand.Clear: Console.Clear(); break; case MainCommand.Help: HelpPrints.PrintMainHelp(); break; case MainCommand.Exit: break; case MainCommand.Invalid: ProcessLog(ProcessPrint.Error, "Invalid command", true); break; } } Program.server.Shutdown(); Program.database.WriteToFile(); }
/// <summary> /// Manages the keys menu /// </summary> /// <returns><c>true</c>, if the exit command was issued, <c>false</c> otherwise.</returns> bool KeysMenu() { KeysCommand command = KeysCommand.Invalid; while (command != KeysCommand.Back) { Console.Write("\r" + commandPrefix); string cmd = Console.ReadLine(); command = (KeysCommand)ToCommand(Menu.Keys, cmd); switch (command) { case KeysCommand.Add: MenuEventArgs addArgs = ProcessCommandArgs(Menu.Keys, KeysCommand.Add, cmd); string addEntity = (string)addArgs.Arguments.First(m => m.Key.Equals(KeysArg.Entity)).Value; string addKey = (string)addArgs.Arguments.First(m => m.Key.Equals(KeysArg.Key)).Value; Keys.AddAction(Keys.Action.Add, addEntity, addKey); break; case KeysCommand.Back: if (Keys.Pending > 0) { ProcessLog(ProcessPrint.Warn, "There are pending changes to apply!"); ProcessLog(ProcessPrint.Question, "Do you want to discard the changes (y/n)"); if (Console.ReadLine().ToBool()) { Keys.Discard(); } else { Keys.Save(); } } break; case KeysCommand.Clear: Console.Clear(); break; case KeysCommand.Del: MenuEventArgs delArgs = ProcessCommandArgs(Menu.Keys, KeysCommand.Del, cmd); string delEntity = (string)delArgs.Arguments.First(m => m.Key.Equals(KeysArg.Entity)).Value; Keys.AddAction(Keys.Action.Del, delEntity, ""); break; case KeysCommand.Discard: Keys.Discard(); break; case KeysCommand.Exit: return(true); case KeysCommand.Help: HelpPrints.PrintKeyshelp(); break; case KeysCommand.Invalid: ProcessLog(ProcessPrint.Error, "Invalid command", true); break; case KeysCommand.List: MenuEventArgs listArgs = ProcessCommandArgs(Menu.Keys, KeysCommand.List, cmd); bool showKey = (bool)listArgs.Arguments.First(m => m.Key.Equals(KeysArg.ShowKey)).Value; Program.database.PrintEntities(showKey); break; case KeysCommand.ListChanges: Keys.PrintChanges(); break; case KeysCommand.Save: Keys.Save(); break; } } return(false); }