コード例 #1
0
        public async System.Threading.Tasks.Task <ActionResult> RemoveAccount()
        {
            if (User.IsInRole("administrator"))
            {
                TempData["Message"] = "Администратор не может удалить свою учетную запись";
                return(RedirectToAction("Manage"));
                //ViewBag.ErrorMessage = "Администратор не может удалить свою учетную запись";
                //return View("Error");
            }
            var currentUserId = User.Identity.GetUserId();

            using (var db = new ContestMeterDbContext())
            {
                var user = db.Users.Find(currentUserId);
                if (user != null)
                {
                    user.IsDeleted       = true;
                    db.Entry(user).State = EntityState.Modified;
                    await db.SaveChangesAsync();
                }
                else
                {
                    return(RedirectToAction("Manage"));
                }
            }

            AuthenticationManager.SignOut();
            return(RedirectToAction("Index", "Home"));
        }
コード例 #2
0
        public bool AddParticipantToDefaultTeam(string participantId)
        {
            using (var db = new ContestMeterDbContext())
            {
                var user = db.Users.Find(participantId);
                if (user == null)
                {
                    return(false);
                }
                var defaultTeam = db.Teams.FirstOrDefault(t => t.Name == "Одиночки");
                if (defaultTeam == null)
                {
                    return(false);
                }

                var teamParticipant = new TeamParticipant
                {
                    Id            = Guid.NewGuid(),
                    TeamId        = defaultTeam.Id,
                    ParticipantId = user.Id
                };
                db.Entry(teamParticipant).State = EntityState.Added;
                user.TeamId = defaultTeam.Id;
                defaultTeam.Participants.Add(user);
                db.Entry(user).State        = EntityState.Modified;
                db.Entry(defaultTeam).State = EntityState.Modified;
                db.SaveChanges();
                return(true);
            }
        }
コード例 #3
0
 protected override void Dispose(bool disposing)
 {
     if (disposing && db != null)
     {
         db.Dispose();
         db = null;
     }
     base.Dispose(disposing);
 }
コード例 #4
0
        public async System.Threading.Tasks.Task <ActionResult> Login(LoginViewModel model, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                var user = await UserManager.FindAsync(model.UserName, model.Password);

                if (user != null)
                {
                    if (!user.IsDeleted)
                    {
                        await SignInAsync(user, model.RememberMe);

                        using (var db = new ContestMeterDbContext())
                        {
                            var userInfo = await db.UserInfos.FindAsync(user.UserInfoId);

                            if (userInfo != null)
                            {
                                userInfo.LastVisitDate   = DateTime.Now;
                                db.Entry(userInfo).State = EntityState.Modified;
                                await db.SaveChangesAsync();
                            }
                        }

                        return(RedirectToLocal(returnUrl));
                    }
                    ModelState.AddModelError("", "Регистрация пользователя не была подтверждена или он был удален. Администратор должен подтвердить регистрацию/удаление.");
                }
                else
                {
                    ModelState.AddModelError("", "Неправильное имя пользователя или пароль.");
                }
            }

            return(View(model));
        }
コード例 #5
0
        public async System.Threading.Tasks.Task <ActionResult> Register(RegisterViewModel model)
        {
            if (ModelState.IsValid)
            {
                if (await UserManager.Users.AnyAsync(u => u.Email == model.Email))
                {
                    ModelState.AddModelError("", "Пользователь с таким email уже существует.");
                }
                else
                {
                    if (model.UseRecaptcha)
                    {
                        var recaptchaHelper = this.GetRecaptchaVerificationHelper();
                        if (string.IsNullOrEmpty(recaptchaHelper.Response))
                        {
                            ModelState.AddModelError("", "Ответ капчи не может быть пустым.");
                            return(View(model));
                        }
                        var recaptchaResult =
                            await recaptchaHelper.VerifyRecaptchaResponseTaskAsync();

                        if (recaptchaResult != RecaptchaVerificationResult.Success)
                        {
                            ModelState.AddModelError("", "Капча введена неверно.");
                            return(View(model));
                        }
                    }

                    var userInfo = new UserInfo
                    {
                        Id            = Guid.NewGuid(),
                        CreatedDate   = DateTime.Now,
                        LastVisitDate = DateTime.Now,
                        School        = model.School,
                        Grade         = model.Grade,
                        HomeTown      = model.HomeTown
                    };

                    using (var db = new ContestMeterDbContext())
                    {
                        var defaultTeam = db.Teams.Include(t => t.Participants).FirstOrDefault(t => t.Name == "Одиночки");
                        if (defaultTeam == null)
                        {
                            return(HttpNotFound());
                        }
                        if (defaultTeam.Participants.Count == defaultTeam.MaxTeamNumber)
                        {
                            ModelState.AddModelError("", "Достигнуто максимальное количество участников команды 'Одиночки'. Пожалуйста, обратитесь к администратору, чтобы он зарезервировал Вам место в этой команде.");
                            return(View(model));
                        }
                    }

                    var user = new ApplicationUser
                    {
                        UserName   = model.UserName,
                        Email      = model.Email,
                        LastName   = model.LastName,
                        FirstName  = model.FirstName,
                        MiddleName = model.MiddleName,
                        Ip         = GetLocalIP4().ToString(),
                        UserInfoId = userInfo.Id,
                        UserInfo   = userInfo,
                        Rating     = 0,
                        TeamId     = null
                    };

                    var result = await UserManager.CreateAsync(user, model.Password);

                    if (result.Succeeded)
                    {
                        // добавляем для только что созданного пользователя роль "participant"
                        UserManager.AddToRole(user.Id, "participant");

                        //функция для добавления только что созданного участника в команду по-умолчанию "Одиночки"
                        if (!AddParticipantToDefaultTeam(user.Id))
                        {
                            return(HttpNotFound());
                        }

                        await SignInAsync(user, isPersistent : false);

                        return(RedirectToAction("Index", "Home"));
                    }
                    else
                    {
                        AddErrors(result);
                    }
                }
            }
            return(View(model));
        }