feat: add attempt limit validation for submissions
This commit is contained in:
parent
bc28180777
commit
bf65115b50
|
|
@ -682,9 +682,18 @@ public function restart(Request $request)
|
|||
if ($request->submission_id == null) return response()->json([
|
||||
'message' => 'Submission ID is required',
|
||||
], 404);
|
||||
|
||||
$user = Auth::user();
|
||||
$submission = Submission::where('id', $request->submission_id)->where('user_id', $user->id)->first();
|
||||
|
||||
if ($submission) {
|
||||
// Check if attempts count is 3 or more
|
||||
if ($submission->attempts >= 3) {
|
||||
return response()->json([
|
||||
'message' => 'Maximum attempts reached. Cannot restart submission.',
|
||||
], 403);
|
||||
}
|
||||
|
||||
$submission->createHistory("Submission has been restarted");
|
||||
|
||||
if ($submission->port != null) {
|
||||
|
|
@ -697,6 +706,7 @@ public function restart(Request $request)
|
|||
['rm', '-rf', $this->getTempDir($submission)],
|
||||
];
|
||||
}
|
||||
|
||||
// Delete temp directory
|
||||
foreach ($commands as $command) {
|
||||
if (!$this->is_dir_empty($this->getTempDir($submission))) {
|
||||
|
|
@ -716,6 +726,7 @@ public function restart(Request $request)
|
|||
'message' => 'Submission has been restarted successfully',
|
||||
], 200);
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'message' => 'Submission not found',
|
||||
], 404);
|
||||
|
|
@ -726,9 +737,18 @@ public function changeSourceCode($submission_id)
|
|||
{
|
||||
$user = Auth::user();
|
||||
$submission = Submission::where('id', $submission_id)->where('user_id', $user->id)->first();
|
||||
|
||||
if ($submission) {
|
||||
// Check if attempts count is 3 or more
|
||||
if ($submission->attempts >= 3) {
|
||||
return response()->json([
|
||||
'message' => 'Maximum attempts reached. Cannot change source code.',
|
||||
], 403);
|
||||
}
|
||||
|
||||
return view('nodejs.submissions.change_source_code', compact('submission'));
|
||||
}
|
||||
|
||||
return redirect()->route('submissions');
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
@section('scripts')
|
||||
<script type="text/javascript">
|
||||
function requestServer(element){
|
||||
function requestServer(element){
|
||||
let submission_id = element.attr('data-submission-id');
|
||||
let request_type = element.attr('data-request-type');
|
||||
|
||||
|
|
@ -89,21 +89,74 @@ function requestServer(element){
|
|||
window.location = "/nodejs/submissions";
|
||||
});
|
||||
},
|
||||
error: function(data) {
|
||||
error: function(xhr, status, error) {
|
||||
let errorMessage = "Something went wrong!";
|
||||
|
||||
console.log("Error status:", xhr.status);
|
||||
console.log("Error response:", xhr.responseText);
|
||||
|
||||
// Check if it's a 403 error (maximum attempts reached)
|
||||
if (xhr.status === 403) {
|
||||
try {
|
||||
let response = JSON.parse(xhr.responseText);
|
||||
errorMessage = response.message || "Maximum attempts reached. Cannot restart submission.";
|
||||
} catch (e) {
|
||||
errorMessage = "Maximum attempts reached. Cannot restart submission.";
|
||||
}
|
||||
} else if (xhr.responseJSON && xhr.responseJSON.message) {
|
||||
errorMessage = xhr.responseJSON.message;
|
||||
}
|
||||
|
||||
swal({
|
||||
title: "Error!",
|
||||
text: "Something went wrong!",
|
||||
text: errorMessage,
|
||||
icon: "error",
|
||||
button: "Ok",
|
||||
});
|
||||
console.log(data);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
break;
|
||||
case "change-source-code":
|
||||
window.location = '/nodejs/submissions/change/' + submission_id;
|
||||
// First check if attempts limit is reached via AJAX
|
||||
$.ajax({
|
||||
url: '/nodejs/submissions/change/' + submission_id,
|
||||
type: 'GET',
|
||||
headers: {
|
||||
'X-CSRF-TOKEN': '{{ csrf_token()}}'
|
||||
},
|
||||
success: function(data) {
|
||||
// If successful, redirect to the change source code page
|
||||
window.location = '/nodejs/submissions/change/' + submission_id;
|
||||
},
|
||||
error: function(xhr, status, error) {
|
||||
// Handle 403 error (maximum attempts reached)
|
||||
if (xhr.status === 403) {
|
||||
let errorMessage = "Maximum attempts reached. Cannot change source code.";
|
||||
try {
|
||||
let response = JSON.parse(xhr.responseText);
|
||||
errorMessage = response.message || errorMessage;
|
||||
} catch (e) {
|
||||
// Use default message if parsing fails
|
||||
}
|
||||
|
||||
swal({
|
||||
title: "Error!",
|
||||
text: errorMessage,
|
||||
icon: "error",
|
||||
button: "Ok",
|
||||
});
|
||||
} else {
|
||||
swal({
|
||||
title: "Error!",
|
||||
text: "Something went wrong!",
|
||||
icon: "error",
|
||||
button: "Ok",
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user