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; }
public async Task<VistaMensaje> GetVistaMensaje(int mensajeId, ApplicationUser usuario) { return await GetVistaMensaje(mensajeId, 0, usuario); }
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(); } }
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; } }
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); }
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); }