コード例 #1
0
    public async Task <IActionResult> ClearExerciseSubmissionsAsync(CtfApiRequest request)
    {
        try
        {
            // Resolve lab
            var lab = await _labService.GetLabAsync(request.LabId, HttpContext.RequestAborted);

            if (lab == null)
            {
                return(BadRequest(new { error = $"Could not resolve requested lab {request.LabId}" }));
            }

            // Decode request
            var apiExerciseSubmission = request.Decode <ApiExerciseSubmission>(new CryptoService(lab.ApiCode));

            // Resolve exercise
            var exercise = await _exerciseService.FindExerciseAsync(lab.Id, apiExerciseSubmission.ExerciseNumber, HttpContext.RequestAborted);

            if (exercise == null)
            {
                return(NotFound(new { error = "Exercise not found" }));
            }

            // Check user
            if (!await _userService.UserExistsAsync(apiExerciseSubmission.UserId, HttpContext.RequestAborted))
            {
                return(NotFound(new { error = "User not found" }));
            }

            // Clear exercise submissions
            await _exerciseService.ClearExerciseSubmissionsAsync(exercise.Id, apiExerciseSubmission.UserId, HttpContext.RequestAborted);

            return(Ok());
        }
        catch (CryptographicException ex)
        {
            _logger.LogError(ex, "Clear exercise submissions of user");
            return(StatusCode(StatusCodes.Status401Unauthorized, new { error = "Could not decode the request packet" }));
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "Create exercise submissions of user");
            return(StatusCode(StatusCodes.Status500InternalServerError, new { error = "An internal error occured during processing of the request" }));
        }
    }
コード例 #2
0
ファイル: ApiController.cs プロジェクト: Licanias/ctf4e
        public async Task <IActionResult> ClearExerciseSubmissionsAsync(CtfApiRequest request)
        {
            try
            {
                // Resolve lab
                var lab = await _labService.GetLabAsync(request.LabId, HttpContext.RequestAborted);

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

                // Decode request
                var apiExerciseSubmission = request.Decode <ApiExerciseSubmission>(new CryptoService(lab.ApiCode));

                // Resolve exercise
                var exercise = await _exerciseService.FindExerciseAsync(lab.Id, apiExerciseSubmission.ExerciseNumber, HttpContext.RequestAborted);

                if (exercise == null)
                {
                    return(NotFound(new { error = "Exercise not found" }));
                }

                // Check user
                if (!await _userService.UserExistsAsync(apiExerciseSubmission.UserId, HttpContext.RequestAborted))
                {
                    return(NotFound(new { error = "User not found" }));
                }

                // Clear exercise submissions
                await _exerciseService.ClearExerciseSubmissionsAsync(exercise.Id, apiExerciseSubmission.UserId, HttpContext.RequestAborted);

                return(Ok());
            }
            catch (CryptographicException ex)
            {
                return(StatusCode(StatusCodes.Status401Unauthorized, new { error = ex.ToString() }));
            }
            catch (Exception ex)
            {
                return(StatusCode(StatusCodes.Status500InternalServerError, new { error = ex.ToString() }));
            }
        }