Ejemplo n.º 1
0
 /// <summary>
 /// Comprobar las longitudes máximas                        (25/May/21)
 /// </summary>
 internal static UsuarioSQL ComprobarMaxTexto(UsuarioSQL usuario)
 {
     usuario.Email           = MaxTexto(usuario.Email, 50);
     usuario.Nombre          = MaxTexto(usuario.Nombre, 50);
     usuario.VersionPrograma = MaxTexto(usuario.VersionPrograma, 35);
     return(usuario);
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Inserta un nuevo usuario en la tabla Usuarios.
        /// </summary>
        /// <param name="usuario">El usuario a añadir.</param>
        /// <returns>El número de usuarios afectados (o cero si no se pudo insertar).</returns>
        internal static int Insert(UsuarioSQL usuario)
        {
            usuario = ComprobarMaxTexto(usuario);
            var msg = Crear(usuario);

            if (msg.StartsWith("ERROR"))
            {
                return(0); // new Task<int>(() => 0);
            }
            return(1);     // new Task<int>(() => 1);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Los grupos que hay asignados.
        /// </summary>
        /// <returns>Una colección de tipo string</returns>
        /// <remarks>Aquí se tiene en cuenta si se están usando las notas locales o las remotas.</remarks>
        public static List <Grupo> Grupos(UsuarioSQL usuario)
        {
            if (App.UsarNotasLocal)
            {
                NotasGrupos = App.Database.Notas(App.Database.GetNotesAsync());
            }
            else
            {
                //// Si el usuario es elGuille, mostrar todos los grupos
                //// si no, solo los del usuario y todas las notas (estén o no archivadas o eliminadas)
                //if (usuario.Email.ToLower().IndexOf("elguille.info@") > -1)
                //    colNotas = NotaSQL.NotasUsuario(0);
                //else
                //    colNotas = NotaSQL.NotasUsuario(usuario.ID);

                // Mostrar solo las notas del usuario logueado.
                NotasGrupos = NotaSQL.NotasUsuario(usuario.ID);
            }

            // Primero añadir a la colección de tipo Dictionary
            // para evitar repetidos
            var gruposDict = new Dictionary <string, Grupo>();

            foreach (var s in NotasGrupos)
            {
                if (!gruposDict.ContainsKey(s.Grupo))
                {
                    gruposDict.Add(s.Grupo, new Grupo());
                }
                var g = gruposDict[s.Grupo];
                g.Nombre  = s.Grupo;
                g.Usuario = usuario.Email;
                g.Notas++;
                if (s.Archivada)
                {
                    g.NotasArchivadas++;
                }
                if (s.Eliminada)
                {
                    g.NotasEliminadas++;
                }
                if (s.Favorita)
                {
                    g.NotasFavoritas++;
                }
            }
            var grupos = new List <Grupo>();

            foreach (var gd in gruposDict.Keys)
            {
                grupos.Add(gruposDict[gd]);
            }
            return(grupos);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Elimina el usuario con el ID indicado.
        /// En realidad no se elimina, se indica que está de baja con la fecha UTC actual y se marca Eliminado = true.
        /// </summary>
        /// <param name="usuario">El usuario a eliminar.</param>
        /// <returns>El número de usuarios afectados (o cero si no se pudo eliminar).</returns>
        public static int Delete(UsuarioSQL usuario)
        {
            usuario.Eliminado = true;
            var msg = Actualizar(usuario);

            //var sel = $"ID = {usuario.ID}";
            //var msg = Borrar(sel);

            if (msg.StartsWith("ERROR"))
            {
                return(0); // new Task<int>(() => 0);
            }
            return(1);     // new Task<int>(() => 1);
        }
Ejemplo n.º 5
0
        ///// <summary>
        ///// El password usado para hacer Loging.
        ///// </summary>
        //private static string PasswordUsuario { get; set; }


        /// <summary>
        /// Guarda o actualiza la nota indicada.
        /// Si el ID no es cero, la actualiza, si es cero la crea.
        /// </summary>
        /// <param name="usuario">La nota a guardar.</param>
        /// <returns>
        /// El número de notas afectadas (0 si no se guardó o 1 si se actualizó o creó correctamente).
        /// </returns>
        public static int GuardarUsuario(UsuarioSQL usuario, string password = "")
        {
            if (usuario is null)
            {
                return(0); // new Task<int>(() => 0);
            }
            if (usuario.ID == 0 && password.Any())
            {
                usuario.ClaveSHA = GenerarClaveSHA1(usuario.Email.TrimEnd(), password);
                return(UsuarioSQL.Insert(usuario));
            }
            else if (usuario.ID != 0)
            {
                return(UsuarioSQL.Update(usuario));
            }
            return(0);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Comprueba si los datos de email y password son correctos.
        /// Si es correcto, se asigna al usuario que ha hecho login.
        /// </summary>
        /// <param name="email">El email del usuario.</param>
        /// <param name="password">El password indicado por el usuario.</param>
        /// <returns>Un valor true si la combinación es correcta, false si no lo es.</returns>
        /// <remarks>Se asigna UsuarioLogin, si el ID es cero es que el usuario no existe.</remarks>
        public static bool ComprobarContraseña(string email, string password)
        {
            var claveSHA = GenerarClaveSHA1(email.TrimEnd(), password);
            var usuario  = Usuario(email.TrimEnd());

            if (claveSHA == usuario.ClaveSHA)
            {
                // Asignar el usuario, si no existe el ID será 0
                UsuarioSQL.UsuarioLogin          = usuario;
                UsuarioSQL.UsuarioLogin.Password = password; // .PasswordUsuario = password;

                return(true);
            }
            else
            {
                return(false);
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Asigna un objeto a partir de los datos del SQLReader.
        /// </summary>
        /// <param name="reader">El SQLReader del que se sacará la información.</param>
        /// <returns>Un objeto del tipo <see cref="UsuarioSQL"/>.</returns>
        private static UsuarioSQL AsignarUsuario(SqlDataReader reader)
        {
            var usuario = new UsuarioSQL();

            var id = 0;

            int.TryParse(reader["ID"].ToString(), out id);
            usuario.ID       = id;
            usuario.Email    = reader["Email"].ToString().TrimEnd();
            usuario.Nombre   = reader["Nombre"].ToString().TrimEnd();
            usuario.ClaveSHA = reader["ClaveSHA"].ToString();
            var fec = new DateTime(1900, 1, 1);

            DateTime.TryParse(reader["Alta"].ToString(), out fec);
            usuario.Alta = fec;
            fec          = DateTime.Now;
            DateTime.TryParse(reader["UltimoAcceso"].ToString(), out fec);
            usuario.UltimoAcceso = fec;
            var valorBool = false;

            bool.TryParse(reader["Eliminado"].ToString(), out valorBool);
            usuario.Eliminado = valorBool;
            valorBool         = false;
            bool.TryParse(reader["Validado"].ToString(), out valorBool);
            usuario.Validado        = valorBool;
            usuario.VersionPrograma = reader["VersionPrograma"].ToString().TrimEnd();
            id = 0;
            int.TryParse(reader["Cuota"].ToString(), out id);
            usuario.Cuota = id;
            decimal dec = 0;

            decimal.TryParse(reader["Pagos"].ToString(), out dec);
            usuario.Pagos = dec;
            valorBool     = false;
            bool.TryParse(reader["UsarNotasMax"].ToString(), out valorBool);
            usuario.UsarNotasMax = valorBool;

            return(usuario);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Devuelve el usuario con ese correo.
        /// Si hubiese más de uno (no debería),
        /// devolverá el último que se registró.
        /// </summary>
        /// <param name="email">El email del usuario a obtener.</param>
        /// <returns>Un objeto del tipo <see cref="UsuarioSQL"/>. Si el usuario no existe, el ID será 0.</returns>
        /// <remarks>Asigna UsuarioLogin.</remarks>
        public static UsuarioSQL Usuario(string email)
        {
            var usuario = new UsuarioSQL();

            var sel = $"SELECT * FROM {TablaUsuarios} " +
                      $"WHERE Email = '{email.TrimEnd()}' " +
                      "ORDER BY ID";
            var con = new SqlConnection(CadenaConexion);

            try
            {
                con.Open();
                var cmd = new SqlCommand(sel, con);

                var reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    //usuario = await Task.Run<UsuarioSQL>(() => AsignarUsuario(reader));
                    usuario = AsignarUsuario(reader);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
            finally
            {
                if (!(con is null))
                {
                    con.Close();
                }
            }

            UsuarioLogin = usuario;

            return(usuario); // new Task<UsuarioSQL>(()=> usuario);
        }
Ejemplo n.º 9
0
        /// <sumary>
        /// Crear un nuevo registro
        /// En caso de error, devolverá la cadena de error empezando por ERROR.
        /// </sumary>
        private static string Crear(UsuarioSQL usuario)
        {
            string msg;

            using (SqlConnection con = new SqlConnection(CadenaConexion))
            {
                SqlTransaction tran = null;

                try
                {
                    con.Open();
                    tran = con.BeginTransaction();

                    SqlCommand cmd = new SqlCommand();
                    cmd.CommandType = CommandType.Text;
                    cmd.Connection  = con;

                    string sCommand;
                    sCommand        = $"INSERT INTO {TablaUsuarios} (Email, Nombre, ClaveSHA, Alta, UltimoAcceso, Eliminado, Validado, VersionPrograma, Cuota, Pagos, UsarNotasMax) VALUES(@Email, @Nombre, @ClaveSHA, @Alta, @UltimoAcceso, @Eliminado, @Validado, @VersionPrograma, @Cuota, @Pagos, @UsarNotasMax) SELECT @@Identity";
                    cmd.CommandText = sCommand;

                    cmd.Parameters.AddWithValue("@Email", usuario.Email.TrimEnd());
                    cmd.Parameters.AddWithValue("@Nombre", usuario.Nombre.TrimEnd());
                    cmd.Parameters.AddWithValue("@ClaveSHA", usuario.ClaveSHA);
                    cmd.Parameters.AddWithValue("@Alta", usuario.Alta);
                    cmd.Parameters.AddWithValue("@UltimoAcceso", usuario.UltimoAcceso);
                    cmd.Parameters.AddWithValue("@Eliminado", usuario.Eliminado);
                    cmd.Parameters.AddWithValue("@Validado", usuario.Validado);
                    cmd.Parameters.AddWithValue("@VersionPrograma", usuario.VersionPrograma.TrimEnd());
                    cmd.Parameters.AddWithValue("@Cuota", usuario.Cuota);
                    cmd.Parameters.AddWithValue("@Pagos", usuario.Pagos);
                    cmd.Parameters.AddWithValue("@UsarNotasMax", usuario.UsarNotasMax);

                    cmd.Transaction = tran;

                    int id = System.Convert.ToInt32(cmd.ExecuteScalar());
                    usuario.ID = id;

                    // Si llega aquí es que todo fue bien,
                    // por tanto, llamamos al método Commit.
                    tran.Commit();

                    msg = "Se ha creado un Usuarios correctamente.";
                }
                catch (Exception ex)
                {
                    msg = $"ERROR: {ex.Message}";
                    try
                    {
                        // Si hay error, deshacemos lo que se haya hecho.
                        tran.Rollback();
                    }
                    catch (Exception ex2)
                    {
                        msg = $"ERROR RollBack: {ex2.Message})";
                    }
                }

                finally
                {
                    if (!(con is null))
                    {
                        con.Close();
                    }
                }
            }
            return(msg);
        }
Ejemplo n.º 10
0
        /// <sumary>
        /// Actualiza los datos de la instancia actual.
        /// En caso de error, devolverá la cadena de error empezando por ERROR:.
        /// </sumary>
        /// <remarks>
        /// Usando ExecuteNonQuery si la instancia no hace referencia a un registro existente, NO se creará uno nuevo.
        /// </remarks>
        private static string Actualizar(UsuarioSQL usuario)
        {
            // Actualiza los datos indicados
            // El parámetro, que es una cadena de selección, indicará el criterio de actualización

            string msg;

            using (SqlConnection con = new SqlConnection(CadenaConexion))
            {
                SqlTransaction tran = null;
                try
                {
                    con.Open();
                    tran = con.BeginTransaction();

                    SqlCommand cmd = new SqlCommand();
                    cmd.CommandType = CommandType.Text;
                    cmd.Connection  = con;

                    string sCommand;
                    sCommand        = $"UPDATE {TablaUsuarios} SET Email = @Email, Nombre = @Nombre, ClaveSHA = @ClaveSHA, Alta = @Alta, UltimoAcceso = @UltimoAcceso, Eliminado = @Eliminado, Validado = @Validado, VersionPrograma = @VersionPrograma, Cuota = @Cuota, Pagos = @Pagos, UsarNotasMax = @UsarNotasMax WHERE (ID = @ID)";
                    cmd.CommandText = sCommand;

                    cmd.Parameters.AddWithValue("@ID", usuario.ID);
                    cmd.Parameters.AddWithValue("@Email", usuario.Email.TrimEnd());
                    cmd.Parameters.AddWithValue("@Nombre", usuario.Nombre.TrimEnd());
                    cmd.Parameters.AddWithValue("@ClaveSHA", usuario.ClaveSHA);
                    cmd.Parameters.AddWithValue("@Alta", usuario.Alta);
                    cmd.Parameters.AddWithValue("@UltimoAcceso", usuario.UltimoAcceso);
                    cmd.Parameters.AddWithValue("@Eliminado", usuario.Eliminado);
                    cmd.Parameters.AddWithValue("@Validado", usuario.Validado);
                    cmd.Parameters.AddWithValue("@VersionPrograma", usuario.VersionPrograma.TrimEnd());
                    cmd.Parameters.AddWithValue("@Cuota", usuario.Cuota);
                    cmd.Parameters.AddWithValue("@Pagos", usuario.Pagos);
                    cmd.Parameters.AddWithValue("@UsarNotasMax", usuario.UsarNotasMax);

                    cmd.Transaction = tran;
                    cmd.ExecuteNonQuery();

                    // Si llega aquí es que todo fue bien,
                    // por tanto, llamamos al método Commit.
                    tran.Commit();

                    msg = "Se ha actualizado un Usuarios correctamente.";
                }
                catch (Exception ex)
                {
                    msg = $"ERROR: {ex.Message}";
                    // Si hay error, deshacemos lo que se haya hecho.
                    try
                    {
                        tran.Rollback();
                    }
                    catch (Exception ex2)
                    {
                        msg = $"ERROR RollBack: {ex2.Message})";
                    }
                }

                finally
                {
                    if (!(con is null))
                    {
                        con.Close();
                    }
                }
            }
            return(msg);
        }