Example #1
0
        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));
        }
Example #3
0
        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());
        }
Example #4
0
        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));
        }
Example #5
0
        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());
        }
Example #6
0
        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
                })
            }));
        }
Example #7
0
        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));
        }
Example #8
0
        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));
        }
Example #9
0
        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
            }));
        }
Example #10
0
        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));
        }