示例#1
0
        public async Task <IActionResult> Submit(
            [FromServices] ILanguageStore langs)
        {
            ViewBag.Language = await langs.ListAsync();

            return(Window(new CodeSubmitModel()));
        }
示例#2
0
        public async Task <IActionResult> Submit(int pid,
                                                 [FromServices] ILanguageStore lang)
        {
            var prob = await Store.FindAsync(pid);

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

            if (!prob.AllowSubmit.Value)
            {
                return(Message(
                           title: $"Submit Problem {pid}",
                           message: $"Problem {pid} is not allowed for submitting.",
                           MessageType.Danger));
            }

            ViewBag.ProblemTitle = prob.Title;
            ViewBag.Language     = await lang.ListAsync(true);

            return(Window(new CodeSubmitModel
            {
                Code = "",
                Language = "cpp",
                ProblemId = pid,
            }));
        }
示例#3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="EmPageSitemapPattern"/> class.
 /// </summary>
 /// <param name="template"></param>
 /// <param name="languageStore"></param>
 public EmPageSitemapPattern(string template, ILanguageStore languageStore)
 {
     this.Patterns.Add(template);
     this.Patterns.AddRange(languageStore
                            .GetLanguages()
                            .Where(x => !x.IsDefault)
                            .Select(x => $"/{x.Code}{template}")
                            .ToList());
 }
示例#4
0
        public async Task <IActionResult> Detail(
            int pid, int sid, int?jid,
            [FromServices] ILanguageStore langs)
        {
            var s = await Submissions.FindAsync(sid, true);

            if (s == null || s.ProblemId != pid)
            {
                return(NotFound());
            }
            var j = s.Judgings.SingleOrDefault(jj => jid.HasValue ? jj.JudgingId == jid : jj.Active);

            if (j == null)
            {
                return(NotFound());
            }
            var l = await langs.FindAsync(s.Language);

            var det = await Judgings.GetDetailsAsync(pid, j.JudgingId);

            var uname = await Submissions.GetAuthorNameAsync(sid);

            return(View(new ViewSubmissionModel
            {
                SubmissionId = s.SubmissionId,
                ContestId = s.ContestId,
                Status = j.Status,
                ExecuteMemory = j.ExecuteMemory,
                ExecuteTime = j.ExecuteTime,
                Judging = j,
                Expected = s.ExpectedResult,
                JudgingId = j.JudgingId,
                LanguageId = s.Language,
                Time = s.Time,
                SourceCode = s.SourceCode,
                CompileError = j.CompileError,
                CombinedRunCompare = Problem.CombinedRunCompare,
                TimeLimit = Problem.TimeLimit,
                AllJudgings = s.Judgings,
                UserName = uname ?? "SYSTEM",
                Details = det,
                TestcaseNumber = det.Count(),
                Author = s.Author,
                ServerName = j.Server ?? "UNKNOWN",
                LanguageName = l.Name,
                LanguageExternalId = l.Id,
                TimeFactor = l.TimeFactor,
            }));
        }
示例#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 async Task <IActionResult> ChangeExpected(
            int pid, int sid,
            [FromServices] ILanguageStore langs)
        {
            var sub = await Submissions.FindAsync(sid);

            if (sub == null || sub.ProblemId != pid)
            {
                return(NotFound());
            }
            ViewBag.Languages = await langs.ListAsync();

            return(Window(new ChangeExpectedModel
            {
                Verdict = !sub.ExpectedResult.HasValue ? -1 : (int)sub.ExpectedResult.Value,
                Language = sub.Language,
            }));
        }
示例#8
0
        public async Task <IActionResult> Submit(
            CodeSubmitModel model,
            [FromServices] ILanguageStore langs)
        {
            var lang = await langs.FindAsync(model.Language);

            if (lang == null)
            {
                return(BadRequest());
            }

            var sub = await Submissions.CreateAsync(
                code : model.Code,
                language : lang.Id,
                problemId : Problem.ProblemId,
                contestId : null,
                userId : int.Parse(User.GetUserId()),
                ipAddr : HttpContext.Connection.RemoteIpAddress,
                via : "polygon-page",
                username : User.GetUserName(),
                expected : Verdict.Unknown);

            return(RedirectToAction(nameof(Detail), new { sid = sub.SubmissionId }));
        }
示例#9
0
 public ProductEventsSubscription()
 {
     _languageStore = LanguageStores.Get(CommerceInstance.Current.Name);
 }
示例#10
0
 public LanguagesController(ILanguageStore store)
 {
     Store = store;
 }
示例#11
0
 public CachedLanguageStore(ILanguageStore underlyingStore)
 {
     _underlyingStore = underlyingStore;
     ReinitializeCache();
 }
示例#12
0
 public IndexesController()
 {
     _languageStore = LanguageStores.Get(CommerceInstance.Current.Name);
 }
示例#13
0
 public CachedLanguageStore(ILanguageStore underlyingStore)
 {
     _underlyingStore = underlyingStore;
     ReinitializeCache();
 }
示例#14
0
 public SitemapComposition(ILanguageStore languageStore, IEntityContext entityContext)
 {
     this.languageStore = languageStore;
     this.entityContext = entityContext;
 }
示例#15
0
 public static void Register(string instance, ILanguageStore store)
 {
     Remove(instance);
     _storesByInstance.Add(instance, store);
 }
示例#16
0
 public LanguageController()
 {
     _languageStore = LanguageStores.Get(CurrentInstance.Name);
 }
示例#17
0
        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);
        }
示例#18
0
        public async Task <IActionResult> Submit(
            int pid, CodeSubmitModel model,
            [FromServices] ILanguageStore lang)
        {
            if (model.ProblemId != pid)
            {
                return(BadRequest());
            }

            // check user blocking
            if (User.IsInRole("Blocked"))
            {
                ModelState.AddModelError("xys::blocked",
                                         "You are not permitted to submit code.");
            }

            // check problem submit
            var prob = await Store.FindAsync(pid);

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

            if (!prob.AllowSubmit.Value)
            {
                StatusMessage = $"Problem {pid} is not allowed for submitting.";
                return(RedirectToAction(nameof(View)));
            }

            // check language blocking
            var langs = await lang.ListAsync(true);

            if (!langs.Any(a => a.Id == model.Language))
            {
                ModelState.AddModelError("lang::notallow",
                                         "You can't submit solutions with this language.");
            }

            if (ModelState.ErrorCount > 0)
            {
                ViewBag.ProblemTitle = prob.Title;
                ViewBag.Language     = langs;
                return(View(model));
            }
            else
            {
                var sub = await Submits.CreateAsync(
                    code : model.Code,
                    language : model.Language,
                    problemId : prob.ProblemId,
                    contestId : null,
                    userId : int.Parse(User.GetUserId()),
                    ipAddr : HttpContext.Connection.RemoteIpAddress,
                    via : "problem-list",
                    username : User.GetUserName());

                int id = sub.SubmissionId;

                return(RedirectToAction(nameof(View)));
            }
        }
示例#19
0
 public static void Register(string instance, ILanguageStore store)
 {
     Remove(instance);
     _storesByInstance.Add(instance, store);
 }
示例#20
0
 public IndexesController()
 {
     _languageStore = LanguageStores.Get(CommerceInstance.Current.Name);
 }
 public LanguageController()
 {
     _languageStore = LanguageStores.Get(CurrentInstance.Name);
 }