예제 #1
0
        ///// <summary>
        ///// Crear las propiedades en Application.Properties.
        ///// Pero parece que no siempre funciona, al menos a mi me da esa impresión.
        ///// </summary>
        ///// <remarks>Usar datos guardados en un fichero de texto.</remarks>
        //private void CrearPropiedadesApp()
        //{
        //    if (!Application.Current.Properties.ContainsKey("UltimoUsuario"))
        //        Application.Current.Properties.Add("UltimoUsuario", "");
        //    if (!Application.Current.Properties.ContainsKey("UltimoPassword"))
        //        Application.Current.Properties.Add("UltimoPassword", "");
        //    if (!Application.Current.Properties.ContainsKey("RecordarUsuario"))
        //        Application.Current.Properties.Add("RecordarUsuario", true);
        //    if (!Application.Current.Properties.ContainsKey("RecordarPassword"))
        //        Application.Current.Properties.Add("RecordarPassword",false);
        //    if (!Application.Current.Properties.ContainsKey("IniciarConUsuario"))
        //        Application.Current.Properties.Add("IniciarConUsuario", false);
        //    // Para la búsqueda
        //    if (!Application.Current.Properties.ContainsKey("BuscarTexto"))
        //        Application.Current.Properties.Add("BuscarTexto", "");
        //    if (!Application.Current.Properties.ContainsKey("BuscarGrupo"))
        //        Application.Current.Properties.Add("BuscarGrupo", "");
        //    if (!Application.Current.Properties.ContainsKey("BuscarFavoritas"))
        //        Application.Current.Properties.Add("BuscarFavoritas", false);
        //    if (!Application.Current.Properties.ContainsKey("BuscarArchivadas"))
        //        Application.Current.Properties.Add("BuscarArchivadas", false);
        //    if (!Application.Current.Properties.ContainsKey("BuscarEliminadas"))
        //        Application.Current.Properties.Add("BuscarEliminadas", false);
        //    if (!Application.Current.Properties.ContainsKey("BuscarNotificar"))
        //        Application.Current.Properties.Add("BuscarNotificar", false);
        //    // Para sincronizar las notas
        //    if (!Application.Current.Properties.ContainsKey("SincronizarAuto"))
        //        Application.Current.Properties.Add("SincronizarAuto", true);
        //    if (!Application.Current.Properties.ContainsKey("UsarNotasLocal"))
        //        Application.Current.Properties.Add("UsarNotasLocal", false);
        //    // Notificar las notas marcadas como notificar
        //    if (!Application.Current.Properties.ContainsKey("Notificar"))
        //        Application.Current.Properties.Add("Notificar", true);
        //    // El último grupo indicado en editar notas
        //    if (!Application.Current.Properties.ContainsKey("UltimoGrupo"))
        //        Application.Current.Properties.Add("UltimoGrupo", "");

        //}

        /// <summary>
        /// Generar un código de validación y enviarlo al email.
        /// </summary>
        /// <returns></returns>
        async public static Task <string> CodigoValidación(string email)
        {
            // Generar el hash de validación.
            var hash = UsuarioSQL.ValidarHash(email);

            var fecha = DateTime.UtcNow;

            var sb = new StringBuilder();

            sb.AppendLine($"El código de validación para {App.AppName} es:");
            sb.AppendLine($"{App.crlf}{App.crlf}{hash}{App.crlf}{App.crlf}");
            sb.AppendLine($"Indicalo en la aplicación '{App.AppName} {App.AppVersion}'.");
            sb.AppendLine();
            sb.AppendLine("Gracias.");
            sb.AppendLine("Guillermo.");
            sb.AppendLine();
            sb.AppendLine($"Enviado a: '{email}'");
            sb.AppendLine();
            sb.AppendFormat("Para validar el correo puedes indicar el código de validación durante las {0} horas (UTC).", DateTime.UtcNow.Hour);
            sb.AppendLine();
            sb.AppendLine();
            sb.AppendLine("Cualquier bug o duda sobre el programa, por favor usa la página de comentarios del programa.");
            sb.AppendLine("Gracias.");
            sb.AppendLine();

            // Enviar el código de validación al email
            await SendEmail("Codigo de validacion", sb.ToString(), email);

            //return new Task<string>(() => hash);
            return(hash);
        }
예제 #2
0
        private void btnValidar_Clicked(object sender, EventArgs e)
        {
            bool validado = Current.txtValidar.Text.ToUpper() == CodigoValidar;

            UsuarioSQL.UsuarioLogin.Validado = validado;
            UsuarioSQL.GuardarUsuario(UsuarioSQL.UsuarioLogin);

            string sino = validado ? "SI" : "NO";

            LabelInfo.Text = $"El código de validación {sino} es correcto.";
            txtValidar.Focus();
        }
예제 #3
0
        public async Task <Usuario> Autentificar(string username, string password)
        {
            UsuarioSQL sql     = new UsuarioSQL(_appSettings);
            var        usuario = await sql.Login(username, password);

            if (usuario == null)
            {
                return(null);
            }

            usuario.token = Utilerias.GetToken(username, _appSettings.secret, _appSettings.segundosVidaToken);
            return(usuario);
        }
예제 #4
0
        public App()
        {
            InitializeComponent();

            // Los colores a usar                                   (24/May/21)
            // No surten efecto, ya que se usan los valores "fijos"
            //Application.Current.Resources["ColorAzul1"] = Color.DarkGreen; // Application.Current.Resources["ColorAzul1"]; // #0073cf
            //Application.Current.Resources["ColorAzul2"] = Color.DarkOrange; // Application.Current.Resources["ColorAzul2"]; // #0063b1
            //Application.Current.Resources["ColorBlanco"] = Color.Wheat; // Application.Current.Resources["ColorBlanco"];
            ////Application.Current.Resources["ColorBlanco"] = Application.Current.Resources["ColorBlanco"];
            //Application.Current.Resources["ColorAmarillo"] = Color.Indigo; // Application.Current.Resources["ColorAmarillo"];

            FolderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData));
            FicConfig  = Path.Combine(FolderPath, $"{AppName}.txt");

            // Crear las propiedades de la aplicación
            //CrearPropiedadesApp();
            LeerConfig();

            //// Si se está usando desde el IDE de VS
            //if (System.Diagnostics.Debugger.IsAttached)
            //{
            //    AppName = "gsNotasNET.Debug";
            //}

            // Iniciar con el usuario de prueba.
            //var usuario = UsuarioSQL.Usuario("prueba");

            // Iniciar con el usuario local                         (22/May/21)
            var usuario = AsignarUsuarioLocal();

            if (IniciarConUsuario)
            {
                var usuario2 = UsuarioSQL.Usuario(UltimoUsuario);
                if (usuario2.ID == 0)
                {
                    UsuarioSQL.UsuarioLogin = usuario;
                }
                else
                {
                    App.UsarNotasLocal = false;
                }
            }

            // Iniciar con la página Login que vuelva a MainMenu.
            //MainPage = new NavigationPage(new Login(new MainMenu()));

            MainPage = new NavigationPage(new MainMenu());
        }
예제 #5
0
 public UsuarioPerfil(UsuarioSQL usuario)
 {
     InitializeComponent();
     Current = this;
     //Title = $"{App.AppName} {App.AppVersion}";
     _usuario = usuario;
     if (usuario is null)
     {
         LabelInfo.Text = "El usuario indicado no es válido.";
     }
     else
     {
         BindingContext = usuario;
         LabelInfo.Text = $"Perfil de {usuario.Email}";
     }
 }
예제 #6
0
        /// <summary>
        /// Asignar el usuario local.
        /// </summary>
        public static UsuarioSQL AsignarUsuarioLocal()
        {
            var usuario = new UsuarioSQL();

            UsuarioSQL.UsuarioLogin = usuario;
            usuario.Email           = "local";
            usuario.Nombre          = "Usuario Local";
            usuario.ID          = MaxIDUsuario;
            usuario.Validado    = true;
            App.UsarNotasLocal  = true;
            App.SincronizarAuto = false;
            //App.UltimoUsuario = usuario.Email;
            //App.RecordarPassword = false;
            //App.RecordarUsuario = false;

            return(usuario);
        }
예제 #7
0
        private void ContentPage_Appearing(object sender, EventArgs e)
        {
            LabelStatus.Text = App.StatusInfo;

            if (UsuarioSQL.UsuarioLogin is null ||
                UsuarioSQL.UsuarioLogin.Email.ToLower().IndexOf("elguille.info@") == -1)
            {
                Navigation.PushAsync(new Login(Current));
                return;
            }
            if (_Usuarios is null || _Usuarios.Count() == 0)
            {
                _Usuarios = UsuarioSQL.Usuarios(todos: true);
            }
            listView.ItemsSource = _Usuarios;

            TituloNotas();
        }
예제 #8
0
        async private void btnRegistrar_Clicked(object sender, EventArgs e)
        {
            if (string.IsNullOrEmpty(Email.Text) || string.IsNullOrEmpty(Password.Text) || string.IsNullOrEmpty(Nombre.Text))
            {
                // se deben indicar los tres valores
                LabelInfo.Text      = "Debes indicar los tres valores solicitados.";
                LabelInfo.IsVisible = true;

                if (string.IsNullOrEmpty(Email.Text))
                {
                    Email.Focus();
                }
                else if (string.IsNullOrEmpty(Password.Text))
                {
                    Password.Focus();
                }
                else if (string.IsNullOrEmpty(Nombre.Text))
                {
                    Nombre.Focus();
                }
            }
            else
            {
                // Comprobar si ya existe ese usuario
                if (UsuarioSQL.Existe(Email.Text))
                {
                    LabelInfo.Text      = "Debes indicar una cuenta de correo no registrada.";
                    LabelInfo.IsVisible = true;
                    Email.Focus();
                    return;
                }
                // registrarlo
                var usuario = new UsuarioSQL();
                usuario.Email  = Email.Text;
                usuario.Nombre = Nombre.Text;
                UsuarioSQL.GuardarUsuario(usuario, Password.Text);
                // Enviarlo a Login
                await Navigation.PushAsync(new Login(new MainMenu()));
            }
        }
예제 #9
0
        async private void btnAplicar_Clicked(object sender, EventArgs e)
        {
            if (UsuarioSQL.UsuarioLogin is null || UsuarioSQL.UsuarioLogin.ID == 0 || UsuarioSQL.UsuarioLogin.Email == "prueba")
            {
                await Navigation.PushAsync(new Login(Current));

                return;
            }

            App.RecordarPassword  = chkRecordarPassword.IsToggled;
            App.RecordarUsuario   = chkRecordarUsuario.IsToggled;
            App.IniciarConUsuario = chkIniciarConUsuario.IsToggled;
            // Las notas siempre estarán sincronizadas
            App.SincronizarAuto = true;
            App.Notificar       = chkNotificar.IsToggled;
            App.UltimoUsuario   = LabelUsuario.Text;
            App.UsarNotasLocal  = chkUsarLocal.IsToggled;
            if (App.RecordarPassword)
            {
                App.UltimoPassword = UsuarioSQL.UsuarioLogin.Password;
            }
            else
            {
                App.UltimoPassword = "";
            }

            // Solo asignar/guardar si se ha podido cambiar         (26/May/21)
            if (UsuarioSQL.UsuarioLogin.Pagos >= 25)
            {
                UsuarioSQL.UsuarioLogin.UsarNotasMax = chkUsarNotasMax.IsToggled;
                UsuarioSQL.GuardarUsuario(UsuarioSQL.UsuarioLogin);
            }

            App.GuardarConfig();

            // Volver a la anterior
            await Current.Navigation.PopAsync();
        }
예제 #10
0
 public static void TituloNotas()
 {
     //Current.Title = $"{App.AppName} {App.AppVersion}";
     if (!(_Usuarios is null))
     {
         Current.LabelInfo.Text = $"Hay {_Usuarios.Count()} usuarios activos y {UsuarioSQL.CountDeBaja()} de baja o eliminados.";
     }
예제 #11
0
        async void OnSaveButtonClicked(object sender, EventArgs e)
        {
            var nota = (NotaSQL)BindingContext;

            // no guardar notas en blanco
            if (string.IsNullOrEmpty(nota.Texto))
            {
                await Navigation.PopAsync();

                return;
            }

            nota.Modificada = DateTime.UtcNow;
            nota.Archivada  = chkArchivada.IsToggled;
            nota.Favorita   = chkFavorita.IsToggled;
            nota.Eliminada  = chkEliminada.IsToggled;
            nota.Notificar  = chkNotificar.IsToggled;
            nota.Grupo      = txtGrupo.Text;

            // Guardar el último grupo usado
            App.UltimoGrupo = nota.Grupo;

            var note = nota.ComoNotaLocal();

            if (App.UsarNotasLocal || DatosMostrar == NotasDatosMostrar.Local)
            {
                note.ID = nota.ID;
                await App.Database.SaveNoteAsync(note);
            }
            else
            {
                NotaSQL.GuardarNota(nota);

                // Guardar los datos del usuario
                UsuarioSQL.UsuarioLogin.UltimoAcceso    = DateTime.UtcNow;
                UsuarioSQL.UsuarioLogin.VersionPrograma = $"{App.AppName} {App.AppVersion}";
                UsuarioSQL.GuardarUsuario(UsuarioSQL.UsuarioLogin);
            }

            //
            // Por comprobar
            //

            // Si la nota no es nueva, sincronizar el contenido

            // Si la nota es nueva, crear una nota en la otra base de datos

            if (App.HayConexionInternet())
            {
                // Sincronizar la nota
                if (App.UsarNotasLocal || DatosMostrar == NotasDatosMostrar.Local)
                {
                    // Se ha guardado como nota local
                    if (note.idNota != 0)
                    {
                        nota = NotaSQL.Nota(note.idNota);
                    }
                    else
                    {
                        nota = new NotaSQL();
                    }

                    if (nota.ID == 0)
                    {
                        nota = new NotaSQL
                        {
                            Archivada    = note.Archivada,
                            Eliminada    = note.Eliminada,
                            Favorita     = note.Favorita,
                            Grupo        = note.Grupo,
                            Modificada   = note.Modificada,
                            Notificar    = note.Notificar,
                            Sincronizada = note.Sincronizada,
                            Texto        = note.Texto,
                            idNota       = note.ID
                        };
                    }
                    else
                    {
                        nota = note.ComoNotaRemota();
                    }
                    nota.idNota       = note.ID;
                    nota.Sincronizada = true;
                    NotaSQL.GuardarNota(nota);
                    note.idNota       = nota.ID;
                    note.Sincronizada = true;
                    await App.Database.SaveNoteAsync(note);
                }
                else
                {
                    // Se ha guardado como nota remota
                    if (nota.idNota != 0)
                    {
                        note = await App.Database.GetNoteAsync(nota.idNota);
                    }
                    else
                    {
                        note = new Nota();
                    }

                    if (note.ID == 0)
                    {
                        note = new Nota
                        {
                            Archivada    = nota.Archivada,
                            Eliminada    = nota.Eliminada,
                            Favorita     = nota.Favorita,
                            Grupo        = nota.Grupo,
                            Modificada   = nota.Modificada,
                            Notificar    = nota.Notificar,
                            Sincronizada = nota.Sincronizada,
                            Texto        = nota.Texto,
                            idNota       = nota.ID
                        };
                    }
                    else
                    {
                        note = nota.ComoNotaLocal();
                    }
                    note.idNota       = nota.ID;
                    note.Sincronizada = true;
                    await App.Database.SaveNoteAsync(note);

                    nota.idNota       = note.ID;
                    nota.Sincronizada = true;
                    NotaSQL.GuardarNota(nota);
                }
            }
            await Navigation.PopAsync();

            NotasActivas.TituloNotas();
        }
예제 #12
0
 public ServicioGenerico<UsuarioEntity> getUsuario(int tipo)
 {
     ServicioGenerico<UsuarioEntity> servicio;
     switch (tipo)
     {
         case Util.ACCESS: servicio = new UsuarioAccess(); break;
         case Util.SQL: servicio = new UsuarioSQL(); break;
         default: servicio = null; break;
     }
     return servicio;
 }
예제 #13
0
        //private void btnPrivacidad_Clicked(object sender, EventArgs e)
        //{
        //    _ = App.MostrarPoliticaPrivacidad();
        //}

        async void OnSaveButtonClicked(object sender, EventArgs e)
        {
            LabelAviso.IsVisible = false;

            var usuario = (UsuarioSQL)BindingContext;

            // no guardar el email en blanco
            if (string.IsNullOrEmpty(Email.Text))
            {
                LabelAviso.Text      = "El Email no puede estar en blanco.";
                LabelAviso.IsVisible = true;
                Email.Focus();
                return;
            }
            if (string.IsNullOrEmpty(Nombre.Text))
            {
                LabelAviso.Text      = "El Nombre no puede estar en blanco.";
                LabelAviso.IsVisible = true;
                Nombre.Focus();
                return;
            }
            if (ClaveSHA.Text.ToUpper() != _usuario.ClaveSHA)
            {
                LabelAviso.Text      = "La clave SHA no es modificable.";
                LabelAviso.IsVisible = true;
                ClaveSHA.Text        = _usuario.ClaveSHA;
                ClaveSHA.Focus();
                return;
            }

            // Si cambia de email no se guardan los cambios.
            if (usuario.Email.ToLower() != _usuario.Email.ToLower())
            {
                var sb = new StringBuilder();
                sb.AppendLine($"Hola {_usuario.Nombre},");
                sb.AppendLine($"Has solicitado cambiar el email usado en el programa: '{_usuario.Email}',");
                sb.AppendLine($"por otro diferente: '{usuario.Email}'.");
                sb.AppendLine();
                sb.AppendLine("Si no has sido tú, seguramente deberías cambiar el password porque alguien ha accedido con tus datos.");
                sb.AppendLine();
                sb.AppendLine("Si has sido tú, te mando otro mensaje a la nueva cuenta que quieres usar.");
                sb.AppendLine("Por favor, confirma (respondiendo a los dos mensajes) que es correcto ese cambio.");
                sb.AppendLine("También indicame el nuevo password a usar cuando respondas al mensaje recibido en la nueva cuenta de email.");
                sb.AppendLine("Después podrás cambiarlo usando esta misma página del Perfil del usuario.");
                sb.AppendLine();
                sb.AppendLine("Gracias.");
                sb.AppendLine("Guillermo");
                sb.AppendLine("---------");
                sb.AppendLine($"{App.AppName} {App.AppVersion}");
                await App.SendEmail("Cambio de email", sb.ToString(), _usuario.Email);

                sb.Clear();
                sb.AppendLine($"Hola {_usuario.Nombre},");
                sb.AppendLine($"El usuario de la aplicación {App.AppName} con email '{_usuario.Email}' ha solicitado cambiar el email");
                sb.AppendLine($"por este al que te mando este correo: '{usuario.Email}'.");
                sb.AppendLine();
                sb.AppendLine("Si no has sido tú, por favor, indícamelo y procederé como vea conveniente.");
                sb.AppendLine();
                sb.AppendLine("Si has sido tú, te he mandado otro mensaje a la cuenta desde la que has solicitado el cambio.");
                sb.AppendLine("Por favor, confirma (respondiendo a los dos mensajes) que es correcto ese cambio.");
                sb.AppendLine("También indicame aquí el nuevo password a usar.");
                sb.AppendLine("Después podrás cambiarlo usando esta misma página del Perfil del usuario.");
                sb.AppendLine();
                sb.AppendLine("Gracias.");
                sb.AppendLine("Guillermo");
                sb.AppendLine("---------");
                sb.AppendLine($"{App.AppName} {App.AppVersion}");
                await App.SendEmail("Cambio de email", sb.ToString(), usuario.Email);

                btnGuardar.IsEnabled = false;
                LabelAviso.Text      = "Has indicado un nuevo email. No se guardan los cambios. Responde a los 2 emails enviados. Gracias.";
                LabelAviso.IsVisible = true;
                Email.Focus();
            }
            else
            {
                // Guardar los cambios y asignar el usuario actual con los nuevos datos.
                if (Password.Text.Any())
                {
                    // Cambiar el password y guardar la nueva clave SHA
                    usuario.ClaveSHA   = UsuarioSQL.GenerarClaveSHA1(usuario.Email, Password.Text);
                    usuario.Password   = Password.Text;
                    App.UltimoPassword = usuario.Password;
                }
                UsuarioSQL.GuardarUsuario(usuario);
                UsuarioSQL.UsuarioLogin = usuario;
                App.UltimoUsuario       = usuario.Email;
                LabelAviso.Text         = "Se han guardado correctamente los nuevos datos.";
                LabelAviso.IsVisible    = true;
            }
        }
예제 #14
0
        async private void btnAcceder_Clicked(object sender, EventArgs e)
        {
            LabelInfo.IsVisible = false;

            //App.UsarNotasMaxConfig = false;

            if (UsuarioSQL.ComprobarContraseña(email.Text, password.Text))
            {
                // Guardar el último usuario que accede
                App.UltimoUsuario  = UsuarioSQL.UsuarioLogin.Email;
                App.UltimoPassword = UsuarioSQL.UsuarioLogin.Password;
                // Usar las opciones indicadas                      (26/May/21)
                App.RecordarPassword = chkRecordarPassword.IsToggled;
                App.RecordarUsuario  = chkRecordarUsuario.IsToggled;

                // si es el usuario de prueba, no hacer nada.
                if (UsuarioSQL.UsuarioLogin.Email.ToLower() == "prueba")
                {
                    LabelInfo.Text = "Has indicado el usuario de prueba. " +
                                     "Te recuerdo que estas notas estarán visibles a todos los que entren con estas credenciales.";
                    LabelInfo.IsVisible = true;
                    return;
                }
                // Avisar si no está validado
                if (!UsuarioSQL.UsuarioLogin.Validado)
                {
                    await App.CodigoValidación(UsuarioSQL.UsuarioLogin.Email);

                    var    minutos = 60 - DateTime.UtcNow.Minute;
                    string plural  = (minutos == 1) ? "" : "s";
                    LabelInfo.Text = "Aún no has validado tu email. " +
                                     "Te he enviado un correo con el código de validación. " +
                                     $"Úsalo en la página de validar antes de {minutos} minuto{plural}. Gracias.";
                    LabelInfo.IsVisible = true;
                }
                else
                {
                    // Guardar los datos de último acceso, etc.
                    UsuarioSQL.UsuarioLogin.UltimoAcceso    = DateTime.UtcNow;
                    UsuarioSQL.UsuarioLogin.VersionPrograma = $"{App.AppName} {App.AppVersion}";
                    // Por si accede después de usar el usuario local (23/May/21)
                    App.UsarNotasLocal = false;
                    UsuarioSQL.GuardarUsuario(UsuarioSQL.UsuarioLogin);

                    // si se deben mostrar las notas a notificar
                    if (App.Notificar)
                    {
                        // Comprobar si hay notas a notificar
                        var colNotificar = NotaSQL.Buscar(UsuarioSQL.UsuarioLogin.ID, "Notificar = 1 AND Eliminada = 0");
                        if (colNotificar.Count() == 0)
                        {
                            App.GuardarConfig();
                            VolverAMain();
                            return;
                        }
                        // Mostrar la ventana de las notas marcadas para notificar
                        await Navigation.PushAsync(new NotasMostrar(NotasDatosMostrar.Notificar));

                        //return;
                    }
                }
                App.GuardarConfig();
                VolverAMain();
            }
            else
            {
                LabelInfo.Text      = "El usuario y/o el password no son correctos.";
                LabelInfo.IsVisible = true;
                email.Focus();
                return;
            }
        }