public IActionResult DeleteRecord(int id)
        {
            var y = _db.CodeStyleFiles.Find(id);

            _db.CodeStyleFiles.Remove(y);
            _db.SaveChanges();
            return(RedirectToAction("AllRecords"));
        }
示例#2
0
        public IActionResult DeleteGroup(int id)
        {
            var y = _db.Groups.Find(id);

            _db.Groups.Remove(y);
            _db.SaveChanges();
            return(RedirectToAction("AllGroups"));
        }
示例#3
0
        public static TestResponse WriteToDb(HSEContestDbContext _db, TestingResult res, bool recheck)
        {
            bool ok = false;

            if (recheck)
            {
                var existing = _db.TestingResults.FirstOrDefault(r => r.SolutionId == res.SolutionId && r.TestId == res.TestId);

                if (existing != null)
                {
                    existing.Commentary = res.Commentary;
                    existing.ResultCode = res.ResultCode;
                    existing.Score      = res.Score;
                    existing.TestData   = res.TestData;

                    _db.SaveChanges();

                    ok = true;
                }
            }
            else
            {
                var x           = _db.TestingResults.Add(res);
                var beforeState = x.State;
                int r           = _db.SaveChanges();
                var afterState  = x.State;

                ok = beforeState == EntityState.Added && afterState == EntityState.Unchanged && r == 1;
            }

            TestResponse response;

            if (ok)
            {
                response = new TestResponse
                {
                    OK           = true,
                    Message      = "success",
                    Result       = res.ResultCode,
                    Score        = res.Score,
                    TestResultId = res.Id,
                    TestId       = res.TestId,
                };
            }
            else
            {
                response = new TestResponse
                {
                    OK      = false,
                    Message = "can't write result to db",
                    Result  = ResultCode.IE,
                    Score   = res.Score,
                    TestId  = res.TestId,
                };
            }

            return(response);
        }
        TestResponse WriteTestResponseToDb(TestResponse resp, int solutionId, int testId)
        {
            var testResult = _db.TestingResults.FirstOrDefault(t => t.SolutionId == solutionId && t.TestId == testId);

            if (testResult is null)
            {
                var res = new TestingResult
                {
                    Score = resp.Score,
                    Commentary = resp.Message,
                    SolutionId = solutionId,
                    TestId = testId,
                    ResultCode = resp.Result,
                };
                var x = _db.TestingResults.Add(res);
                var beforeState = x.State;
                int r = _db.SaveChanges();
                var afterState = x.State;

                bool ok = beforeState == EntityState.Added && afterState == EntityState.Unchanged && r == 1;

                TestResponse response;

                if (ok)
                {
                    response = new TestResponse
                    {
                        OK = true,
                        Message = "success",
                        Result = ResultCode.OK,
                        Score = res.Score,
                        TestResultId = res.Id,
                        TestId = testId,
                    };
                }
                else
                {
                    response = new TestResponse
                    {
                        OK = false,
                        Message = "can't write result to db",
                        Result = ResultCode.IE,
                        Score = res.Score,
                        TestId = testId,
                    };
                }

                return response;
            }
            else
            {
                return resp;
            }
        }
示例#5
0
        public async Task CheckSolutions(PlagiarismCheckRequest checkRequest)
        {
            try
            {
                int taskId = checkRequest.TaskId;

                var task = _db.StudentTasks.Find(taskId);

                while (DateTime.Now < task.To)
                {
                    await Task.Delay(5 * 60 * 1000);

                    _db.Entry(task).Reload();
                }

                var check = _db.PlagiarismChecks.Find(taskId);

                if (check.Settings.MakeCheck)
                {
                    var sourceFileList   = new List <string>();
                    var studentSolutions = _db.StudentResults.Where(r => r.TaskId == taskId).Select(r => r.Solution).ToList();

                    var taskDir = new DirectoryInfo("C:\\tasks\\" + taskId.ToString());

                    if (taskDir.Exists)
                    {
                        taskDir.Delete(true);
                    }

                    taskDir.Create();

                    var saveDir = new DirectoryInfo("C:\\saving");

                    if (!saveDir.Exists)
                    {
                        saveDir.Create();
                    }

                    foreach (var sol in studentSolutions)
                    {
                        var curSaveDir = new DirectoryInfo(saveDir.FullName + "\\" + sol.Id.ToString());

                        if (curSaveDir.Exists)
                        {
                            curSaveDir.Delete(true);
                        }

                        curSaveDir.Create();

                        string fullPath = curSaveDir.FullName + "\\" + sol.File.Name;

                        File.WriteAllBytes(fullPath, sol.File.Content);
                        ZipFile.ExtractToDirectory(fullPath, curSaveDir.FullName, true);

                        var curSolDir = new DirectoryInfo(taskDir.FullName + "\\" + sol.Id.ToString());
                        if (curSolDir.Exists)
                        {
                            curSolDir.Delete(true);
                        }
                        curSolDir.Create();

                        var solFiles = curSaveDir.GetFiles("*.cs", SearchOption.AllDirectories).Where(p => !p.FullName.Contains("\\obj\\")).ToList();

                        foreach (var file in solFiles)
                        {
                            file.CopyTo(curSolDir.FullName + "//" + file.Name);
                        }

                        curSaveDir.Delete(true);
                    }

                    var request = new MossRequest
                    {
                        UserId          = _config.MossId,
                        IsDirectoryMode = true,
                        IsBetaRequest   = false,
                        Language        = check.Settings.Language,
                        MaxMatches      = check.Settings.MaxMatches
                    };

                    //request.BaseFile.AddRange(this.BaseFileList);

                    foreach (var solDir in taskDir.GetDirectories())
                    {
                        var curSolFiles = solDir.GetFiles("*.cs", SearchOption.AllDirectories).Select(f => f.FullName).Where(p => !p.Contains("\\obj\\")).ToList();
                        sourceFileList.AddRange(curSolFiles);
                    }

                    request.Files.AddRange(sourceFileList);

                    bool res = request.SendRequest(out string response);

                    check.Link = response;

                    if (res)
                    {
                        string html = new WebClient().DownloadString(response);

                        var config = Configuration.Default;

                        var context = BrowsingContext.New(config);

                        var document = context.OpenAsync(req => req.Content(html)).Result;

                        var allLines = document.All.Where(m => m.LocalName == "tr" && !m.Children.Any(c => c.LocalName == "th"));

                        foreach (var line in allLines)
                        {
                            var file1    = ParseUserAndPercent(line.Children[0]);
                            var file2    = ParseUserAndPercent(line.Children[1]);
                            var lMatched = int.Parse(line.Children[2].InnerHtml);

                            var solId1   = file1.Item1;
                            var percent1 = file1.Item2;

                            var solId2   = file2.Item1;
                            var percent2 = file2.Item2;

                            if (percent1 > check.Settings.MinPercent || percent2 > check.Settings.MinPercent)
                            {
                                var sol1 = _db.Solutions.Find(solId1);
                                var sol2 = _db.Solutions.Find(solId2);

                                var newResult = new PlagiarismResult
                                {
                                    SolutionId1  = sol1.Id,
                                    SolutionId2  = sol2.Id,
                                    Percent1     = percent1,
                                    Percent2     = percent2,
                                    LinesMatched = lMatched,
                                    TaskId       = taskId,
                                };

                                _db.PlagiarismResults.Add(newResult);

                                sol1.PlagiarismDetected = true;
                                sol2.PlagiarismDetected = true;
                            }
                        }
                    }
                    _db.SaveChanges();
                }
            }
            catch
            {
                return;
            }
        }
示例#6
0
        public async Task <IActionResult> UploadUsers(IFormFile file)
        {
            if (file != null)
            {
                CsvParserOptions    csvParserOptions = new CsvParserOptions(true, ';');
                CsvUserMapping      csvMapper        = new CsvUserMapping();
                CsvParser <CsvUser> csvParser        = new CsvParser <CsvUser>(csvParserOptions, csvMapper);

                var res = csvParser.ReadFromStream(file.OpenReadStream(), System.Text.Encoding.UTF8).ToList();

                foreach (var userRecord in res)
                {
                    var groupName = userRecord.Result.GroupName;
                    var group     = _db.Groups.FirstOrDefault(g => g.Name == groupName);

                    if (group is null)
                    {
                        group = new Group
                        {
                            Name = groupName,
                        };

                        _db.Groups.Add(group);
                        _db.SaveChanges();
                    }

                    User newUser = new User
                    {
                        FirstName = userRecord.Result.FirstName,
                        LastName  = userRecord.Result.LastName,
                        Email     = userRecord.Result.Email,
                        UserName  = userRecord.Result.Email,
                    };

                    var result = await _userManager.CreateAsync(newUser, userRecord.Result.Password);

                    bool ok = result.Succeeded;

                    if (ok)
                    {
                        var groups = new List <UserGroup> {
                            new UserGroup {
                                GroupId = group.Id, UserId = newUser.Id
                            }
                        };
                        newUser.Groups = groups;

                        _db.SaveChanges();

                        var result1 = await _userManager.AddToRoleAsync(newUser, "student");

                        ok = result1.Succeeded;
                    }

                    if (!ok)
                    {
                        var response1 = new
                        {
                            status = "error",
                            data   = string.Join(",", result.Errors.Select(e => e.Description))
                        };

                        return(Json(response1));
                    }
                }

                var response = new
                {
                    status = "success",
                    data   = ""
                };

                return(Json(response));
            }
            else
            {
                var response1 = new
                {
                    status = "error",
                    data   = "Got no file!"
                };

                return(Json(response1));
            }
        }