Ejemplo n.º 1
0
        public async Task<VistaMensaje> GetVistaMensaje(int mensajeId, int personajeId, ApplicationUser usuario)
        {
            VistaMensaje vistaMensaje = null;

            if (PuedeVerMensaje(mensajeId, usuario))
            {
                vistaMensaje = await (from mensaje in _contexto.Mensajes
                                      join personaje in _contexto.Personajes on mensaje.RemitenteId equals personaje.PersonajeId
                                      where mensaje.MensajeId == mensajeId
                                      select new VistaMensaje
                                      {
                                          Asunto = mensaje.Asunto,
                                          Cuerpo = mensaje.Cuerpo,
                                          EsAnonimo = mensaje.EsAnonimo,
                                          FechaEnvio = mensaje.FechaCreacion,
                                          MensajeId = mensaje.MensajeId,
                                          Remitente = (mensaje.NombreParaMostrar == null || mensaje.NombreParaMostrar == string.Empty) ? personaje.Nombre : mensaje.NombreParaMostrar,
                                          RemitenteReal = personaje.Nombre
                                      }
                           ).FirstOrDefaultAsync();
                if (vistaMensaje != null)
                {
                    if (personajeId != 0)
                    {
                        await MarcarMensajeComoLeido(mensajeId, usuario.Id, personajeId);
                    }
                    else
                    {
                        await MarcarMensajeComoLeido(mensajeId, usuario);
                    }

                    if (usuario.Cuenta == TipoCuenta.Administrador || usuario.Cuenta == TipoCuenta.Narrador)
                    {
                        //para narradores y administradores, recupera todos los destinatarios
                        vistaMensaje.Destinatarios = String.Join("; ",
                                            (from destinatario in _contexto.DestinatariosMensaje
                                             join personaje in _contexto.Personajes on destinatario.DestinatarioId equals personaje.PersonajeId
                                             where destinatario.MensajeId == vistaMensaje.MensajeId
                                             select personaje.Nombre
                                            ).ToList());
                    }
                    else
                    {
                        //en caso de jugadores, recupera solo los destinatarios incluidos en el para
                        vistaMensaje.Destinatarios = String.Join("; ",
                                            (from destinatario in _contexto.DestinatariosMensaje
                                             join personaje in _contexto.Personajes on destinatario.DestinatarioId equals personaje.PersonajeId
                                             where destinatario.MensajeId == vistaMensaje.MensajeId && destinatario.TipoDestinatario == TipoDestinatario.Para
                                             select personaje.Nombre
                                            ).ToList());
                    }
                }
            }

            return vistaMensaje;
        }
Ejemplo n.º 2
0
 public async Task<VistaMensaje> GetVistaMensaje(int mensajeId, ApplicationUser usuario)
 {
     return await GetVistaMensaje(mensajeId, 0, usuario);
 }
Ejemplo n.º 3
0
        private async Task MarcarMensajeComoLeido(int mensajeId, ApplicationUser usuario)
        {
            DestinatarioMensaje destinatarioMensaje = (from destinatario in _contexto.DestinatariosMensaje
                                                       join personaje in _contexto.Personajes on destinatario.DestinatarioId equals personaje.PersonajeId
                                                       where destinatario.MensajeId == mensajeId && destinatario.EstadoMensaje == EstadoMensaje.SinLeer
                                                       && personaje.JugadorId == usuario.Id
                                                       select destinatario).FirstOrDefault();

            if (destinatarioMensaje != null)
            {
                destinatarioMensaje.EstadoMensaje = EstadoMensaje.Leido;
                Actualizar(destinatarioMensaje);
                await ConfirmarCambios();
            }
        }
Ejemplo n.º 4
0
        private bool PuedeVerMensaje(int mensajeId, ApplicationUser usuario)
        {
            if (usuario.Cuenta == TipoCuenta.Administrador || usuario.Cuenta == TipoCuenta.Narrador)
            {
                return true;
            }
            else
            {
                //podra ver el mensaje si es remitente o destinatario y no esta borrado
                bool esRemitente = false;
                bool esDestinatario = false;

                esDestinatario = (from destinatario in _contexto.DestinatariosMensaje
                                  join personaje in _contexto.Personajes on destinatario.DestinatarioId equals personaje.PersonajeId
                                  where destinatario.MensajeId == mensajeId && personaje.JugadorId == usuario.Id
                                  && destinatario.EstadoMensaje != EstadoMensaje.Borrado
                                  select destinatario.DestinatarioMensajeId).Count() > 0;

                if (!esDestinatario)
                {
                    esRemitente = (from mensaje in _contexto.Mensajes
                                   join personje in _contexto.Personajes on mensaje.RemitenteId equals personje.PersonajeId
                                   where personje.JugadorId == usuario.Id
                                   select mensaje.MensajeId).Count() > 0;
                }


                return esDestinatario || esRemitente;
            }
        }
Ejemplo n.º 5
0
        public async Task<IActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl = null)
        {
            if (_signInManager.IsSignedIn(User))
            {
                return RedirectToAction(nameof(ManageController.Index), "Manage");
            }

            if (ModelState.IsValid)
            {
                // Get the information about the user from the external login provider
                var info = await _signInManager.GetExternalLoginInfoAsync();
                if (info == null)
                {
                    return View("ExternalLoginFailure");
                }
                var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
                var result = await _userManager.CreateAsync(user);
                if (result.Succeeded)
                {
                    result = await _userManager.AddLoginAsync(user, info);
                    if (result.Succeeded)
                    {
                        await _signInManager.SignInAsync(user, isPersistent: false);
                        _logger.LogInformation(6, "User created an account using {Name} provider.", info.LoginProvider);
                        return RedirectToLocal(returnUrl);
                    }
                }
                AddErrors(result);
            }

            ViewData["ReturnUrl"] = returnUrl;
            return View(model);
        }
Ejemplo n.º 6
0
        public async Task<IActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                bool crearCuenta = true;
                //solo los administradores pueden crear cuentas de narrador o de administrador
                if (model.Cuenta == TipoCuenta.Narrador || model.Cuenta == TipoCuenta.Administrador)
                {
                    ApplicationUser usuarioLogueado = await _userManager.GetUserAsync(User);
                    if (usuarioLogueado.Cuenta != TipoCuenta.Administrador)
                    {
                        crearCuenta = false;
                        ModelState.AddModelError(string.Empty, "Se necesita una cuenta de Administrador para crear cuentas de Narrador o Administrador");
                    }
                }

                if (crearCuenta)
                {
                    var user = new ApplicationUser { UserName = model.Email, Email = model.Email, Cuenta = model.Cuenta };
                    List<Claim> claims = new List<Claim>();
                    user.Claims.Add(new IdentityUserClaim<string> { ClaimType = ClaimTypes.Role, ClaimValue = model.Cuenta.ToString(), UserId = user.Id });
                    var result = await _userManager.CreateAsync(user, model.Password);
                    if (result.Succeeded)
                    {
                        _servicioEmail.EnviarAltaCuenta(model.Email, model.Password);
                        _logger.LogInformation(3, $"Cuenta creada para el usuario {model.Email}");
                        ViewBag.MensajeExito = $"Cuenta creada para el usuario {model.Email}";
                        ModelState.Clear();
                        return View();
                    }
                    AddErrors(result);
                }

            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }