|
|
@ -1,14 +1,17 @@ |
|
|
|
<?php |
|
|
|
|
|
|
|
require __DIR__ . '/required.php'; |
|
|
|
use Medoo\Medoo; |
|
|
|
header("Content-Type: application/json"); |
|
|
|
|
|
|
|
// Oldest session allowed
|
|
|
|
$session_min_date = date("Y-m-d H:i:s", strtotime("-" . SESSION_EXPIRE_MINUTES . " minutes")); |
|
|
|
// Delete old sessions
|
|
|
|
$old_sessions = $database->select("sessions", "sid", ["timestamp[<]" => $session_min_date]); |
|
|
|
$database->delete("scrambled_answers", ["sid" => $old_sessions]); |
|
|
|
$database->delete("sessions", ["sid" => $old_sessions]); |
|
|
|
foreach ($old_sessions as $sid) { |
|
|
|
$database->delete("scrambled_answers", ["sid" => $sid]); |
|
|
|
$database->delete("sessions", ["sid" => $sid]); |
|
|
|
} |
|
|
|
|
|
|
|
switch ($VARS['action']) { |
|
|
|
case "ping": |
|
|
@ -18,9 +21,9 @@ switch ($VARS['action']) { |
|
|
|
// generate unique session ID that has an essentially zero chance of being a duplicate.
|
|
|
|
// Contains a hash of a secure random number, a hash of the user's IP, and 23 uniqid() characters.
|
|
|
|
$skey = uniqid(substr(hash("md5", mt_rand()), 3, 5) . hash("md5", getUserIP()), true); |
|
|
|
|
|
|
|
|
|
|
|
// Image problem
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// Get five random options
|
|
|
|
$answer_count = $database->count('answers'); |
|
|
|
$answers = $database->select('answers', ['aid', 'aname'], ["LIMIT" => [mt_rand(0, $answer_count - 6), 5]]); |
|
|
@ -33,15 +36,15 @@ switch ($VARS['action']) { |
|
|
|
$scrambled["real"][] = $a['aid']; |
|
|
|
$scrambled["fake"][] = substr(hash("md5", mt_rand()), 0, 20); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Text problem
|
|
|
|
//
|
|
|
|
// Get random question
|
|
|
|
$access_count = $database->count('access_questions'); |
|
|
|
$access_question = $database->select('access_questions', ['acqid', 'acqtext'], ["LIMIT" => [mt_rand(0, $access_count - 1), 1]])[0]; |
|
|
|
|
|
|
|
|
|
|
|
// Save the session data
|
|
|
|
$database->insert("sessions", ["skey" => $skey, "aid" => $correct_answer['aid'], "acqid" => $access_question['acqid'], "expired" => 0, "#timestamp" => "NOW()", "ipaddr" => getUserIP()]); |
|
|
|
$database->insert("sessions", ["skey" => $skey, "aid" => $correct_answer['aid'], "acqid" => $access_question['acqid'], "expired" => 0, "timestamp" => Medoo::raw("NOW()"), "ipaddr" => getUserIP()]); |
|
|
|
$sid = $database->id(); |
|
|
|
// Save the answer data
|
|
|
|
$scrambled_insert = []; |
|
|
@ -49,11 +52,11 @@ switch ($VARS['action']) { |
|
|
|
$scrambled_insert[] = ["sid" => $sid, "aid" => $scrambled['real'][$i], "acode" => $scrambled['fake'][$i]]; |
|
|
|
} |
|
|
|
$database->insert("scrambled_answers", $scrambled_insert); |
|
|
|
|
|
|
|
|
|
|
|
// Vary question wording a little
|
|
|
|
$questions = ["Please click on the [].", "Click the [].", "Find the []."]; |
|
|
|
shuffle($questions); |
|
|
|
|
|
|
|
|
|
|
|
$resp = [ |
|
|
|
"session" => $skey, |
|
|
|
"id_prefix" => substr(hash("md5", mt_rand()), 3, 5), |
|
|
|