コード例 #1
0
            public async Task <UsuarioData> Handle(Ejecuta request, CancellationToken cancellationToken)
            {
                var usuario = await userManager.FindByNameAsync(usuarioSesion.ObtenerUsuarioSesion());

                var rolesUsuario = await userManager.GetRolesAsync(usuario);

                var listaRoles = new List <string>(rolesUsuario);

                var imagenPerfil = await context.Documento.Where(x => x.ObjetoReferencia == new Guid(usuario.Id)).FirstOrDefaultAsync();

                ImagenGeneral imagenGeneral = null;

                if (imagenPerfil != null)
                {
                    imagenGeneral = new ImagenGeneral
                    {
                        Data      = Convert.ToBase64String(imagenPerfil.Contenido),
                        Nombre    = imagenPerfil.Nombre,
                        Extension = imagenPerfil.Extension
                    };
                }

                return(new UsuarioData
                {
                    NombreCompleto = usuario.NombreCompleto,
                    UserName = usuario.UserName,
                    Token = jwtGenerador.CrearToken(usuario, listaRoles),
                    Email = usuario.Email,
                    ImagenPerfil = imagenGeneral
                });
            }
コード例 #2
0
            public async Task <UsuarioData> Handle(Ejecuta request, CancellationToken cancellationToken)
            {
                var usuario = await _userManager.FindByEmailAsync(request.Email);

                if (usuario == null)
                {
                    throw new ManejadorException(HttpStatusCode.Unauthorized);
                }

                var resultado = await _signInManager.CheckPasswordSignInAsync(usuario, request.Password, false);

                //Sacar lista de roles
                var resulRoles = await _userManager.GetRolesAsync(usuario);

                //para transformar de IList(resulRoles) a List
                var listaRoles = new List <string>(resulRoles);


                //
                var imagenPerfil = await _context.Documento.Where(x => x.ObjetoReferencia == new Guid(usuario.Id)).FirstOrDefaultAsync();

                if (resultado.Succeeded)
                {
                    if (imagenPerfil != null)
                    {
                        var imagenCliente = new ImagenGeneral {
                            Data      = Convert.ToBase64String(imagenPerfil.Contenido),
                            Extension = imagenPerfil.Extension,
                            Nombre    = imagenPerfil.Nombre
                        };

                        return(new UsuarioData()
                        {
                            //NombreCompleto = usuario.NombreCompleto,
                            Nombre = usuario.Nombre,
                            Apellidos = usuario.Apellidos,
                            Token = _jwtGenerador.CrearToken(usuario, listaRoles),
                            UserName = usuario.UserName,
                            Email = usuario.Email,
                            ImagenPerfil = imagenCliente
                        });
                    }
                    else
                    {
                        return(new UsuarioData()
                        {
                            //NombreCompleto = usuario.NombreCompleto,
                            Nombre = usuario.Nombre,
                            Apellidos = usuario.Apellidos,
                            Token = _jwtGenerador.CrearToken(usuario, listaRoles),
                            UserName = usuario.UserName,
                            Email = usuario.Email,
                            //Imagen = null
                        });
                    }
                }
                throw new ManejadorException(HttpStatusCode.Unauthorized);
            }
コード例 #3
0
            public async Task <UsuarioData> Handle(Ejecuta request, CancellationToken cancellationToken)
            {
                var usuario = await _userManager.FindByEmailAsync(request.Email);

                if (usuario == null)
                {
                    //throw new ManejadorExcepcion(HttpStatusCode.Unauthorized);
                    usuario = await _userManager.FindByNameAsync(request.Email);

                    if (usuario == null)
                    {
                        throw new ManejadorExcepcion(HttpStatusCode.Unauthorized, new { mensaje = "El email/usuario ingresado no existe" });
                    }
                }

                var resultado = await _singInManager.CheckPasswordSignInAsync(usuario, request.Password, false);

                if (resultado.Succeeded)
                {
                    var resultadoRoles = await _userManager.GetRolesAsync(usuario);

                    var listaRoles = new List <string>(resultadoRoles);

                    var imagenPerfil = await _context.Documento.Where(x => x.ObjetoReferencia == new Guid(usuario.Id)).FirstAsync();

                    if (imagenPerfil != null)
                    {
                        var imagenCliente = new ImagenGeneral {
                            Data      = Convert.ToBase64String(imagenPerfil.Contenido),
                            Extension = imagenPerfil.Extension,
                            Nombre    = imagenPerfil.Nombre
                        };

                        return(new UsuarioData {
                            NombreCompleto = usuario.NombreCompleto,
                            Token = _ijwtgenerador.CrearToken(usuario, listaRoles),
                            UserName = usuario.UserName,
                            Email = usuario.Email,
                            ImagenPerfil = imagenCliente
                        });
                    }
                    else
                    {
                        return(new UsuarioData {
                            NombreCompleto = usuario.NombreCompleto,
                            Token = _ijwtgenerador.CrearToken(usuario, listaRoles),
                            UserName = usuario.UserName,
                            Email = usuario.Email
                        });
                    }
                }
                else
                {
                    throw new ManejadorExcepcion(HttpStatusCode.Unauthorized);
                }
            }
コード例 #4
0
ファイル: Login.cs プロジェクト: Bruno191927/ProyectoCoreBack
            public async Task <UsuarioData> Handle(Ejecuta request, CancellationToken cancellationToken)
            {
                //buscar usuario
                var usuario = await _userManager.FindByEmailAsync(request.Email);

                if (usuario == null)
                {
                    throw new ExceptionHandler(HttpStatusCode.Unauthorized);
                }
                //checkar password
                var resultado = await _signInManager.CheckPasswordSignInAsync(usuario, request.Password, false);

                //agregar roles
                var resultadoRoles = await _userManager.GetRolesAsync(usuario);

                var listaRoles   = new List <string>(resultadoRoles);
                var imagenPerfil = await _context.Documento.Where(x => x.ObjectoReferencia == new Guid(usuario.Id)).FirstOrDefaultAsync();

                //generar
                if (resultado.Succeeded)
                {
                    //obtener imagen

                    if (imagenPerfil != null)
                    {
                        var imagenCliente = new ImagenGeneral {
                            Data      = Convert.ToBase64String(imagenPerfil.Contenido),
                            Extension = imagenPerfil.Extension,
                            Nombre    = imagenPerfil.Nombre
                        };
                        return(new UsuarioData {
                            NombreCompleto = usuario.NombreCompleto,
                            Token = _jwtGenerador.CrearToken(usuario, listaRoles),
                            Username = usuario.UserName,
                            Email = usuario.Email,
                            ImagenPerfil = imagenCliente
                        });
                    }
                    else
                    {
                        return(new UsuarioData {
                            NombreCompleto = usuario.NombreCompleto,
                            Token = _jwtGenerador.CrearToken(usuario, listaRoles),
                            Username = usuario.UserName,
                            Email = usuario.Email,
                            Imagen = null
                        });
                    }
                }

                throw new ExceptionHandler(HttpStatusCode.Unauthorized);
            }
コード例 #5
0
      public async Task<UsuarioData> Handle(Ejecuta request, CancellationToken cancellationToken)
      {
        var usuario = await this.userManager.FindByEmailAsync(request.Email);

        if (usuario == null)
        {
          throw new ManejadorExcepcion(HttpStatusCode.Unauthorized);
        }

        var resultado = await signInManager.CheckPasswordSignInAsync(usuario, request.Password, false);


        if (resultado.Succeeded)
        {

          var listaRoles = await this.userManager.GetRolesAsync(usuario);
          var roles = new List<string>(listaRoles);

          var imagen = await this.context.Documento.Where(d => d.ObjetoReferencia == new Guid(usuario.Id)).FirstOrDefaultAsync();

          ImagenGeneral imagenUsuario = null;
          if (imagen != null)
          {
            imagenUsuario = new ImagenGeneral
            {
              Data = Convert.ToBase64String(imagen.Contenido),
              Extension = imagen.Extension,
              Nombre = imagen.Nombre
            };
          }

          return new UsuarioData
          {
            NombreCompleto = usuario.NombreCompleto,
            Token = this.jwtGenerador.CrearToken(usuario, new List<string>(listaRoles)),
            Email = usuario.Email,
            UserName = usuario.UserName,
            ImagenPerfil = imagenUsuario,
          };
        }

        throw new ManejadorExcepcion(HttpStatusCode.Unauthorized);




      }
コード例 #6
0
            public async Task <UsuarioData> Handle(Ejecuta request, CancellationToken cancellationToken)
            {
                var usuario = await _userManager.FindByNameAsync(_iusuarioSesion.ObtenerUsuarioSesion());

                //Console.WriteLine("usuario: "+usuario.Email);

                if (usuario == null)
                {
                    throw new ManejadorExcepcion(HttpStatusCode.NotFound, new { mensaje = "No existe usuario o token no es valido" });
                }

                var resultadoRoles = await _userManager.GetRolesAsync(usuario);

                var listaRoles   = new List <string>(resultadoRoles);
                var imagenPerfil = await _context.Documento.Where(x => x.ObjetoReferencia == new Guid(usuario.Id)).FirstOrDefaultAsync();

                if (imagenPerfil != null)
                {
                    var imagenCliente = new ImagenGeneral {
                        Data      = Convert.ToBase64String(imagenPerfil.Contenido),
                        Extension = imagenPerfil.Extension,
                        Nombre    = imagenPerfil.Nombre
                    };

                    return(new UsuarioData {
                        NombreCompleto = usuario.NombreCompleto,
                        UserName = usuario.UserName,
                        Token = _ijwtGenerador.CrearToken(usuario, listaRoles),
                        Email = usuario.Email,
                        ImagenPerfil = imagenCliente
                    });
                }
                else
                {
                    return(new UsuarioData {
                        NombreCompleto = usuario.NombreCompleto,
                        UserName = usuario.UserName,
                        Token = _ijwtGenerador.CrearToken(usuario, listaRoles),
                        Email = usuario.Email
                    });
                }
            }
コード例 #7
0
            public async Task <UsuarioData> Handle(Ejecuta request, CancellationToken cancellationToken)
            {
                var user = await _userManager.FindByNameAsync(_userSesion.ObtenerUsuarioSesion());

                //Sacar lista de roles
                var resulRoles = await _userManager.GetRolesAsync(user);

                //para transformar de IList(resulRoles) a List
                var listaRoles = new List <string>(resulRoles);

                //Validaa si el usuario tiene una imagen de perfil
                var imagenPerfil = await _context.Documento.Where(x => x.ObjetoReferencia == new Guid(user.Id)).FirstOrDefaultAsync();

                if (imagenPerfil != null)//Si es imagenPerfil existe, si es diferente de nulo
                {
                    var imagenCliente = new ImagenGeneral {
                        Data      = Convert.ToBase64String(imagenPerfil.Contenido),
                        Extension = imagenPerfil.Extension,
                        Nombre    = imagenPerfil.Nombre
                    };

                    return(new UsuarioData {
                        Nombre = user.Nombre,
                        Apellidos = user.Apellidos,
                        UserName = user.UserName,
                        Token = _jwtGenerador.CrearToken(user, listaRoles),
                        Email = user.Email,
                        ImagenPerfil = imagenCliente
                    });
                }
                else
                {
                    return(new UsuarioData {
                        //NombreCompleto = user.NombreCompleto,
                        Nombre = user.Nombre,
                        Apellidos = user.Apellidos,
                        UserName = user.UserName,
                        Token = _jwtGenerador.CrearToken(user, listaRoles),
                        Email = user.Email,
                    });
                }
            }
コード例 #8
0
            public async Task <UsuarioData> Handle(Ejecutar request, CancellationToken cancellationToken)
            {
                var usuario = await _userManager.FindByNameAsync(_usuarioSesion.ObtenerUsuarioSesion());

                var resultadoRoles = await _userManager.GetRolesAsync(usuario);

                var listaRoles = new List <string>(resultadoRoles);

                var imagenPerfil = await _context.Documento
                                   .Where(x => x.ObjetoReferencia == new System.Guid(usuario.Id)).FirstOrDefaultAsync();

                if (imagenPerfil != null)
                {
                    var imagenCliente = new ImagenGeneral
                    {
                        Data      = Convert.ToBase64String(imagenPerfil.Contenido),
                        Extension = imagenPerfil.Extension,
                        Nombre    = imagenPerfil.Nombre
                    };

                    return(new UsuarioData
                    {
                        NombreCompleto = usuario.NombreCompleto,
                        Username = usuario.UserName,
                        Token = _jwtGenerator.CrearToken(usuario, listaRoles),
                        Email = usuario.Email,
                        ImagenPerfil = imagenCliente
                    });
                }
                else
                {
                    return(new UsuarioData
                    {
                        NombreCompleto = usuario.NombreCompleto,
                        Username = usuario.UserName,
                        Token = _jwtGenerator.CrearToken(usuario, listaRoles),
                        Email = usuario.Email,
                    });
                }
            }
コード例 #9
0
            public async Task <UsuarioData> Handle(Ejecuta request, CancellationToken cancellationToken)
            {
                var usuarioIden = await _userManager.FindByNameAsync(request.Username);

                if (usuarioIden == null)
                {
                    throw new ExceptionHandler(HttpStatusCode.NotFound, new { mensaje = "El usuario no existe" });
                }

                var resultado = await _context.Users.Where(x => x.Email == request.Email && x.UserName != request.Username).AnyAsync();

                if (resultado)
                {
                    throw new ExceptionHandler(HttpStatusCode.InternalServerError, new { mensaje = "El email ya esta en uso" });
                }

                //Actualizar o guardar imagenes
                if (request.ImagenPerfil != null)
                {
                    var resultadoImagen = await _context.Documento.Where(x => x.ObjectoReferencia == new Guid(usuarioIden.Id)).FirstOrDefaultAsync();

                    if (resultadoImagen == null)
                    {
                        var imagen = new Documento {
                            Contenido         = System.Convert.FromBase64String(request.ImagenPerfil.Data),
                            Nombre            = request.ImagenPerfil.Nombre,
                            Extension         = request.ImagenPerfil.Extension,
                            ObjectoReferencia = new Guid(usuarioIden.Id),
                            DocumentoId       = Guid.NewGuid(),
                            FechaCreacion     = DateTime.UtcNow
                        };
                        _context.Documento.Add(imagen);
                    }
                    else
                    {
                        resultadoImagen.Contenido = System.Convert.FromBase64String(request.ImagenPerfil.Data);
                        resultadoImagen.Nombre    = request.ImagenPerfil.Nombre;
                        resultadoImagen.Extension = request.ImagenPerfil.Extension;
                    }
                }


                usuarioIden.NombreCompleto = request.NombreCompleto;
                usuarioIden.PasswordHash   = _passwordHasher.HashPassword(usuarioIden, request.Password);
                usuarioIden.Email          = request.Email;

                var resultadoUpdate = await _userManager.UpdateAsync(usuarioIden);

                var resultadoRoles = await _userManager.GetRolesAsync(usuarioIden);

                var listaRoles = new List <string>(resultadoRoles);

                var imagenPerfil = await _context.Documento.Where(X => X.ObjectoReferencia == new Guid(usuarioIden.Id)).FirstAsync();

                ImagenGeneral imagenGeneral = null;

                if (imagenPerfil != null)
                {
                    imagenGeneral = new ImagenGeneral {
                        Data      = Convert.ToBase64String(imagenPerfil.Contenido),
                        Nombre    = imagenPerfil.Nombre,
                        Extension = imagenPerfil.Extension
                    };
                }


                if (resultadoUpdate.Succeeded)
                {
                    return(new UsuarioData {
                        NombreCompleto = usuarioIden.NombreCompleto,
                        Username = usuarioIden.UserName,
                        Email = usuarioIden.Email,
                        Token = _jwtGenerador.CrearToken(usuarioIden, listaRoles),
                        ImagenPerfil = imagenGeneral
                    });
                }

                throw new Exception("No se pudo actualizar");
            }
コード例 #10
0
            public async Task <UsuarioData> Handle(Ejecuta request, CancellationToken cancellationToken)
            {
                var usuario = await _userManager.FindByNameAsync(request.UserName);

                if (usuario == null)
                {
                    throw new ManejadorExcepcion(HttpStatusCode.NotFound, new { mensaje = "No se encontro un usuario con ese UserName" });
                }

                var resultado = await _context.Users.Where(x => x.Email == request.Email && x.UserName != request.UserName).AnyAsync();

                if (resultado)
                {
                    throw new ManejadorExcepcion(HttpStatusCode.InternalServerError, "Este email pertenece a otro usuario");
                }

                if (request.ImagenPerfil != null)
                {
                    Console.WriteLine("Le estoy enviando una imagen desde el front");
                    var resultadoImagen = await _context.Documento.Where(x => x.ObjetoReferencia == new Guid(usuario.Id)).FirstOrDefaultAsync();

                    if (resultadoImagen == null)
                    {
                        var imagen = new Documento {
                            Contenido        = System.Convert.FromBase64String(request.ImagenPerfil.Data),
                            Nombre           = request.ImagenPerfil.Nombre,
                            Extension        = request.ImagenPerfil.Extension,
                            ObjetoReferencia = new Guid(usuario.Id),
                            DocumentoId      = Guid.NewGuid(),
                            FechaCreacion    = DateTime.UtcNow
                        };
                        Console.WriteLine("Añadir nueva imagen de perfil");
                        _context.Documento.Add(imagen);
                    }
                    else
                    {
                        Console.WriteLine("Actualizar imagen de perfil");
                        resultadoImagen.Contenido = System.Convert.FromBase64String(request.ImagenPerfil.Data);
                        resultadoImagen.Nombre    = request.ImagenPerfil.Nombre;
                        resultadoImagen.Extension = request.ImagenPerfil.Extension;
                    }
                }

                usuario.NombreCompleto = request.NombreCompleto;
                usuario.PasswordHash   = _ipasswordHasher.HashPassword(usuario, request.Password);
                usuario.Email          = request.Email;

                var updateUsuario = await _userManager.UpdateAsync(usuario);

                var listaRolesIList = await _userManager.GetRolesAsync(usuario);

                var listaRoles = new List <string>(listaRolesIList);

                var imagenPerfil = await _context.Documento.Where(x => x.ObjetoReferencia == new Guid(usuario.Id)).FirstOrDefaultAsync();

                ImagenGeneral imagenGeneral = null;

                if (imagenPerfil != null)
                {
                    imagenGeneral = new ImagenGeneral {
                        Data      = Convert.ToBase64String(imagenPerfil.Contenido),
                        Nombre    = imagenPerfil.Nombre,
                        Extension = imagenPerfil.Extension
                    };
                }

                if (updateUsuario.Succeeded)
                {
                    return(new UsuarioData {
                        NombreCompleto = usuario.NombreCompleto,
                        UserName = usuario.UserName,
                        Email = usuario.Email,
                        Token = _ijwtGenerador.CrearToken(usuario, listaRoles),
                        ImagenPerfil = imagenGeneral
                    });
                }

                throw new Exception("No se pudo actualizar los datos del usuario");
            }
コード例 #11
0
            public async Task <UsuarioData> Handle(Ejecuta request, CancellationToken cancellationToken)
            {
                var usuario = await userManager.FindByNameAsync(request.UserName);

                if (usuario is null)
                {
                    throw new ManejadorExcepcion(HttpStatusCode.NotFound, new { mensaje = "No se encontro el usuario" });
                }

                var existeEmail = await context.Users.Where(x => x.Email == request.Email && x.UserName != request.UserName).AnyAsync();

                if (existeEmail)
                {
                    throw new ManejadorExcepcion(HttpStatusCode.InternalServerError, new { mensaje = "este email pertenece a otro usuario" });
                }

                if (request.ImagenPerfil != null)
                {
                    var resultadoImagen = await context.Documento.Where(x => x.ObjetoReferencia == new Guid(usuario.Id)).FirstOrDefaultAsync();

                    if (resultadoImagen is null)
                    {
                        var imagen = new Documento
                        {
                            Contenido        = Convert.FromBase64String(request.ImagenPerfil.Data),
                            Nombre           = request.ImagenPerfil.Nombre,
                            Extension        = request.ImagenPerfil.Extension,
                            ObjetoReferencia = new Guid(usuario.Id),
                            DocumentoId      = Guid.NewGuid(),
                            FechaCreacion    = DateTime.UtcNow
                        };
                        context.Documento.Add(imagen);
                    }
                    else
                    {
                        resultadoImagen.Contenido = Convert.FromBase64String(request.ImagenPerfil.Data);
                        resultadoImagen.Nombre    = request.ImagenPerfil.Nombre;
                        resultadoImagen.Extension = request.ImagenPerfil.Extension;
                    }
                }

                usuario.NombreCompleto = request.NombreCompleto;
                usuario.PasswordHash   = passwordHasher.HashPassword(usuario, request.Password);
                usuario.Email          = request.Email;

                var resultado = await userManager.UpdateAsync(usuario);

                var usuarioRoles = await userManager.GetRolesAsync(usuario);

                var imagenPerfil = await context.Documento.Where(x => x.ObjetoReferencia == new Guid(usuario.Id)).FirstOrDefaultAsync();

                ImagenGeneral imagenCliente = null;

                if (imagenPerfil != null)
                {
                    imagenCliente = new ImagenGeneral
                    {
                        Data      = Convert.ToBase64String(imagenPerfil.Contenido),
                        Extension = imagenPerfil.Extension,
                        Nombre    = imagenPerfil.Nombre
                    };
                }

                if (resultado.Succeeded)
                {
                    return new UsuarioData
                           {
                               NombreCompleto = usuario.NombreCompleto,
                               UserName       = usuario.UserName,
                               Email          = usuario.Email,
                               Token          = jwtGenerador.CrearToken(usuario, usuarioRoles.ToList()),
                               ImagenPerfil   = imagenCliente
                           }
                }
                ;

                throw new Exception("No se pudo actualizar el usuario");
            }
        }
コード例 #12
0
            public async Task <UsuarioData> Handle(Ejecuta request, CancellationToken cancellationToken)
            {
                var user = await this.userManager.FindByNameAsync(request.Username);

                if (user == null)
                {
                    throw new ManejadorExcepcion(HttpStatusCode.NotFound, new { mensaje = "No existe el usuario ingresado." });
                }

                var existeOtroUsuario = await this.context.Users.Where(u => u.Email == request.Email && u.UserName != request.Username).AnyAsync();

                if (existeOtroUsuario)
                {
                    throw new ManejadorExcepcion(HttpStatusCode.InternalServerError, new { mensaje = "Ya existe ese mail en otro usuario" });
                }

                if (request.ImagenPerfil != null)
                {
                    var userIdGuid      = new Guid(user.Id);
                    var resultadoImagen = await this.context.Documento.Where(d => d.ObjetoReferencia == userIdGuid).FirstOrDefaultAsync();

                    if (resultadoImagen == null)
                    {
                        var imagen = new Documento
                        {
                            DocumentoId      = Guid.NewGuid(),
                            Contenido        = Convert.FromBase64String(request.ImagenPerfil.Data),
                            Nombre           = request.ImagenPerfil.Nombre,
                            Extension        = request.ImagenPerfil.Extension,
                            ObjetoReferencia = userIdGuid,
                            FechaCreacion    = DateTime.UtcNow
                        };

                        await this.context.Documento.AddAsync(imagen);
                    }
                    else
                    {
                        resultadoImagen.Contenido        = Convert.FromBase64String(request.ImagenPerfil.Data);
                        resultadoImagen.Nombre           = request.ImagenPerfil.Nombre;
                        resultadoImagen.Extension        = request.ImagenPerfil.Extension;
                        resultadoImagen.ObjetoReferencia = userIdGuid;
                    }

                    await this.context.SaveChangesAsync(); //???
                }

                user.NombreCompleto = request.NombreCompleto;
                user.PasswordHash   = this.passwordHasher.HashPassword(user, request.Password);
                user.Email          = request.Email;
                var resultado = await this.userManager.UpdateAsync(user);


                if (resultado.Succeeded)
                {
                    var imagenPerfil = await this.context.Documento.Where(x => x.ObjetoReferencia == new Guid(user.Id)).FirstOrDefaultAsync();

                    ImagenGeneral imagenUsuario = null;
                    if (imagenPerfil != null)
                    {
                        imagenUsuario = new ImagenGeneral
                        {
                            Data      = Convert.ToBase64String(imagenPerfil.Contenido),
                            Nombre    = imagenPerfil.Nombre,
                            Extension = imagenPerfil.Extension
                        };
                    }

                    var roles = await this.userManager.GetRolesAsync(user);

                    return(new UsuarioData
                    {
                        NombreCompleto = user.NombreCompleto,
                        Email = user.Email,
                        UserName = user.UserName,
                        Token = this.jwtGenerador.CrearToken(user, new List <string>(roles)),
                        ImagenPerfil = imagenUsuario
                    });
                }


                throw new Exception("Ocurrio un error al actualizar el usuario");
            }
コード例 #13
0
            public async Task <UsuarioData> Handle(Ejecuta request, CancellationToken cancellationToken)
            {
                var usuario = await userManager.FindByNameAsync(request.UserName);

                if (usuario == null)
                {
                    throw new ManejadorExcepcion(HttpStatusCode.NotFound,
                                                 new { mensaje = "No se encuentra el usuario con este UserName" });
                }

                var correoUsado = await context.Users.Where(x => x.Email == request.Email && x.UserName != usuario.UserName).AnyAsync();

                if (correoUsado)
                {
                    throw new ManejadorExcepcion(HttpStatusCode.InternalServerError,
                                                 new { mensaje = "No este email ya está usado por otro usuario." });
                }

                if (request.ImagenPerfil != null)
                {
                    var imagenPerfilActual = await context.Documento.Where(x => x.ObjetoReferencia == new Guid(usuario.Id)).FirstOrDefaultAsync();

                    if (imagenPerfilActual == null)
                    {
                        var imagen = new Documento
                        {
                            Contenido        = Convert.FromBase64String(request.ImagenPerfil.Data),
                            Nombre           = request.ImagenPerfil.Nombre,
                            Extension        = request.ImagenPerfil.Extension,
                            ObjetoReferencia = new Guid(usuario.Id),
                            DocumentoId      = Guid.NewGuid(),
                            FechaCreacion    = DateTime.UtcNow
                        };
                        context.Documento.Add(imagen);
                    }
                    else
                    {
                        imagenPerfilActual.Contenido = Convert.FromBase64String(request.ImagenPerfil.Data);
                        imagenPerfilActual.Nombre    = request.ImagenPerfil.Nombre;
                        imagenPerfilActual.Extension = request.ImagenPerfil.Extension;
                    }
                }

                usuario.NombreCompleto = request.NombreCompleto;
                usuario.PasswordHash   = passwordHasher.HashPassword(usuario, request.Password);
                usuario.Email          = request.Email;

                var resultado = await userManager.UpdateAsync(usuario);

                var roles = await userManager.GetRolesAsync(usuario);

                var listaRoles = new List <string>(roles);

                var imagenPerfil = await context.Documento.Where(x => x.ObjetoReferencia == new Guid(usuario.Id)).FirstOrDefaultAsync();

                ImagenGeneral imagenGeneral = null;

                if (imagenPerfil != null)
                {
                    imagenGeneral = new ImagenGeneral
                    {
                        Data      = Convert.ToBase64String(imagenPerfil.Contenido),
                        Nombre    = imagenPerfil.Nombre,
                        Extension = imagenPerfil.Extension
                    };
                }

                if (!resultado.Succeeded)
                {
                    throw new Exception("No se puedo actualizar el usuario");
                }

                return(new UsuarioData
                {
                    NombreCompleto = usuario.NombreCompleto,
                    Token = jwtGenerador.CrearToken(usuario, listaRoles),
                    Email = usuario.Email,
                    UserName = usuario.UserName,
                    ImagenPerfil = imagenGeneral
                });
            }
コード例 #14
0
            public async Task <UsuarioData> Handle(Ejecuta request, CancellationToken cancellationToken)
            {
                //Logica para actualizar un usuario

                //Evaluar la existencia de un usuario
                var usuarioIden = await _userManager.FindByNameAsync(request.UserName);

                if (usuarioIden == null)
                {
                    throw new ManejadorException(HttpStatusCode.NotFound, new { mensaje = "No existe el usuario indicado" });
                }

                //Valida el email si fue utilizado por otro usuario del sistema
                var resultado = await _context.Users.Where(x => x.Email == request.Email && x.UserName != request.UserName).AnyAsync();

                if (resultado)
                {
                    throw new ManejadorException(HttpStatusCode.InternalServerError, new { mensaje = "Este email pertenece a otro usuario" });
                }

                if (request.ImagenPerfil != null)
                {
                    //Valida si el usuario tiene una imagen y lo agrega o se modifica con una nueva imagen
                    var resultadoImagen = await _context.Documento.Where(x => x.ObjetoReferencia == new Guid(usuarioIden.Id)).FirstOrDefaultAsync();

                    if (resultadoImagen == null)
                    {
                        var imagen = new Documento {
                            //Convierte de Base64(string) a un tipo byte[]
                            Contenido        = Convert.FromBase64String(request.ImagenPerfil.Data),
                            Nombre           = request.ImagenPerfil.Nombre,
                            Extension        = request.ImagenPerfil.Extension,
                            ObjetoReferencia = new Guid(usuarioIden.Id),
                            DocumentoId      = Guid.NewGuid(),
                            FechaCreacion    = DateTime.UtcNow
                        };
                        _context.Documento.Add(imagen);
                    }
                    else
                    {
                        resultadoImagen.Contenido = Convert.FromBase64String(request.ImagenPerfil.Data);
                        resultadoImagen.Nombre    = request.ImagenPerfil.Nombre;
                        resultadoImagen.Extension = request.ImagenPerfil.Extension;
                    }
                }

                //Actualizando los datos del usuario
                usuarioIden.Nombre       = request.Nombre;
                usuarioIden.Apellidos    = request.Apellidos;
                usuarioIden.PasswordHash = _passwordHasher.HashPassword(usuarioIden, request.Password);
                usuarioIden.Email        = request.Email;

                //Obtener lista de roles para este usuario que estamos evaluando
                var resultadoRoles = await _userManager.GetRolesAsync(usuarioIden);

                var roles = new List <string>(resultadoRoles);

                var resultadoUpdate = await _userManager.UpdateAsync(usuarioIden);

                var imagenPerfil = await _context.Documento.Where(x => x.ObjetoReferencia == new Guid(usuarioIden.Id)).FirstAsync();

                ImagenGeneral imagenGeneral = null;

                if (imagenPerfil != null)
                {
                    imagenGeneral = new ImagenGeneral {
                        Data      = Convert.ToBase64String(imagenPerfil.Contenido),
                        Nombre    = imagenPerfil.Nombre,
                        Extension = imagenPerfil.Extension
                    };
                }

                if (resultadoUpdate.Succeeded)
                {
                    return(new UsuarioData()
                    {
                        // NombreCompleto = usuarioIden.NombreCompleto,
                        Nombre = usuarioIden.Nombre,
                        Apellidos = usuarioIden.Apellidos,
                        UserName = usuarioIden.UserName,
                        Email = usuarioIden.Email,
                        Token = _jwtGnerador.CrearToken(usuarioIden, roles),
                        ImagenPerfil = imagenGeneral
                    });
                }

                throw new Exception("No se pudo actualizar los cambios");
            }