Ejemplo n.º 1
0
        private void RegistUserAndIssueAuthCookie(AuthenticationResult result)
        {
            var salt = ConfigurationManager.AppSettings["SaltOfUserID"];
            var user = new QuizWebApp.Models.User
            {
                UserId         = GetHashedText(string.Join("@", salt, result.ProviderUserId, result.Provider)),
                IdProviderName = result.Provider,

                // terrible hack...
                Name = result.Provider != "github" ? result.UserName : result.ExtraData["login"]
            };

            using (var db = new QuizWebApp.Models.QuizWebAppDb())
            {
                if (db.Users.Find(user.UserId) == null)
                {
                    db.Users.Add(user);
                    db.SaveChanges();
                }
            }

            var cookie = FormsAuthentication.GetAuthCookie(user.Name, false);
            var ticket = FormsAuthentication.Decrypt(cookie.Value);

            ticket.GetType().InvokeMember("_UserData",
                                          BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Instance,
                                          null, ticket, new object[] { user.UserId });
            cookie.Value = FormsAuthentication.Encrypt(ticket);
            Response.Cookies.Add(cookie);
        }
Ejemplo n.º 2
0
        public void UpdateCurrentState(ContextStateType state)
        {
            using (var db = new QuizWebAppDb())
            {
                var context = db.Contexts.First();
                context.CurrentState = state;

                // if change state to "3:show answer", judge to all players.
                if (state == ContextStateType.ShowCorrectAnswer)
                {
                    var answers = db
                        .Answers
                        .Where(a => a.QuestionID == context.CurrentQuestionID)
                        .ToList();
                    var currentQuestion = db.Questions.Find(context.CurrentQuestionID);

                    answers
                        .ForEach(a => a.Status =
                            a.ChoosedOptionIndex == currentQuestion.IndexOfCorrectOption
                            ? AnswerStateType.Correct : AnswerStateType.Incorrect);
                }

                db.SaveChanges();
            }

            Clients.All.CurrentStateChanged(state.ToString());
        }
        public static bool IsAllow(HttpContextBase httpContext)
        {
            var userIdentity = httpContext.User.Identity;
            if (userIdentity.IsAuthenticated == false) return false;
            using (var db = new QuizWebAppDb())
            {
                var userInfo = db.Users.Find(userIdentity.UserId());
                if (userInfo == null) return false;

                return userInfo.IsAdmin;
            }
        }
        public CurrentDashboardViewModel(QuizWebAppDb db)
        {
            var context = db.Contexts.First();
            Question = db.Questions.Find(context.CurrentQuestionId);
            var playerIds = new HashSet<string>(db.Answers.Select(a => a.PlayerId).Distinct());
            Answers = db.Answers.Where(a => a.QuestionId == Question.QuestionId).ToDictionary(a => a.PlayerId);

            var users = db.Users.ToArray();
            Players = users
                .Where(user => !user.IsAdmin && playerIds.Contains(user.UserId))
                .ToArray();
        }
 public bool IsAllow(HttpContextBase httpContext)
 {
     var userIdentity = httpContext.User.Identity;
     if (userIdentity.IsAuthenticated == false) return false;
     using (var db = new QuizWebAppDb())
     {
         var userInfo = db.Users.Find(userIdentity.UserId());
         if (userInfo == null) return false; // user not found can't pass
         if (userInfo.IsAdmin) return true; // Admin always passes through
         return _evaluator(db.Contexts.First());
     }
 }
Ejemplo n.º 6
0
        public DashboardViewModel(QuizWebAppDb db)
        {
            this.Answers = db.Answers.ToArray();
            this.Questions = db.Questions.ToArray();

            var users = db.Users.ToArray();
            this.Players = users
                .Where(user =>
                    this.Answers.Any(a => a.PlayerID == user.UserId) ||
                    DateTime.UtcNow.AddMinutes(-30) <= user.AttendAsPlayerAt
                )
                .OrderBy(user => user.Name)
                .ToArray();
        }
Ejemplo n.º 7
0
        public DashboardViewModel(QuizWebAppDb db)
        {
            this.Answers   = db.Answers.ToArray();
            this.Questions = db.Questions.ToArray();

            var users = db.Users.ToArray();

            this.Players = users
                           .Where(user =>
                                  this.Answers.Any(a => a.PlayerID == user.UserId) ||
                                  DateTime.UtcNow.AddMinutes(-30) <= user.AttendAsPlayerAt
                                  )
                           .OrderBy(user => user.Name)
                           .ToArray();
        }
Ejemplo n.º 8
0
        public void PlayerSelectedOptionIndex(int answerIndex)
        {
            using (var db = new QuizWebAppDb())
            {
                var playerId = Context.User.Identity.UserId();
                var questionId = db.Contexts.First().CurrentQuestionID;
                var ansewer = db.Answers.First(a => a.PlayerID == playerId && a.QuestionID == questionId);
                ansewer.ChoosedOptionIndex = answerIndex;
                ansewer.Status = AnswerStateType.Pending;/*entried*/

                db.SaveChanges();
            }

            Clients.Others.PlayerSelectedOptionIndex();
        }
Ejemplo n.º 9
0
 public ActionResult SignOut()
 {
     if (this.User.Identity.IsAuthenticated)
     {
         using (var db = new QuizWebAppDb())
         {
             var userInfo = db.Users.Find(this.User.Identity.UserId());
             if (userInfo != null)
             {
                 userInfo.AttendAsPlayerAt = null;
                 db.SaveChanges();
             }
         }
         FormsAuthentication.SignOut();
     }
     return Json(new { url = this.Url.Content("~/") });
 }
        public ActionResult SignIn(SignInViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return View(model);
            }

            var salt = ConfigurationManager.AppSettings["SaltOfUserID"];
            var user = new User
            {
                Name = model.HandleName,
                UserId = GetHashedText(string.Join("@", salt, model.HandleName.ToUpperInvariant())),
                Pass = GetHashedText(string.Join(";", salt, model.HandleName.ToUpperInvariant(), salt, model.Pass)),
                CreatedAt = DateTime.UtcNow,
                IsAdmin = false,
            };

            using (var db = new QuizWebAppDb())
            {
                var existing = db.Users.Find(user.UserId);
                if (existing == null)
                {
                    if (!db.Users.Any())
                    {
                        user.IsAdmin = true;
                    }
                    db.Users.Add(user);
                    db.SaveChanges();
                }
                else if (existing.Pass != user.Pass)
                {
                    ModelState.AddModelError("HandleName", "User already in use with other password");
                    return View(model);
                }
            }

            var cookie = FormsAuthentication.GetAuthCookie(user.Name, false);
            var ticket = FormsAuthentication.Decrypt(cookie.Value);
            ticket.GetType().InvokeMember("_UserData", BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Instance, null, ticket, new object[] { user.UserId });
            cookie.Value = FormsAuthentication.Encrypt(ticket);
            Response.Cookies.Add(cookie);

            return Redirect("~/");
        }
Ejemplo n.º 11
0
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            Database.SetInitializer(new CreateDatabaseIfNotExists<QuizWebAppDb>());

            using (var db = new QuizWebAppDb())
            {
                if (!db.Contexts.Any())
                {
                    db.Contexts.Add(new Context { CurrentQuestionId = 1, CurrentState = ContextStateType.PleaseWait, IsDashboardAvailableForUsers = true });
                    db.SaveChanges();
                }
            }
        }
Ejemplo n.º 12
0
        public static bool IsAllow(HttpContextBase httpContext)
        {
            var userIdentity = httpContext.User.Identity;
            if (userIdentity.IsAuthenticated == false) return false;

            // If no configuration about Quiz Master,
            // then all users can be Quiz Master.
            var setting = JsonAppSettings.AsDictionary("QuizMaster");
            if (setting == null) return true;

            using (var db = new QuizWebAppDb())
            {
                var userInfo = db.Users.Find(userIdentity.UserId());
                if (userInfo == null) return false;

                return
                    setting["idProviderName"] == userInfo.IdProviderName &&
                    setting["name"] == userInfo.Name;
            }
        }
Ejemplo n.º 13
0
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            RouteTable.Routes.MapHubs();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterAuth();

            Database.SetInitializer(new CreateDatabaseIfNotExists<QuizWebAppDb>());

            using (var db = new QuizWebAppDb())
            {
                if (db.Contexts.Any() == false)
                {
                    db.Contexts.Add(new Context { CurrentQuestionID = 1, CurrentState = ContextStateType.PleaseWait });
                    db.SaveChanges();
                }
            }
        }
        public DashboardViewModel(QuizWebAppDb db)
        {
            Questions = db.Questions.ToArray();
            var answersPerPlayer = db.Answers.ToLookup(all => all.PlayerId);
            Answers = answersPerPlayer.ToDictionary(perplayer => perplayer.Key, perplayer => perplayer.ToDictionary(q => q.QuestionId));

            var users = db.Users.ToArray();
            Players = users
                .Where(user => !user.IsAdmin && Answers.ContainsKey(user.UserId))
                .Select(user => new PlayerViewModel
                {
                    UserId = user.UserId,
                    Name = user.Name,
                    CurrentScore = answersPerPlayer[user.UserId]
                        .Where(a => a.Status == AnswerStateType.Correct)
                        .Sum(a => a.AssignedValue)
                })
                .OrderByDescending(player => player.CurrentScore)
                .ToArray();

            CalculateColors(Players);
        }
Ejemplo n.º 15
0
        private void RegistUserAndIssueAuthCookie(AuthenticationResult result)
        {
            var salt = ConfigurationManager.AppSettings["SaltOfUserID"];
            var user = new QuizWebApp.Models.User
            {
                UserId = GetHashedText(string.Join("@", salt, result.ProviderUserId, result.Provider)),
                IdProviderName = result.Provider,

                // terrible hack...
                Name = result.Provider != "github" ? result.UserName : result.ExtraData["login"]
            };

            using (var db = new QuizWebApp.Models.QuizWebAppDb())
            {
                if (db.Users.Find(user.UserId) == null)
                {
                    db.Users.Add(user);
                    db.SaveChanges();
                }
            }

            var cookie = FormsAuthentication.GetAuthCookie(user.Name, false);
            var ticket = FormsAuthentication.Decrypt(cookie.Value);
            ticket.GetType().InvokeMember("_UserData",
                BindingFlags.SetField | BindingFlags.NonPublic | BindingFlags.Instance,
                null, ticket, new object[] { user.UserId });
            cookie.Value = FormsAuthentication.Encrypt(ticket);
            Response.Cookies.Add(cookie);
        }
 public DashboardController()
 {
     this.DB = new QuizWebAppDb();
 }
 public QuestionController()
 {
     this.DB = new QuizWebAppDb();
 }
 public PlayerController()
 {
     DB = new QuizWebAppDb();
 }
Ejemplo n.º 19
0
 public AdminController()
 {
     this.DB = new QuizWebAppDb();
 }