public ActionResult Approve(string id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } RiftWorldEntities db = new RiftWorldEntities(); var user = db.AspNetUsers.Find(id); if (user == null) { return(HttpNotFound()); } var userManager = new UserManager <ApplicationUser>(new UserStore <ApplicationUser>(new ApplicationDbContext())); var userRoles = userManager.GetRoles(id); var userDeets = db.UserDetails.Where(x => x.UserId == id).First(); ViewBag.CurrentCharacter = db.Characters.Where(x => x.CharacterId == userDeets.CurrentCharacterId).Select(x => x.CharacterName).FirstOrDefault(); ViewBag.PastCharacters = db.Characters.Where(x => x.PlayerId == id && x.IsRetired == true).Select(x => x.CharacterName).ToList(); return(View(new EditUserViewModel2() { Id = user.Id, Email = user.Email, DiscordName = userDeets.DiscordName, DiscordDiscriminator = userDeets.DiscordDiscriminator, ConsentFileName = userDeets.ConsentFileName, IsApproved = userDeets.IsApproved })); }
public async Task <ActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { string discordFull = $"{model.DiscordName}#{model.DiscordDiscriminator:D4}"; var user = new ApplicationUser { UserName = discordFull, Email = model.Email }; var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { #region Adding Custom User Details/Role RiftWorldEntities db = new RiftWorldEntities(); //add Player Role to User var resultRole = await UserManager.AddToRolesAsync(user.Id, "Player"); if (!resultRole.Succeeded) { ModelState.AddModelError("", result.Errors.First()); return(View()); } UserDetail newUserDeets = new UserDetail { UserId = user.Id, DiscordName = model.DiscordName, DiscordDiscriminator = model.DiscordDiscriminator, ConsentFileName = null, CurrentCharacterId = null, IsApproved = false }; db.UserDetails.Add(newUserDeets); db.SaveChanges(); #endregion #region REMOVED Email Confirm Demo Code //var code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); //var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme); //await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking this link: <a href=\"" + callbackUrl + "\">link</a>"); //ViewBag.Link = callbackUrl; #endregion return(RedirectToAction("PendingApproval", "Home")); } AddErrors(result); } // If we got this far, something failed, redisplay form return(View(model)); }
public async Task <ActionResult> Create(RegisterViewModel userViewModel, params string[] selectedRoles) { if (ModelState.IsValid) { string discordFull = $"{userViewModel.DiscordName}#{userViewModel.DiscordDiscriminator:D4}"; var user = new ApplicationUser { UserName = discordFull, Email = userViewModel.Email }; var adminresult = await UserManager.CreateAsync(user, userViewModel.Password); //Add User to the selected Roles if (adminresult.Succeeded) { if (selectedRoles != null) { var result = await UserManager.AddToRolesAsync(user.Id, selectedRoles); if (!result.Succeeded) { ModelState.AddModelError("", result.Errors.First()); ViewBag.RoleId = new SelectList(await RoleManager.Roles.ToListAsync(), "Name", "Name"); return(View()); } //add user deets RiftWorldEntities db = new RiftWorldEntities(); UserDetail newUserDeets = new UserDetail { UserId = user.Id, DiscordName = userViewModel.DiscordName, DiscordDiscriminator = userViewModel.DiscordDiscriminator, ConsentFileName = null, CurrentCharacterId = null, IsApproved = false }; db.UserDetails.Add(newUserDeets); db.SaveChanges(); } } else { ModelState.AddModelError("", adminresult.Errors.First()); ViewBag.RoleId = new SelectList(RoleManager.Roles, "Name", "Name"); return(View()); } return(RedirectToAction("Index")); } ViewBag.RoleId = new SelectList(RoleManager.Roles, "Name", "Name"); return(View()); }
public async Task <ActionResult> Index(ManageMessageId?message) { ViewBag.StatusMessage = message == ManageMessageId.ChangePasswordSuccess ? "Your password has been changed." : message == ManageMessageId.SetPasswordSuccess ? "Your password has been set." //: message == ManageMessageId.SetTwoFactorSuccess ? "Your two factor provider has been set." : message == ManageMessageId.Error ? "An error has occurred." //: message == ManageMessageId.AddPhoneSuccess ? "The phone number was added." //: message == ManageMessageId.RemovePhoneSuccess ? "Your phone number was removed." : ""; var userId = User.Identity.GetUserId(); RiftWorldEntities db = new RiftWorldEntities(); UserDetail deets = await db.UserDetails.FindAsync(userId); var character = await db.Characters.Where(c => c.PlayerId == userId && !c.IsApproved).FirstOrDefaultAsync(); short? pendingId; string pendingName; if (character == null) { pendingId = null; pendingName = null; } else { pendingId = character.CharacterId; pendingName = character.CharacterName; } var model = new IndexViewModel2 { HasPassword = HasPassword(), Deets = deets, PendingCharacterId = pendingId, PendingCharacterName = pendingName, Email = db.AspNetUsers.Where(x => x.Id == userId).Select(x => x.Email).First() }; return(View(model)); }
public ActionResult DeleteConfirmed(string id) { if (ModelState.IsValid) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } var user = UserManager.FindById(id); if (user == null) { return(HttpNotFound()); } UserManager.Delete(user); RiftWorldEntities db = new RiftWorldEntities(); var userDeets = db.UserDetails.Where(x => x.UserId == id).FirstOrDefault(); var currentCharacter = userDeets.CurrentCharacterId; var consent = userDeets.ConsentFileName; string fullPath = Request.MapPath("~/Content/ConsentFiles/" + consent); if (System.IO.File.Exists(fullPath)) { System.IO.File.Delete(fullPath); } db.UserDetails.Remove(userDeets); if (currentCharacter != null) { var character = db.Characters.Where(c => c.CharacterId == currentCharacter).FirstOrDefault(); character.IsRetired = true; db.Entry(character).State = EntityState.Modified; } db.SaveChanges(); return(RedirectToAction("Index")); } return(View()); }
public async Task <ActionResult> Edit(string id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } RiftWorldEntities db = new RiftWorldEntities(); var user = await UserManager.FindByIdAsync(id); if (user == null) { return(HttpNotFound()); } var userRoles = await UserManager.GetRolesAsync(user.Id); var userDeets = await db.UserDetails.Where(x => x.UserId == id).FirstAsync(); ViewBag.CurrentCharacter = await db.Characters.Where(x => x.CharacterId == userDeets.CurrentCharacterId).Select(x => x.CharacterName).FirstOrDefaultAsync(); ViewBag.PastCharacters = db.Characters.Where(x => x.PlayerId == id && x.IsRetired == true).Select(x => x.CharacterName).ToList(); return(View(new EditUserViewModel3() { Id = user.Id, Email = user.Email, DiscordName = userDeets.DiscordName, DiscordDiscriminator = userDeets.DiscordDiscriminator, ConsentFileName = userDeets.ConsentFileName, IsApproved = userDeets.IsApproved, RolesList = RoleManager.Roles.ToList().Select(x => new SelectListItem() { Selected = userRoles.Contains(x.Name), Text = x.Name, Value = x.Name }) })); }
public async Task <ActionResult> Details(string id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } var user = await UserManager.FindByIdAsync(id); ViewBag.RoleNames = await UserManager.GetRolesAsync(user.Id); //added to make details full RiftWorldEntities db = new RiftWorldEntities(); var userDeets = await db.UserDetails.Where(x => x.UserId == id).FirstAsync(); ViewBag.CurrentCharacter = await db.Characters.Where(x => x.CharacterId == userDeets.CurrentCharacterId).Select(x => x.CharacterName).FirstOrDefaultAsync(); ViewBag.PastCharacters = db.Characters.Where(x => x.PlayerId == id && x.IsRetired == true).Select(x => x.CharacterName).ToList(); EditUserViewModel2 daUser = new EditUserViewModel2 { Id = user.Id, Email = user.Email, DiscordName = userDeets.DiscordName, DiscordDiscriminator = userDeets.DiscordDiscriminator, IsApproved = userDeets.IsApproved, ConsentFileName = userDeets.ConsentFileName, CurrentCharacterId = userDeets.CurrentCharacterId }; return(View(daUser)); }
public ActionResult Deny(string id) { RiftWorldEntities db = new RiftWorldEntities(); if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } var user = db.AspNetUsers.Find(id); if (user == null) { return(HttpNotFound()); } var userDeets = db.UserDetails.Where(x => x.UserId == id).FirstOrDefault(); if (userDeets == null) { //error } if (userDeets.IsApproved == true) { ViewBag.Message = "You can't deny someone who already is approved to be a user. If you're trying to remove them permanently, you must use the delete function. Also, how are you getting this error?"; return(View("Error")); } var userManager = new UserManager <ApplicationUser>(new UserStore <ApplicationUser>(new ApplicationDbContext())); var user2 = UserManager.FindById(id); UserManager.Delete(user2); db.UserDetails.Remove(userDeets); db.SaveChangesAsync(); return(RedirectToAction("Approvals", "Infos", null)); }
public ActionResult Approve([Bind(Include = "Email,Id, ConsentFileName, DiscordName, DiscordDiscriminator, IsApproved")] EditUserViewModel2 editUser, string submit, HttpPostedFileBase consentFile) { RiftWorldEntities db = new RiftWorldEntities(); var userDeets = db.UserDetails.Where(x => x.UserId == editUser.Id).First(); ViewBag.CurrentCharacter = db.Characters.Where(x => x.CharacterId == userDeets.CurrentCharacterId).Select(x => x.CharacterName).FirstOrDefault(); ViewBag.PastCharacters = db.Characters.Where(x => x.PlayerId == editUser.Id && x.IsRetired == true).Select(x => x.CharacterName).ToList(); if (ModelState.IsValid) { var user = db.AspNetUsers.Find(editUser.Id); if (user == null) { return(HttpNotFound()); } if (consentFile != null) { string consentName = consentFile.FileName; string ext = consentName.Substring(consentName.LastIndexOf('.')); string[] goodExts = { ".pdf" }; if (goodExts.Contains(ext.ToLower())) { consentName = editUser.DiscordName + "_" + editUser.DiscordDiscriminator + ext; consentFile.SaveAs(Server.MapPath("~/Content/ConsentFiles/" + consentName)); UserDetail userDetail = db.UserDetails.Find(editUser.Id); userDetail.ConsentFileName = consentName; userDetail.IsApproved = true; db.Entry(userDetail).State = EntityState.Modified; db.SaveChanges(); } else { ModelState.AddModelError("", "That file type was the incorrect type. It needs to end with either .pdf "); return(View(new EditUserViewModel2() { Id = editUser.Id, Email = editUser.Email, DiscordName = editUser.DiscordName, DiscordDiscriminator = editUser.DiscordDiscriminator, ConsentFileName = editUser.ConsentFileName, IsApproved = editUser.IsApproved })); } } else if (editUser.ConsentFileName == null) { ModelState.AddModelError("", "You need to add the consent form in order to approve a player Katherine. We went over this. You wanted it this way."); return(View(new EditUserViewModel2() { Id = editUser.Id, Email = editUser.Email, DiscordName = editUser.DiscordName, DiscordDiscriminator = editUser.DiscordDiscriminator, ConsentFileName = editUser.ConsentFileName, IsApproved = editUser.IsApproved })); } return(RedirectToAction("Index")); } ModelState.AddModelError("", "Something failed."); return(View(new EditUserViewModel2() { Id = editUser.Id, Email = editUser.Email, DiscordName = editUser.DiscordName, DiscordDiscriminator = editUser.DiscordDiscriminator, ConsentFileName = editUser.ConsentFileName, IsApproved = editUser.IsApproved })); }
public async Task <ActionResult> Edit([Bind(Include = "Email,Id, DiscordDiscriminator, DiscordName, CurrentCharacterId, ConsentFileName")] EditUserViewModel3 editUser, params string[] selectedRole) { RiftWorldEntities db = new RiftWorldEntities(); var userDeets = await db.UserDetails.Where(x => x.UserId == editUser.Id).FirstAsync(); ViewBag.CurrentCharacter = await db.Characters.Where(x => x.CharacterId == userDeets.CurrentCharacterId).Select(x => x.CharacterName).FirstOrDefaultAsync(); ViewBag.PastCharacters = db.Characters.Where(x => x.PlayerId == editUser.Id && x.IsRetired == true).Select(x => x.CharacterName).ToList(); //todo - finish this action if (ModelState.IsValid) { var user = await UserManager.FindByIdAsync(editUser.Id); if (user == null) { return(HttpNotFound()); } user.UserName = $"{editUser.DiscordName}#{editUser.DiscordDiscriminator:D4}"; user.Email = editUser.Email; var userRoles = await UserManager.GetRolesAsync(user.Id); selectedRole = selectedRole ?? new string[] { }; var result = await UserManager.AddToRolesAsync(user.Id, selectedRole.Except(userRoles).ToArray <string>()); if (!result.Succeeded) { ModelState.AddModelError("", result.Errors.First()); return(View()); } result = await UserManager.RemoveFromRolesAsync(user.Id, userRoles.Except(selectedRole).ToArray <string>()); if (!result.Succeeded) { ModelState.AddModelError("", result.Errors.First()); return(View()); } //added below #region Updating User Details userDeets.DiscordDiscriminator = editUser.DiscordDiscriminator; userDeets.DiscordName = editUser.DiscordName; db.Entry(userDeets).State = EntityState.Modified; var result2 = await db.SaveChangesAsync(); #endregion return(RedirectToAction("Index")); } ModelState.AddModelError("", "Something failed."); editUser.RolesList = RoleManager.Roles.ToList().Select(x => new SelectListItem() { Selected = selectedRole.Contains(x.Name), Text = x.Name, Value = x.Name }); return(View(editUser)); }
public async Task <ActionResult> Login(LoginViewModel model, string returnUrl) { if (model.Email.IndexOf('@') > -1) { //Validate email format string emailRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" + @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" + @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"; Regex re = new Regex(emailRegex); if (!re.IsMatch(model.Email)) { ModelState.AddModelError("Email", "Email is not valid"); } } else { //validate Username format string emailRegex = @".*#[0-9]{4}"; Regex re = new Regex(emailRegex); if (!re.IsMatch(model.Email)) { ModelState.AddModelError("Email", "Username is not valid"); } } if (ModelState.IsValid) { var userName = model.Email; if (userName.IndexOf('@') > -1) { var user = await UserManager.FindByEmailAsync(model.Email); if (user == null) { ModelState.AddModelError(string.Empty, "Invalid login attempt."); return(View(model)); } else { userName = user.UserName; } } //if (!ModelState.IsValid) //{ // return View(model); //} #region ADDED - prevent login if user unapproved var yaBoi = model.Email; if (yaBoi.IndexOf('@') <= -1) { var user = await UserManager.FindByNameAsync(model.Email); if (user == null) { ModelState.AddModelError(string.Empty, "Invalid login attempt."); return(View(model)); } else { yaBoi = user.Email; } } RiftWorldEntities db = new RiftWorldEntities(); bool isApproved = (from ud in db.UserDetails where ud.UserId == ( from u in db.AspNetUsers where u.Email == yaBoi select u.Id ) .FirstOrDefault() select ud.IsApproved ).FirstOrDefault() ; if (!isApproved) { return(RedirectToAction("PendingApproval", "Home")); } #endregion // This doen't count login failures towards lockout only two factor authentication // To enable password failures to trigger lockout, change to shouldLockout: true var result = await SignInManager.PasswordSignInAsync(userName, model.Password, model.RememberMe, shouldLockout : false); switch (result) { case SignInStatus.Success: return(RedirectToLocal(returnUrl)); case SignInStatus.LockedOut: return(View("Lockout")); case SignInStatus.RequiresVerification: return(RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe })); case SignInStatus.Failure: default: ModelState.AddModelError("", "Invalid login attempt."); return(View(model)); } } return(View(model)); }