Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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();
        }
Ejemplo n.º 3
0
        /// <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);
        }