Пример #1
0
        static Command.ExitCode RunCommandLine(IList <string> argsAsList)
        {
            //first lookup the connection string
            bool badConnectionString = false;

            for (var I = 0; I < argsAsList.Count - 1; ++I)
            {
                var lowerarg = argsAsList[I].ToLower();
                if (lowerarg == "-c" || lowerarg == "--connect")
                {
                    var connectionString = argsAsList[I + 1];
                    var splits           = connectionString.Split('@');
                    var userpass         = splits[0].Split(':');
                    if (splits.Length != 2 || userpass.Length != 2)
                    {
                        badConnectionString = true;
                        break;
                    }
                    var addrport = splits[1].Split(':');
                    if (addrport.Length != 2)
                    {
                        badConnectionString = true;
                        break;
                    }
                    var    username = userpass[0];
                    var    password = userpass[1];
                    var    address  = addrport[0];
                    ushort port;
                    try
                    {
                        port = Convert.ToUInt16(addrport[1]);
                    }
                    catch
                    {
                        badConnectionString = true;
                        break;
                    }
                    if (String.IsNullOrWhiteSpace(username) || String.IsNullOrWhiteSpace(password) || String.IsNullOrWhiteSpace(address))
                    {
                        badConnectionString = true;
                        break;
                    }
                    argsAsList.RemoveAt(I);
                    argsAsList.RemoveAt(I);
                    ReplaceInterface(new ServerInterface(address, port, username, password));
                    break;
                }
            }

            if (badConnectionString)
            {
                Console.WriteLine("Remote connection usage: <-c/--connect> username:password@address:port");
                return(Command.ExitCode.BadCommand);
            }

            var res = currentInterface.ConnectionStatus(out string error);

            if (!res.HasFlag(ConnectivityLevel.Connected))
            {
                Console.WriteLine("Unable to connect to service: " + error);
                Console.WriteLine("Remote connection usage: <-c/--connect> username:password@address:port");
                return(Command.ExitCode.ConnectionError);
            }

            if (!res.HasFlag(ConnectivityLevel.Authenticated))
            {
                Console.WriteLine("Authentication error: Username/password/windows identity is not authorized!");
                return(Command.ExitCode.ConnectionError);
            }

            if (!SentVMMWarning && currentInterface.VersionMismatch(out error))
            {
                SentVMMWarning = true;
                Console.WriteLine(error);
            }
            else if (interactive && !saidSrvVersion)
            {
                Console.WriteLine("Connectd to service version: " + currentInterface.GetServiceComponent <ITGLanding>().Version());
                saidSrvVersion = true;
            }

            try
            {
                return(new CLICommand(currentInterface).DoRun(argsAsList));
            }
            catch (Exception e)
            {
                Console.WriteLine("Error: " + e.ToString());
                return(Command.ExitCode.ConnectionError);
            };
        }