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 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()); } }
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(); }
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(); }
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("~/"); }
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(); } } }
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; } }
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); }
public DashboardController() { this.DB = new QuizWebAppDb(); }
public QuestionController() { this.DB = new QuizWebAppDb(); }
public PlayerController() { DB = new QuizWebAppDb(); }
public AdminController() { this.DB = new QuizWebAppDb(); }