public async Task <IHttpActionResult> PutUsuario(int id, UsuarioSolicitud solicitud) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (id != solicitud.IdUsuario) { return(BadRequest()); } if (solicitud.ImageArray != null && solicitud.ImageArray.Length > 0) { var stream = new MemoryStream(solicitud.ImageArray); var guid = Guid.NewGuid().ToString(); var file = string.Format("{0}.jpg", guid); var folder = "~/Content/Images"; var fullPath = string.Format("{0}/{1}", folder, file); var response = FilesHelper.UploadPhoto(stream, folder, file); if (response) { solicitud.Foto = fullPath; } } var usuario = ToUsuario(solicitud); db.Entry(usuario).State = EntityState.Modified; try { await db.SaveChangesAsync(); } catch (Exception ex) { if (ex.InnerException != null && ex.InnerException.InnerException != null && ex.InnerException.InnerException.Message.Contains("Unique")) { return(BadRequest("Hay un registro con la misma descripción.")); } else { return(BadRequest(ex.Message)); } } return(Ok(usuario)); }
public async Task <IHttpActionResult> PostUsuario(UsuarioSolicitud Solicitud) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (Solicitud.ImageArray != null && Solicitud.ImageArray.Length > 0) { var stream = new MemoryStream(Solicitud.ImageArray); var guid = Guid.NewGuid().ToString(); var file = string.Format("{0}.jpg", guid); var folder = "~/Content/Images"; var fullPath = string.Format("{0}/{1}", folder, file); var response = FilesHelper.UploadPhoto(stream, folder, file); if (response) { Solicitud.Foto = fullPath; } } var usuario = ToUsuario(Solicitud); db.Usuarios.Add(usuario); try { await db.SaveChangesAsync(); } catch (Exception ex) { if (ex.InnerException != null && ex.InnerException.InnerException != null && ex.InnerException.InnerException.Message.Contains("Unique")) { return(BadRequest("Hay un registro con la misma descripción.")); } else { return(BadRequest(ex.Message)); } } return(CreatedAtRoute("DefaultApi", new { id = usuario.IdUsuario }, usuario)); }
private Usuario ToUsuario(UsuarioSolicitud solicitud) { return(new Usuario { Reservas = solicitud.Reservas, Vehiculoes = solicitud.Vehiculoes, Observacion_Zona = solicitud.Observacion_Zona, IdUsuario = solicitud.IdUsuario, TipoUsuario = solicitud.TipoUsuario, IdTipoUsuario = solicitud.IdTipoUsuario, Nombre = solicitud.Nombre, Foto = solicitud.Foto, Apellidos = solicitud.Apellidos, Correo = solicitud.Correo, Telefono = solicitud.Telefono, Password = solicitud.Password, }); }
public async Task <Object []> GetForgottenPassword(string user_email) { Object [] response = new Object [2]; string admin_email, adminPass, userPass, subject, message; try { Usuario userToRecover = await AppDbContext.usuarios.Where(u => u.correo_usuario == user_email).FirstOrDefaultAsync(); if (userToRecover == null) { response[0] = false; return(response); } userPass = userService.DecryptPassword(userToRecover.password_usuario); Usuario userAdmin = await AppDbContext.usuarios.Where(u => u.nombre_usuario == "admin").FirstOrDefaultAsync(); if (userAdmin == null) { response[0] = false; return(response); } admin_email = userAdmin.correo_usuario; adminPass = userService.DecryptPassword(userAdmin.password_usuario); UsuarioSolicitud solicitudActual = new UsuarioSolicitud() { id_usuario = userToRecover.id_usuario, id_solicitud = 1, status_solicitud = 2, emision_solicitud = DateTime.Now, aprobacion_solicitud = DateTime.Now }; subject = "Recuperación de Contraseña de Películas"; message = "<p><strong>Tu contraseña es: </strong>" + userPass + ".</p>"; SendEmail(admin_email, adminPass, user_email, subject, message); await AppDbContext.usuariosSolicitudes.AddAsync(solicitudActual); await AppDbContext.SaveChangesAsync(); response[0] = true; } catch (Exception exception) { response[1] = (exception.InnerException != null) ? exception.InnerException.Message : exception.Message; } return(response); }
public async Task <Object []> AprobarSolicitud(int id_usuario_solicitud) { Object [] response = new Object [2]; try { UsuarioSolicitud solicitud = await AppDbContext.usuariosSolicitudes.FindAsync(id_usuario_solicitud); if (solicitud.status_solicitud != 0) { response[0] = false; return(response); } solicitud.status_solicitud = 1; solicitud.aprobacion_solicitud = DateTime.Now; AppDbContext.usuariosSolicitudes.Update(solicitud); await AppDbContext.SaveChangesAsync(); response[0] = true; } catch (Exception exception) { response[1] = (exception.InnerException != null) ? exception.InnerException.Message : exception.Message; } return(response); }
public async Task <Object []> CrearUsuario(Usuario user) { Object [] response = new Object [2]; try { string originalPassword = user.password_usuario; user.tipo_usuario = 2; user.password_usuario = userService.EncryptPassword(originalPassword); await AppDbContext.usuarios.AddAsync(user); await AppDbContext.SaveChangesAsync(); Usuario userToAuthenticate = await AppDbContext.usuarios.Where(u => u.nombre_usuario.Equals(user.nombre_usuario)).FirstOrDefaultAsync(); Usuario userToGetTokenRequest = new Usuario() { nombre_usuario = user.nombre_usuario, password_usuario = originalPassword }; Object [] requestResponse = await SolicitudToken(userToGetTokenRequest); if (requestResponse[0] != null && (bool)requestResponse[0] == true) { UsuarioSolicitud ultimaSolicitud = await AppDbContext.usuariosSolicitudes.Where( us => us.id_usuario == userToAuthenticate.id_usuario && us.id_solicitud == 2 && us.status_solicitud == 0).LastOrDefaultAsync(); ultimaSolicitud.status_solicitud = 1; ultimaSolicitud.aprobacion_solicitud = DateTime.Now; AppDbContext.usuariosSolicitudes.Update(ultimaSolicitud); await AppDbContext.SaveChangesAsync(); await userService.GetTokenAuthentication(userToAuthenticate.nombre_usuario, originalPassword); response[0] = true; } } catch (Exception exception) { response[1] = (exception.InnerException != null) ? exception.InnerException.Message : exception.Message; } return(response); }
public async Task <Object []> SolicitudToken(Usuario user) { Object [] response = new Object [7]; string userNameEmail = "", tokenResponse = ""; userNameEmail = GetUserNameEmail(user.nombre_usuario, user.correo_usuario); try { tokenResponse = await userService.GetTokenAuthentication(userNameEmail, user.password_usuario); if (tokenResponse.Contains("El usuario ingresado no existe")) { response[2] = false; return(response); } if (tokenResponse.Contains("Contraseña incorrecta")) { response[3] = false; return(response); } if (tokenResponse.Contains("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9")) { response[4] = false; return(response); } Usuario userToUpdate = await AppDbContext.usuarios.Where(u => u.nombre_usuario.Equals(userNameEmail) || u.correo_usuario.Equals(userNameEmail) ).FirstOrDefaultAsync(); UsuarioSolicitud ultimaSolicitud = await AppDbContext.usuariosSolicitudes.Where( us => us.id_usuario == userToUpdate.id_usuario && us.id_solicitud == 2 && us.status_solicitud != 2 ).LastOrDefaultAsync(); if (ultimaSolicitud != null) { if (ultimaSolicitud.status_solicitud == 0) { response[5] = false; return(response); } if (ultimaSolicitud.status_solicitud == 1) { response[6] = false; return(response); } } if (tokenResponse.Contains("Tu token ha expirado")) { UsuarioSolicitud solicitudActual = new UsuarioSolicitud() { id_usuario = userToUpdate.id_usuario, id_solicitud = 2, status_solicitud = 0, emision_solicitud = DateTime.Now }; await AppDbContext.usuariosSolicitudes.AddAsync(solicitudActual); await AppDbContext.SaveChangesAsync(); response[0] = true; } } catch (Exception exception) { response[1] = (exception.InnerException != null) ? exception.InnerException.Message : exception.Message; } return(response); }
public async Task <string> GetTokenAuthentication(string userNameEmail, string password_usuario) { string response; Token lastToken, newToken; DateTime expiration; Usuario user = await AppDbContext.usuarios.Where(usuario => usuario.correo_usuario.Equals(userNameEmail) || usuario.nombre_usuario.Equals(userNameEmail) ).FirstOrDefaultAsync(); if (user == null) { response = "El usuario ingresado no existe."; return(response); } string decryptedPassword = DecryptPassword(user.password_usuario); if (!password_usuario.Equals(decryptedPassword)) { response = "Contraseña incorrecta."; return(response); } lastToken = await AppDbContext.tokens.Where(tk => tk.id_usuario == user.id_usuario ).LastOrDefaultAsync(); if (lastToken != null && ValidateToken(lastToken.valor_token) != null) { return(lastToken.valor_token); } UsuarioSolicitud lastTokenRequest = await AppDbContext.usuariosSolicitudes.Where(s => s.id_usuario == user.id_usuario && s.id_solicitud == 2).LastOrDefaultAsync(); if (user.tipo_usuario == 2 && (lastTokenRequest == null || (lastTokenRequest != null && lastTokenRequest.status_solicitud != 1))) { response = "Tu token ha expirado, solicita un " + "nuevo token al administrador."; return(response); } if (user.tipo_usuario == 1) { expiration = DateTime.UtcNow.AddDays(7); } else { expiration = DateTime.UtcNow.AddHours(1); } JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler(); byte[] key = Encoding.ASCII.GetBytes(appSettings.Secret); SecurityTokenDescriptor tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(new Claim[] { new Claim(ClaimTypes.Name, user.id_usuario.ToString()) }), Expires = expiration, //+ 5 extra minutes... SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature) }; SecurityToken token = tokenHandler.CreateToken(tokenDescriptor); newToken = new Token() { valor_token = tokenHandler.WriteToken(token), emision_token = DateTime.Now, expiracion_token = expiration.AddHours(-6).AddMinutes(5), id_usuario = user.id_usuario }; await AppDbContext.tokens.AddAsync(newToken); if (lastTokenRequest != null) { lastTokenRequest.status_solicitud = 2; AppDbContext.usuariosSolicitudes.Update(lastTokenRequest); } await AppDbContext.SaveChangesAsync(); return(tokenHandler.WriteToken(token)); }