<?php session_start(); if (!isset($_SESSION['authenticated'])) { header("Location: /"); } $cookie_key = 'Ab9pb7J66VniFdyg+ffBIBHWqSHM'; $cookie_name = 'Applicants'; $cookie_exp = time() + (86400 * 30); $cookie_loc = '/'; $al = isset($_COOKIE[$cookie_name]) ? deserialize_queue($_COOKIE[$cookie_name]) : new ApplicantQueue(); switch($_GET['action']) { case 'add': if (!isset($_POST['applicant-name'])) { badRequestAndDie(); } $applicant = htmlspecialchars(strip_tags($_POST['applicant-name'])); $al->addApplicant($applicant); setcookie($cookie_name, serialize_queue($al), $cookie_exp, $cookie_loc); break; case 'remove': if (isset($_POST['applicant-name'])) { $applicant = htmlspecialchars(strip_tags($_POST['applicant-name'])); $al->removeApplicantByName($applicant); } else if (isset($_POST['applicant-index'])) { $al->removeApplicantByIndex($_POST['applicant-index']); } else { badRequestAndDie(); } setcookie($cookie_name, serialize_queue($al), $cookie_exp, $cookie_loc); break; default: } echo $al->getApplicants(); /****************************************** ***************** Functions *************** ******************************************/ function get_iv($secret) { return substr(hash('sha256', $secret), 0, 16); } function serialize_queue($queue) { return base64_encode(openssl_encrypt(serialize($queue), 'AES-256-CBC', $cookie_key, 0, get_iv($cookie_name))); } function deserialize_queue($queue) { return unserialize(openssl_decrypt(base64_decode($queue), 'AES-256-CBC', $cookie_key, 0, get_iv($cookie_name))); } function badRequestAndDie() { header($_SERVER["SERVER_PROTOCOL"]." 400 Bad Request"); echo "<h2><b>400 - Bad Request</b></h2>"; die(); } function isApplicantEmpty($applicant) { if (strlen(trim($applicant)) > 0) { return true; } else { return false; } } /***************************************** ********* ApplicantQueue Class *********** *****************************************/ class ApplicantQueue { public $applicants = []; private $filter = 'isApplicantEmpty'; function addApplicant($applicant) { if (strlen(trim($applicant)) > 0) { array_push($this->applicants, $applicant); } return $this->getApplicants; } function removeApplicantByIndex($index) { if ($index < count($this->applicants)) { array_splice($this->applicants, $index, 1); } } function removeApplicantByName($applicant) { $index = array_search($applicant, $this->applicants); if ($index) { array_splice($this->applicants, $index, 1); } return $this->getApplicants(); } function getApplicants() { return json_encode( array_filter($this->applicants, $this->filter) ); } } ?>