public ActionResult Show() { // 检查 URL 查询参数。 if (string.IsNullOrEmpty(Request.QueryString["id"])) { return(Redirect("~/Contest")); } int id; if (!int.TryParse(Request.QueryString["id"], out id)) { return(Redirect("~/Contest")); } ViewBag.ContestId = id; // 检查用户权限。 ContestHandle contest = new ContestHandle(id); UserHandle user = UserSession.GetUserHandle(Session); switch (ContestAuthorization.GetUserAuthorizationState(contest, user).RegisterState) { case ContestRegisterState.IndividualRegistered: case ContestRegisterState.TeamRegistered: return(View()); case ContestRegisterState.PasswordRequired: return(Redirect($"~/Contest/Verify?id={id}")); case ContestRegisterState.NotRegistered: default: return(Redirect("~/Contest")); } }
public ActionResult Delete() { string contestIdString = Request.QueryString["id"]; if (string.IsNullOrEmpty(contestIdString)) { return(new ContentResult()); } int contestId; if (!int.TryParse(contestIdString, out contestId)) { return(new ContentResult()); } ContestHandle contest = new ContestHandle(contestId); UserHandle user = UserSession.GetUserHandle(Session); // 检查用户操作权限。 if (!ContestAuthorization.GetUserAccess(contest, user).HasFlag(DataAccess.Write)) { // 用户对该比赛没有写权限。 return(new ContentResult()); } ContestManager.Default.RemoveContest(contestId); return(new ContentResult()); }
public ActionResult ContestRegisterIdentity() { string contestIdString = Request.QueryString["id"]; if (string.IsNullOrEmpty(contestIdString)) { return(QueryResult(1, "Contest ID is required.")); } int contestId; if (!int.TryParse(contestIdString, out contestId)) { return(QueryResult(2, "Invalid contest ID.")); } ContestHandle contest = new ContestHandle(contestId); UserHandle user = UserSession.GetUserHandle(Session); if (user == null) { // 当前会话中不存在任何活动的登录用户。 return(QueryResult(3, "User session not exist.")); } ContestAuthorizationState authState = ContestAuthorization.GetUserAuthorizationState(contest, user); if (authState.RegisterState == ContestRegisterState.NotRegistered || authState.RegisterState == ContestRegisterState.PasswordRequired) { return(QueryResult(string.Empty)); } else { if (authState.RegisterState == ContestRegisterState.IndividualRegistered) { return(QueryResult(user.Username)); } else { TeamHandle registeredTeam = new TeamHandle(authState.TeamId); using (TeamDataProvider teamData = TeamDataProvider.Create(registeredTeam, true)) { return(QueryResult(teamData.Name)); } } } }
public ActionResult ContestDetail() { string contestIdString = Request.QueryString["id"]; if (string.IsNullOrEmpty(contestIdString)) { return(QueryResult(1, "Contest ID required.")); } int contestId; if (!int.TryParse(contestIdString, out contestId)) { return(QueryResult(2, "Invalid contest ID.")); } // 检查用户权限。 ContestHandle contest = new ContestHandle(contestId); DataAccess access = ContestAuthorization.GetUserAccess(contest, UserSession.GetUserHandle(Session)); if (access == DataAccess.None) { return(QueryResult(3, "Access denied.")); } else if (access == DataAccess.Read) { // 用户对于该场比赛处于只读状态。检查比赛的执行状态。 bool loadProblems = true; using (ContestDataProvider contestData = ContestDataProvider.Create(contest, true)) { if (contestData.Status == ContestStatus.Pending) { loadProblems = false; } } return(QueryResult(ContestDisplayModel.FromContestHandle(contest, loadProblems))); } else { return(QueryResult(ContestDisplayModel.FromContestHandle(contest, true))); } }
/// <summary> /// 将当前数据模型中的内容保存至给定的比赛。 /// </summary> /// <param name="handle">比赛句柄。</param> /// <exception cref="ArgumentNullException"/> public void SaveTo(ContestHandle handle) { if (handle == null) { throw new ArgumentNullException(nameof(handle)); } using (ContestDataProvider data = ContestDataProvider.Create(handle, false)) { data.Title = Title; data.Creator = Creator; data.AuthorizationGroup = UsergroupConvert.ConvertFromString(UsergroupName); data.StartTime = DateTime.ParseExact(StartTimeString, "yyyy-MM-dd HH:mm:ss", new CultureInfo("en-US")); data.EndTime = DateTime.ParseExact(EndTimeString, "yyyy-MM-dd HH:mm:ss", new CultureInfo("en-US")); data.ParticipationMode = ContestParticipationModeConvert.ConvertFromString(ParticipationModeName); data.AuthorizationMode = ContestAuthorizationModeConvert.ConvertFromString(AuthorizationModeName); } ContestAuthorization.UpdateContestPassword(handle, Password ?? string.Empty); }
public ActionResult ContestAccess() { string contestIdString = Request.QueryString["id"]; if (string.IsNullOrEmpty(contestIdString)) { return(QueryResult(1, "Contest ID is required.")); } int contestId; if (!int.TryParse(contestIdString, out contestId)) { return(QueryResult(2, "Invalid contest ID.")); } ContestHandle contest = new ContestHandle(contestId); UserHandle user = UserSession.GetUserHandle(Session); return(QueryResult(ContestAuthorization.GetUserAccess(contest, user))); }
public ActionResult SetAnnouncement(FormCollection form) { string contestIdString = Request.QueryString["id"]; if (string.IsNullOrEmpty(contestIdString)) { return(new ContentResult()); } int contestId; if (!int.TryParse(contestIdString, out contestId)) { return(new ContentResult()); } string announcement = form["announcementContent"]; if (string.IsNullOrEmpty(announcement)) { return(new ContentResult()); } // 检查用户身份权限。 ContestHandle contest = new ContestHandle(contestId); UserHandle user = UserSession.GetUserHandle(Session); if (!ContestAuthorization.GetUserAccess(contest, user).HasFlag(DataAccess.Write)) { // 用户对当前的比赛没有写权限。 return(new ContentResult()); } using (ContestDataProvider contestData = ContestDataProvider.Create(contest, false)) { contestData.Announcement = announcement; } return(new ContentResult()); }
public ActionResult Verify() { // 检查用户操作权限。 if (!UserSession.IsAuthorized(Session)) { return(LoginController.RequestForLogin(this)); } // 检查 URL 查询参数。 if (string.IsNullOrEmpty(Request.QueryString["id"])) { return(Redirect("~/Contest")); } int id; if (!int.TryParse(Request.QueryString["id"], out id)) { return(Redirect("~/Contest")); } ContestHandle contest = new ContestHandle(id); UserHandle user = new UserHandle(UserSession.GetUsername(Session)); ContestAuthorizationState state = ContestAuthorization.GetUserAuthorizationState(contest, user); switch (state.RegisterState) { case ContestRegisterState.IndividualRegistered: case ContestRegisterState.TeamRegistered: return(Redirect($"~/Contest/Show?id={id}")); case ContestRegisterState.PasswordRequired: return(View()); case ContestRegisterState.NotRegistered: default: ViewBag.Failed = true; return(View()); } }
public ActionResult Verify(FormCollection form) { string contestIdString = Request.QueryString["id"]; if (string.IsNullOrEmpty(contestIdString)) { return(Redirect("~/Contest")); } int contestId; if (!int.TryParse(Request.QueryString["id"], out contestId)) { return(Redirect("~/Contest")); } if (!ContestManager.Default.IsContestExist(contestId)) { return(Redirect("~/Contest")); } ContestHandle contest = new ContestHandle(contestId); if (!ContestAuthorization.CheckContestPassword(contest, form["Password"])) { ViewBag.PasswordError = true; return(View()); } else { // 检查注册参赛者身份。 string participant = form["Participant"]; if (string.IsNullOrEmpty(participant)) { ViewBag.ParticipantError = true; return(View()); } if (participant.StartsWith("(Individual)", StringComparison.CurrentCultureIgnoreCase)) { string username = participant.Substring("(Individual)".Length); if (!UserManager.Default.IsUserExist(username)) { ViewBag.ParticipantError = true; return(View()); } ContestAuthorization.Register(contest, new UserHandle(username)); } else if (participant.StartsWith("(Teamwork)", StringComparison.CurrentCultureIgnoreCase)) { int teamId; if (!int.TryParse(participant.Substring("(Teamwork)".Length), out teamId)) { ViewBag.ParticipantError = true; return(View()); } if (!UserManager.Default.IsTeamExist(teamId)) { ViewBag.ParticipantError = true; return(View()); } ContestAuthorization.Register(contest, new TeamHandle(teamId)); } else { ViewBag.ParticipantError = true; return(View()); } return(Redirect(string.Format("~/Contest/Show?id={0}", contestId))); } }