Exemplo n.º 1
0
    private async Task <bool> CheckInputAsync(int exerciseId, object input)
    {
        // Don't allow the user to cancel this too early, but also ensure that the application doesn't block too long
        var cts = new CancellationTokenSource(TimeSpan.FromSeconds(30));

        // Get current user
        int userId = GetCurrentUser().UserId;

        // Check input
        bool correct = await _stateService.CheckInputAsync(exerciseId, userId, input, cts.Token);

        // Notify CTF system
        int?exerciseNumber = _labConfiguration.CurrentConfiguration.Exercises.FirstOrDefault(e => e.Id == exerciseId)?.CtfExerciseNumber;

        if (exerciseNumber != null)
        {
            await _ctfApiClient.CreateExerciseSubmissionAsync(new Ctf4e.Api.Models.ApiExerciseSubmission
            {
                ExerciseNumber = exerciseNumber.Value,
                UserId         = userId,
                ExercisePassed = correct,
                Weight         = 1,
                SubmissionTime = DateTime.Now
            }, cts.Token);
        }

        return(correct);
    }