コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
 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,
     });
 }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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));
        }