Example #1
0
        private static async Task GuardarDireccionesServidoresAsync(List <DireccionServidor> listaServidores, Label labelGuardar)
        {
            await Task.Delay(500);

            ActualizarLabelGuardar(labelGuardar, $"Guardando ... Lista con Direcciones de los servidores");
            var proveedor = new JsonProveedorDireccionesServidores();
            await proveedor.GuardarAsync(listaServidores);

            await Task.Delay(500);

            ActualizarLabelGuardar(labelGuardar, $"Guardado      Lista con Direcciones de los servidores");
        }
Example #2
0
        static void MostrarPantallaDirecciones(View container, Toplevel top)
        {
            var proveedorTarjetaRed = new JsonProveedorTarjetaRed();

            NetworkInteface tarjetaRedAlmacenada = proveedorTarjetaRed.Obtener();

            var proveedorServidores = new JsonProveedorDireccionesServidores();

            var whoami          = Bash.WhoAmI();
            var listaServidores = proveedorServidores.Consultar();

            var equipoActual = listaServidores.FirstOrDefault(q => q.NombreServidor.ToUpper() == whoami.ToUpper()) ?? new DireccionServidor {
                NombreServidor = whoami.UppercaseWords(), DireccionIp = ""
            };

            listaServidores.RemoveAll(q => q.NombreServidor.ToUpper() == equipoActual.NombreServidor.ToUpper()); // servidores excepto equipo actual

            var tarjetasRedDisponibles = (Network.GetNetworkInterfaces())
                                         .Where(q => q.CardName != Network.loopback).ToList();

            var indiceTarjetaRedSeleccionada = tarjetasRedDisponibles.FindIndex(q => q.CardName == tarjetaRedAlmacenada.CardName);

            if (indiceTarjetaRedSeleccionada < 0)
            {
                indiceTarjetaRedSeleccionada = 0;
            }

            // tarjetas de red disponible
            var etiquetasTarjetasRedDisponibles = tarjetasRedDisponibles.ConvertAll(q => q.ToString()).ToArray();
            var radioGroupTarjetaRedDisponibles = new RadioGroup(etiquetasTarjetasRedDisponibles)
            {
                X = 1, Y = 0
            };

            var frameTarjetas = new FrameView($"Seleccione la Tarjeta de Red a utilizar para el equipo: {equipoActual.NombreServidor}")
            {
                X      = 1,
                Y      = 1,
                Width  = 110,
                Height = etiquetasTarjetasRedDisponibles.Length + 3
            };

            frameTarjetas.Add(radioGroupTarjetaRedDisponibles);


            // si la tarjeta almacenada no cotiene informacion llenarla con info de la tarjeta red seleccionada inicial..
            tarjetaRedAlmacenada.Inet    = !string.IsNullOrEmpty(tarjetaRedAlmacenada.Inet) ? tarjetaRedAlmacenada.Inet : tarjetasRedDisponibles[indiceTarjetaRedSeleccionada].Inet;
            tarjetaRedAlmacenada.Netmask = !string.IsNullOrEmpty(tarjetaRedAlmacenada.Netmask) ? tarjetaRedAlmacenada.Netmask : tarjetasRedDisponibles[indiceTarjetaRedSeleccionada].Netmask;

            // equipo actual la direccion para el equipo actual debe ser el valor de la tarjetaAlmacenada !!!
            equipoActual.DireccionIp = tarjetaRedAlmacenada.Inet;

            var labelEquipoActual = new Label($"Direccion Ip")
            {
                X = 1, Y = 1, Width = 18, TextAlignment = TextAlignment.Left
            };
            var textDireccionIpEquipoActual = new TextField(equipoActual.DireccionIp)
            {
                X = 24 + 1, Y = 1, Width = 20, Used = true
            };
            var labelErrorDireccionIpEquipoActual = new Label($"")
            {
                X = 20 + 20 + 6, Y = 1, Width = 1
            };

            var labelMascara = new Label($"Mascara (1-32)")
            {
                X = 52, Y = 1, Width = 18, TextAlignment = TextAlignment.Left
            };
            var textMascaraTarjetaRedActual = new TextField(tarjetaRedAlmacenada.CidrBits)
            {
                X = 71, Y = 1, Width = 4, Used = true
            };
            var labelMascaraDecimalEquipoActual = new Label($"{tarjetaRedAlmacenada.Netmask}")
            {
                X = 80, Y = 1, Width = 20
            };

            var labelGateway = new Label($"Gateway")
            {
                X = 1, Y = 2, Width = 18
            };
            var textGatewayTarjetaActual = new TextField(tarjetaRedAlmacenada.Gateway)
            {
                X = 24 + 1, Y = 2, Width = 20, Used = true
            };

            var labelDns = new Label($"DNS")
            {
                X = 52, Y = 2, Width = 18
            };
            var textDnsTarjetaRedActual = new TextField(tarjetaRedAlmacenada.NameServersAddresses)
            {
                X = 71, Y = 2, Width = 30, Used = true
            };

            var frameEquipoActual = new FrameView(new Rect(1, etiquetasTarjetasRedDisponibles.Length + 4, 110, 6), $"Tarjeta de Servidor local: {equipoActual.NombreServidor}");

            frameEquipoActual.Add(labelEquipoActual, textDireccionIpEquipoActual, labelErrorDireccionIpEquipoActual,
                                  labelMascara, textMascaraTarjetaRedActual, labelMascaraDecimalEquipoActual, labelGateway, textGatewayTarjetaActual, labelDns, textDnsTarjetaRedActual);

            // info errores en los datos
            var labelErrores = new Label(1, etiquetasTarjetasRedDisponibles.Length + 4 + 6 + listaServidores.Count + 4 + 4, "");

            //
            // servidores
            var listLabelServidores = new List <Label>();
            var listTextServidores  = new List <TextField>();
            var y = 1;

            listaServidores.ForEach(servidor =>
            {
                var lbl = new Label(servidor.NombreServidor)
                {
                    X = 1, Y = y, TextAlignment = TextAlignment.Left, Width = 18
                };

                listLabelServidores.Add(lbl);
                var txtfield = new TextField(servidor.DireccionIp)
                {
                    X = 24 + 1, Y = y++, Width = 20, Used = true
                };

                txtfield.Changed += (evt, obj) =>
                {
                    var value            = txtfield.Text.ToString().Trim();
                    servidor.DireccionIp = value;
                    UpdateLabel(labelErrores, Network.IsValidIpAddress(value), $"Direccion Ip no Vlida en '{servidor.NombreServidor}'");
                };
                listTextServidores.Add(txtfield);
            });

            var frameServidores = new FrameView(new Rect(1, etiquetasTarjetasRedDisponibles.Length + 4 + 6, 110, listaServidores.Count + 4), $"Direccion IP Servidores");

            frameServidores.Add(listLabelServidores.ToArray());
            frameServidores.Add(listTextServidores.ToArray());
            //

            // clave sudo
            var labelPassword = new Label($"Digite su clave")
            {
                X = 1, Y = 1, Width = 18, TextAlignment = TextAlignment.Left
            };
            var textPassword = new TextField("")
            {
                X = 24 + 1, Y = 1, Width = 20, Used = true, Secret = true
            };
            var testSudoBtn   = new Button(52, 1, "Verificar");
            var testSudoLabel = new Label("")
            {
                X = 65, Y = 1
            };
            var framePassword = new FrameView(new Rect(1, etiquetasTarjetasRedDisponibles.Length + 4 + 6 + listaServidores.Count + 4, 110, 4), $"Clave de usuario");

            framePassword.Add(labelPassword, textPassword, testSudoBtn, testSudoLabel);
            //



            // Guardar
            var guardarBtn        = new Button(1, 1, "Guardar");
            var salirBtn          = new Button(20, 1, " Salir");
            var frameGuardarSalir = new FrameView(new Rect(1, etiquetasTarjetasRedDisponibles.Length + 4 + 6 + listaServidores.Count + 4 + 5, 110, 4), "");

            frameGuardarSalir.Add(guardarBtn, salirBtn);
            //


            // label para guardando.....
            var labelGuardar = new Label(1, etiquetasTarjetasRedDisponibles.Length + 4 + 6 + listaServidores.Count + 4 + 5 + 4, "");
            //

            // list view para resultados actualizacion  direcciones en los servicios;
            var resultadosActualizacionDireccionesListView = new ListView(new Rect(1, etiquetasTarjetasRedDisponibles.Length + 4 + 6 + listaServidores.Count + 4 + 5 + 6, 110, 4), new string[] {
            })
            {
                CanFocus = false
            };


            container.Add(frameTarjetas, frameEquipoActual, frameServidores, framePassword, labelErrores, frameGuardarSalir, labelGuardar, resultadosActualizacionDireccionesListView);


            /// Manejadores de eventos
            radioGroupTarjetaRedDisponibles.SelectionChanged = (selected) =>
            {
                frameEquipoActual.Title       = $"Tarjeta de Red Servidor Local: {equipoActual.NombreServidor} en {tarjetasRedDisponibles[selected].CardName}";
                tarjetaRedAlmacenada.CardName = tarjetasRedDisponibles[selected].CardName;
            };
            radioGroupTarjetaRedDisponibles.Selected = indiceTarjetaRedSeleccionada;


            textDireccionIpEquipoActual.Changed += (obj, evt) =>
            {
                var value        = textDireccionIpEquipoActual.Text.ToString().Trim();
                var isvalidValue = Network.IsValidIpAddress(value);
                tarjetaRedAlmacenada.Inet = value;
                equipoActual.DireccionIp  = value;
                labelErrorDireccionIpEquipoActual.Text = isvalidValue ? "" : "X";
                UpdateLabel(labelErrores, isvalidValue, "Direccion Ip Servidor local no valida");
            };


            textMascaraTarjetaRedActual.Changed += (obj, evt) =>
            {
                var value   = textMascaraTarjetaRedActual.Text.ToString().Trim();
                var netmask = MascarasRed.ObtenerNotacionDecimal(value);
                labelMascaraDecimalEquipoActual.Text = netmask;
                tarjetaRedAlmacenada.Netmask         = netmask;
                UpdateLabel(labelErrores, Network.IsValidCidr(value), "Mascara Servidor local no  valida");
            };


            textGatewayTarjetaActual.Changed += (obj, evt) =>
            {
                var value = textGatewayTarjetaActual.Text.ToString().Trim();
                tarjetaRedAlmacenada.Gateway = value;
                UpdateLabel(labelErrores, Network.IsValidIpAddress(value), "Gateway Servidor local no  valido");
            };


            textDnsTarjetaRedActual.Changed += (obj, evt) =>
            {
                var value = string.Join(',', textDnsTarjetaRedActual.Text.ToString().Trim().Replace(" ", "").Split(','));
                tarjetaRedAlmacenada.NameServersAddresses = value;
                UpdateLabel(labelErrores, IsValidNameServersAddresses(value), "DNS Servidor local no  valido");
            };


            testSudoBtn.Clicked = () => _ = TestSudoButttonClicked(textPassword, testSudoLabel);


            textPassword.Changed += (obj, evt) =>
            {
                testSudoLabel.Text = "".PadRight(30, ' ');
            };


            salirBtn.Clicked = () =>
            {
                if (Quit())
                {
                    top.Running = false;
                }
            };


            guardarBtn.Clicked = () => _ = GuadarBtnClicked(tarjetaRedAlmacenada, listaServidores, equipoActual, textPassword, labelGuardar, testSudoLabel, resultadosActualizacionDireccionesListView);
        }