diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/autoload.php | 16 | ||||
-rw-r--r-- | include/common.php | 34 | ||||
-rw-r--r-- | include/sessions.php | 48 |
3 files changed, 98 insertions, 0 deletions
diff --git a/include/autoload.php b/include/autoload.php new file mode 100644 index 0000000..de80241 --- /dev/null +++ b/include/autoload.php @@ -0,0 +1,16 @@ +<?php + spl_autoload_register(function($class) { + + $root_dir = dirname(__DIR__); // we were in include/ + + // - internal classes are loaded from classes/ and use special naming logic instead of namespaces + + $class_file = "$root_dir/classes/" . str_replace("_", "/", strtolower($class)) . ".php"; + + if (file_exists($class_file)) + include $class_file; + + }); + + // also pull composer autoloader + require_once "vendor/autoload.php"; diff --git a/include/common.php b/include/common.php new file mode 100644 index 0000000..8f57b91 --- /dev/null +++ b/include/common.php @@ -0,0 +1,34 @@ +<?php + ini_set('display_errors', "false"); + ini_set('display_startup_errors', "false"); + + // config.php is optional + if (stream_resolve_include_path("config.php")) + require_once "config.php"; + + require_once "autoload.php"; + + /** its a dummy :( */ + function T_sprintf(...$args) { + return sprintf(...$args); + } + + function sql_bool_to_bool($s) { + return $s && ($s !== "f" && $s !== "false"); //no-op for PDO, backwards compat for legacy layer + } + + function bool_to_sql_bool($s) { + return $s ? 1 : 0; + } + + function read_stdin() { + $fp = fopen("php://stdin", "r"); + + if ($fp) { + $line = trim(fgets($fp)); + fclose($fp); + return $line; + } + + return null; + } diff --git a/include/sessions.php b/include/sessions.php new file mode 100644 index 0000000..b39a983 --- /dev/null +++ b/include/sessions.php @@ -0,0 +1,48 @@ +<?php + require_once "common.php"; + + if (Config::is_server_https()) + ini_set("session.cookie_secure", "true"); + + ini_set("session.name", "epube_sid"); + ini_set("session.use_only_cookies", "true"); + ini_set("session.gc_maxlifetime", Config::get(Config::SESSION_LIFETIME)); + ini_set("session.cookie_lifetime", Config::get(Config::SESSION_LIFETIME)); + session_set_cookie_params(Config::get(Config::SESSION_LIFETIME)); + + session_save_path(dirname(__DIR__) . "/sessions"); + + function validate_session() { + if (!empty($_SESSION["owner"])) { + + $user = ORM::for_table('epube_users') + ->where('user', $_SESSION['owner']) + ->find_one(); + + if ($user && sha1($user->pass) == $_SESSION['pass_hash']) { + return true; + } + } + + return false; + } + + function logout_user() { + if (session_status() == PHP_SESSION_ACTIVE) { + session_destroy(); + + if (isset($_COOKIE[session_name()])) { + setcookie(session_name(), '', time()-42000, '/'); + } + + session_commit(); + } + } + + register_shutdown_function('session_write_close'); + + if (isset($_COOKIE[session_name()])) { + if (session_status() != PHP_SESSION_ACTIVE) + session_start(); + } +?> |