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" })); } }
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() })); } }