summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2021-03-05 21:14:35 +0300
committerAndrew Dolgov <[email protected]>2021-03-05 21:14:35 +0300
commit2b8b845abe7c13ecbb266613910484310cffe8e1 (patch)
tree90bd2e93737c2aad17cfb09496cc57cf3f9968cd /include
parentb2341679d53b227fc90fba34c3a7e6453e3cad6e (diff)
* use ORM for trivial queries
* environment-based configuration * useradm.php -> update.php with new options * support for schema migrations * various fixes
Diffstat (limited to 'include')
-rw-r--r--include/autoload.php16
-rw-r--r--include/common.php34
-rw-r--r--include/sessions.php48
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();
+ }
+?>