aboutsummaryrefslogtreecommitdiff
path: root/src/team
diff options
context:
space:
mode:
authorcassio <cassiopc@gmail.com>2015-08-08 21:11:58 +0000
committercassio <cassiopc@gmail.com>2015-08-08 21:11:58 +0000
commite80e0bbdb0b44f95caf6ee69456a05f1c4da65c3 (patch)
tree738656b816d38532b026af2cc66256517ebb415f /src/team
parente911c708e2e5d087480564fcfcccd269bc93db58 (diff)
downloadboca-e80e0bbdb0b44f95caf6ee69456a05f1c4da65c3.tar.gz
boca-e80e0bbdb0b44f95caf6ee69456a05f1c4da65c3.zip
updates to allow submissions by command-line
Diffstat (limited to 'src/team')
-rw-r--r--src/team/run.php78
1 files changed, 72 insertions, 6 deletions
diff --git a/src/team/run.php b/src/team/run.php
index 467ce56..d11447b 100644
--- a/src/team/run.php
+++ b/src/team/run.php
@@ -15,15 +15,21 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
////////////////////////////////////////////////////////////////////////////////
-// Last modified 28/oct/2013 by cassio@ime.usp.br
+// Last modified 08/aug/2015 by cassio@ime.usp.br
require('header.php');
+$ds = DIRECTORY_SEPARATOR;
+if($ds=="") $ds = "/";
if (isset($_FILES["sourcefile"]) && isset($_POST["problem"]) && isset($_POST["Submit"]) && isset($_POST["language"]) &&
is_numeric($_POST["problem"]) && is_numeric($_POST["language"]) && $_FILES["sourcefile"]["name"]!="") {
if ($_POST["confirmation"] == "confirm") {
- if(($ct = DBContestInfo($_SESSION["usertable"]["contestnumber"])) == null)
+ if(($ct = DBContestInfo($_SESSION["usertable"]["contestnumber"])) == null) {
+ if(isset($_POST['pastcode']) && $_POST['pastcode'] != '') {
+ echo "RESULT: CONTEST NOT FOUND";
+ exit;
+ }
ForceLoad("../index.php");
-
+ }
$prob = myhtmlspecialchars($_POST["problem"]);
$lang = myhtmlspecialchars($_POST["language"]);
@@ -35,14 +41,26 @@ if (isset($_FILES["sourcefile"]) && isset($_POST["problem"]) && isset($_POST["Su
if ($size > $ct["contestmaxfilesize"]) {
LOGLevel("User {$_SESSION["usertable"]["username"]} tried to submit file " .
"$name with $size bytes ({$ct["contestmaxfilesize"]} max allowed).", 1);
+ if(isset($_POST['pastcode']) && $_POST['pastcode'] != '') {
+ echo "RESULT: FILE TOO LARGE";
+ exit;
+ }
MSGError("File size exceeds the limit allowed.");
ForceLoad($runteam);
}
if(strpos($name,' ') === true || strpos($temp,' ') === true) {
+ if(isset($_POST['pastcode']) && $_POST['pastcode'] != '') {
+ echo "RESULT: FILE NAME CANNOT HAVE SPACES";
+ exit;
+ }
MSGError("File name cannot contain spaces.");
ForceLoad($runteam);
}
if (!is_uploaded_file($temp) || strlen($name)>100) {
+ if(isset($_POST['pastcode']) && $_POST['pastcode'] != '') {
+ echo "RESULT: FILE UPLOAD PROBLEM";
+ exit;
+ }
IntrusionNotify("file upload problem.");
ForceLoad("../index.php");
}
@@ -59,15 +77,45 @@ if (isset($_FILES["sourcefile"]) && isset($_POST["problem"]) && isset($_POST["Su
'lang'=>$lang,
'filename'=>$name,
'filepath'=>$temp);
+
+ if(isset($_POST['pastcode']) && $_POST['pastcode'] != '') {
+ $pastcode = myhtmlspecialchars($_POST["pastcode"]);
+ if(isset($_POST["pasthash"]) && isset($_POST["pastval"])) {
+ $pasthash = myhtmlspecialchars($_POST["pasthash"]);
+ $pastval = myhtmlspecialchars($_POST["pastval"]);
+ $pastsubmission = myhash(@file_get_contents($_SESSION["locr"] . $ds . "private" . $ds . 'run-past.config') . $pastcode);
+ if($pastsubmission != $pasthash) {
+ echo "\nRESULT: INVALID SUBMISSION CODE";
+ exit;
+ }
+ } else {
+ $pastval = 0;
+ }
+ $verify = $pastcode . '-' .$_SESSION["usertable"]["contestnumber"].'-'.$_SESSION["usertable"]["usersitenumber"].'-'.$_SESSION["usertable"]["usernumber"];
+ $fcname = $_SESSION["locr"] . $ds . "private" . $ds . 'laterun-submitted-' . $_SESSION["usertable"]["contestnumber"].'-'.
+ $_SESSION["usertable"]["usersitenumber"].'-'.$_SESSION["usertable"]["usernumber"].'.txt';
+ $codes = @file($fcname);
+ if(in_array($verify,$codes)) {
+ echo "\nRESULT: RUN ALREADY SUBMITTED";
+ } else {
+ if($pastval > 0) {
+ $param['rundate']=time() - $pastval;
+ $b = DBSiteInfo($contest, $site, $c);
+ $dif = $b["currenttime"];
+ $param['rundatediff']=$dif - $pastval;
+ }
+ if(DBNewRun ($param) == 2)
+ @file_put_contents($fcname, $verify . '\n', FILE_APPEND | LOCK_EX);
+ echo "\nRESULT: RUN SUBMITTED SUCCESSFULLY";
+ }
+ exit;
+ }
DBNewRun ($param);
$_SESSION['forceredo']=true;
}
ForceLoad($runteam);
}
-$ds = DIRECTORY_SEPARATOR;
-if($ds=="") $ds = "/";
-
$runtmp = $_SESSION["locr"] . $ds . "private" . $ds . "runtmp" . $ds . "run-contest" . $_SESSION["usertable"]["contestnumber"] .
"-site". $_SESSION["usertable"]["usersitenumber"] . "-user" . $_SESSION["usertable"]["usernumber"] . ".php";
$redo = TRUE;
@@ -126,6 +174,23 @@ if($redo) {
$strtmp .= "</table>";
if (count($run) == 0) $strtmp .= "<br><center><b><font color=\"#ff0000\">NO RUNS AVAILABLE</font></b></center>";
+$linesubmission = @file_get_contents($_SESSION["locr"] . $ds . "private" . $ds . 'run-using-command.config');
+if(trim($linesubmission) == '1') {
+$strtmp .= "<br><br><center><b>To submit a program, use the command-line tool:</b>\n<br><br>".
+ "<pre>boca-send-run USER PASSWORD PROBLEM LANGUAGE FILE</pre><br><br>".
+ "where <pre>USER</pre> is your username, <pre>PASSWORD</pre> is your password, <pre>FILE</pre> is your submission file,<br>".
+ "<pre>PROBLEM</pre> is one of { <pre>";
+
+$prob = DBGetProblems($_SESSION["usertable"]["contestnumber"],$_SESSION["usertable"]["usertype"]=='judge');
+for ($i=0;$i<count($prob);$i++)
+ $strtmp .= $prob[$i]["problem"] . " ";
+$strtmp .= "</pre>} and<br><pre>LANGUAGE</pre> is one of { <pre>"
+$lang = DBGetLanguages($_SESSION["usertable"]["contestnumber"]);
+for ($i=0;$i<count($lang);$i++)
+ $strtmp .= $lang[$i]["name"] . " ";
+$strtmp .= "</pre>}<br><br>\n";
+} else {
+
$strtmp .= "<br><br><center><b>To submit a program, just fill in the following fields:</b></center>\n".
"<form name=\"form1\" enctype=\"multipart/form-data\" method=\"post\" action=\"". $runteam ."\">\n".
" <input type=hidden name=\"confirmation\" value=\"noconfirm\" />\n".
@@ -177,6 +242,7 @@ $strtmp .= " </select>\n".
" <input type=\"reset\" name=\"Submit2\" value=\"Clear\">\n".
" </center>\n".
"</form>\n";
+}
$conf=globalconf();
$strtmp1 = "<!-- " . time() . " --> <?php exit; ?>\t" . encryptData($strcolors,$conf["key"],false) . "\n" . encryptData($strtmp,$conf["key"],false);
$randnum = session_id() . "_" . rand();