<?php /* * SCROTT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * For more information, please refer to UNLICENSE */ require_once "class/database.class.php"; require_once "class/settings.class.php"; require_once "class/user.class.php"; require_once "class/group.class.php"; require_once "class/pad.class.php"; /* * This file is the entry-point to the Scrott application. main() will * make a few assertions and figure out which content is being requested. */ function main(array $argv) : void { try { /* assert the database configuration is present */ if (!database::checkConfig()) { require "view/dbconfig.php"; return; } /* assert we are running over HTTPS (if enabled) */ if (settings::sslOnly()) require_https(); /* assert that a user is logged in */ if (!($user = user::getCurrent())) { require "view/login.php"; return; } setPageObj($user); /* no arguments? display dashboard */ if (count($argv) == 0) { setPageName("<i>Dashboard</i>"); require "view/dashboard.php"; return; } switch ($argv[0]) { case "logout": /* logout user */ user::setCurrent(); location("/"); break; case "admin": /* check permissions */ if ($user->admin == 0) location("/"); setPageName("<i>Administration</i>"); require "view/administration.php"; break; case "deleteaccount": setPageName("<i>Leaving Scrott</i>"); require "view/deleteaccount.php"; break; case "groups": setPageName("<i>Groups</i>"); require "view/groups.php"; break; case "pads": setPageName("<i>Pads</i>"); require "view/pads.php"; break; default: /* view object */ if (table::isGUID($argv[0])) { /* check permissions */ if (!$user->canAccess(new obj($argv[0]))) { /* TODO - use notice modal instead of an exception */ throw new Exception("You do not have access permission for the requested object"); } /* setup page */ switch (obj::typeOf($argv[0])) { case "group": $obj = new group($argv[0]); setPageObj($obj); setPageName($obj->name); require "view/group.php"; break; case "pad": $obj = new pad($argv[0]); setPageObj($obj); setPageName($obj->name); if (isset($argv[1]) && $argv[1] == "closed") require "view/pad_closed.php"; else require "view/pad.php"; break; } } /* page not found */ else { header("HTTP/1.1 404 Not Found"); require "view/404.php"; } } } catch (Exception $e) { require "view/except.php"; } } $tokens = explode("/", $_SERVER['PATH_INFO']); main(array_values(array_filter($tokens))); ?>