示例#1
0
        public async Task <IActionResult> View(int pid,
                                               [FromServices] IProblemStore probs)
        {
            var prob = await Store.FindAsync(pid);

            if (prob == null || prob.AllowSubmit == false)
            {
                return(NotFound());
            }

            var fileInfo = probs.GetFile(prob, "view.html");
            var view     = await fileInfo.ReadAsync();

            if (string.IsNullOrEmpty(view))
            {
                StatusMessage = "Error no descriptions avaliable now.";
                return(RedirectToAction(nameof(List)));
            }

            ViewData["Content"] = view;
            ViewData["Id"]      = pid;
            ViewData["Source"]  = prob.Source;
            ViewData["Tag"]     = prob.TagName;
            ViewData["ReadId"]  = prob.ProblemId;
            var uid = int.Parse(User.GetUserId() ?? "-100");

            return(View());
        }
示例#2
0
        public async Task <IActionResult> Problemset(string prob,
                                                     [FromServices] IProblemStore probs)
        {
            if (TooEarly && !ViewData.ContainsKey("IsJury"))
            {
                return(NotFound());
            }
            var problem = Problems.Find(prob);

            if (problem == null)
            {
                return(NotFound());
            }

            var viewFile = probs.GetFile(problem, "view.html");
            var view     = await viewFile.ReadAsync();

            if (string.IsNullOrEmpty(view))
            {
                return(NotFound());
            }

            ViewData["Content"] = view;
            return(View("ProblemView"));
        }
示例#3
0
        public async Task <IActionResult> ProblemView(string prob,
                                                      [FromServices] ISubmissionStore submissions,
                                                      [FromServices] IProblemStore problems)
        {
            if (TooEarly && !ViewData.ContainsKey("IsJury"))
            {
                return(NotFound());
            }
            var problem = Problems.Find(prob);

            if (problem == null)
            {
                return(NotFound());
            }
            ViewBag.CurrentProblem = problem;

            var fileInfo = problems.GetFile(problem, "view.html");
            var view     = await fileInfo.ReadAsync();

            if (string.IsNullOrEmpty(view))
            {
                return(NotFound());
            }
            ViewData["Content"] = view;

            int pid = problem.ProblemId;
            int tid = Team?.TeamId ?? -1000;
            int cid = Contest.ContestId;

            var model = await submissions.ListWithJudgingAsync(
                s => s.ProblemId == pid && s.Author == tid && s.ContestId == cid);

            return(View(model));
        }
示例#4
0
 public KattisExportProvider(
     IProblemStore store,
     ISubmissionStore submissions,
     IExecutableStore execs,
     ITestcaseStore tcs,
     IMarkdownService markdown,
     IStaticFileRepository io2)
 {
     Store       = store;
     StaticFile  = io2;
     Markdown    = markdown;
     Submissions = submissions;
     Executables = execs;
     Testcases   = tcs;
 }
示例#5
0
 public DataImportProvider(
     IProblemStore store,
     ILanguageStore languages,
     IExecutableStore executables,
     ISubmissionStore submissions,
     ILogger <DataImportProvider> logger,
     IStaticFileRepository io2)
 {
     Logger      = logger;
     Store       = store;
     Languages   = languages;
     Executables = executables;
     Submissions = submissions;
     LogBuffer   = new StringBuilder();
     StaticFiles = io2;
 }
示例#6
0
 public KattisImportProvider(
     IProblemStore store,
     ILanguageStore languages,
     IExecutableStore executables,
     ISubmissionStore submissions,
     ILogger <KattisImportProvider> logger,
     IMarkdownService markdownService,
     IStaticFileRepository io2)
 {
     Logger      = logger;
     Store       = store;
     Languages   = languages;
     Executables = executables;
     Submissions = submissions;
     LogBuffer   = new StringBuilder();
     Markdown    = markdownService;
     StaticFiles = io2;
 }
示例#7
0
 public ProblemsetStore(DbContextAccessor context, IProblemStore problem)
 {
     Context = context;
     Parent  = problem;
 }
示例#8
0
 public static IFileInfo GetFile(this IProblemStore that, ContestProblem problem, string fileName)
 => that.GetFile(problem.ProblemId, fileName);
        public async Task <ActionResult <int> > InternalError(
            [FromForm] InternalErrorModel model,
            [FromServices] IInternalErrorStore store,
            [FromServices] ILanguageStore langs,
            [FromServices] IProblemStore probs)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            var toDisable = model.disabled.AsJson <InternalErrorDisable>();
            var kind      = toDisable.kind;

            var ie = await store.CreateAsync(
                new InternalError
            {
                JudgehostLog = model.judgehostlog,
                JudgingId    = model.judgingid,
                ContestId    = model.cid,
                Description  = model.description,
                Disabled     = model.disabled,
                Status       = InternalErrorStatus.Open,
                Time         = DateTimeOffset.Now,
            });

            if (kind == "language")
            {
                var langid = toDisable.langid;
                await langs.ToggleJudgeAsync(langid, false);

                Telemetry.TrackDependency(
                    dependencyTypeName: "Language",
                    dependencyName: langid,
                    data: model.description,
                    startTime: DateTimeOffset.Now,
                    duration: TimeSpan.Zero,
                    success: false);
            }
            else if (kind == "judgehost")
            {
                var hostname = toDisable.hostname;
                await Judgehosts.ToggleAsync(hostname, false);

                Telemetry.TrackDependency(
                    dependencyTypeName: "JudgeHost",
                    dependencyName: hostname,
                    data: model.description,
                    startTime: DateTimeOffset.Now,
                    duration: TimeSpan.Zero,
                    success: false);
            }
            else if (kind == "problem")
            {
                var probid = toDisable.probid.Value;
                await probs.ToggleJudgeAsync(probid, false);

                Telemetry.TrackDependency(
                    dependencyTypeName: "Problem",
                    dependencyName: $"p{probid}",
                    data: model.description,
                    startTime: DateTimeOffset.Now,
                    duration: TimeSpan.Zero,
                    success: false);
            }
            else
            {
                Telemetry.TrackDependency(
                    dependencyTypeName: "Unresolved",
                    dependencyName: kind,
                    data: model.description,
                    startTime: DateTimeOffset.Now,
                    duration: TimeSpan.Zero,
                    success: false);
            }

            if (model.judgingid.HasValue)
            {
                var(j, pid, cid, uid, time) = await Judgings.FindAsync(model.judgingid.Value);
                await ReturnToQueue(j, cid, pid, uid, time);
            }

            await HttpContext.AuditAsync("added", $"{ie.ErrorId}", $"for {kind}");

            return(ie.ErrorId);
        }
示例#10
0
 public ProblemsController(UserManager <User> um, IProblemStore db)
 {
     UserManager = um;
     Store       = db;
 }