Ejemplo n.º 1
0
 public ActionResult Create(Usuario usuario)
 {
     if (ModelState.IsValid)
     {
         try
         {
             Usuario nuevoUsuario = repositorioUsuario.BuscarPorEmail(usuario.Email);
             if (nuevoUsuario != null)
             {
                 ViewBag.MensajeError = "Ya existe un usuario con el email ingresado";
                 ViewBag.Roles        = Usuario.ObtenerRoles();
                 return(View(usuario));
             }
             string hashContraseña = Convert.ToBase64String(KeyDerivation.Pbkdf2(
                                                                password: usuario.Contraseña,
                                                                salt: System.Text.Encoding.ASCII.GetBytes(iconfiguration["Salt"]),
                                                                prf: KeyDerivationPrf.HMACSHA1,
                                                                iterationCount: 1000,
                                                                numBytesRequested: 256 / 8));
             usuario.Contraseña = hashContraseña;
             usuario.Rol        = User.IsInRole("Administrador") ? usuario.Rol : (int)roles.Empleado;
             usuario.AvatarUrl  = "/Uploads/default.png";
             int resultado = repositorioUsuario.Create(usuario);
             if (usuario.AvatarFile != null && usuario.Id > 0)
             {
                 string root = enviroment.WebRootPath;
                 string path = Path.Combine(root, "Uploads");
                 if (!Directory.Exists(path))
                 {
                     Directory.CreateDirectory(path);
                 }
                 string fileName     = "avatar_" + resultado + Path.GetExtension(usuario.AvatarFile.FileName);
                 string pathCompleto = Path.Combine(path, fileName);
                 usuario.AvatarUrl = Path.Combine("/Uploads", fileName);
                 using (FileStream stream = new FileStream(pathCompleto, FileMode.Create))
                 {
                     usuario.AvatarFile.CopyTo(stream);
                 }
                 repositorioUsuario.Edit(usuario.Id, usuario);
             }
             return(RedirectToAction(nameof(Index)));
         }
         catch (Exception e)
         {
             return(View());
         }
     }
     else
     {
         return(View());
     }
 }