lychee/php/modules/Session.php

146 lines
3.0 KiB
PHP
Raw Normal View History

2014-04-04 19:10:32 +00:00
<?php
###
2014-10-21 11:45:11 +00:00
# @name Session Module
2015-02-01 21:08:37 +00:00
# @copyright 2015 by Tobias Reich
2014-04-04 19:10:32 +00:00
###
if (!defined('LYCHEE')) exit('Error: Direct access is not allowed!');
2014-04-04 19:27:10 +00:00
class Session extends Module {
2014-04-04 19:10:32 +00:00
2014-04-04 19:27:10 +00:00
private $settings = null;
2014-04-04 19:10:32 +00:00
public function __construct($plugins, $settings) {
# Init vars
$this->plugins = $plugins;
$this->settings = $settings;
return true;
}
public function init($database, $dbName, $public, $version) {
2014-04-04 19:10:32 +00:00
# Check dependencies
2014-06-25 12:50:49 +00:00
self::dependencies(isset($this->settings, $public, $version));
2014-04-04 19:10:32 +00:00
2014-04-04 19:12:49 +00:00
# Call plugins
$this->plugins(__METHOD__, 0, func_get_args());
2014-04-04 19:10:32 +00:00
# Update
2014-05-30 14:55:56 +00:00
if (!isset($this->settings['version'])||$this->settings['version']!==$version) {
if (!Database::update($database, $dbName, @$this->settings['version'])) {
Log::error($database, __METHOD__, __LINE__, 'Updating the database failed');
exit('Error: Updating the database failed!');
}
}
2014-04-04 19:10:32 +00:00
# Return settings
$return['config'] = $this->settings;
unset($return['config']['password']);
# Path to Lychee for the server-import dialog
$return['config']['location'] = LYCHEE;
2015-01-23 20:00:27 +00:00
# Check if login credentials exist and login if they don't
if ($this->noLogin()===true) {
$public = false;
$return['config']['login'] = false;
} else {
$return['config']['login'] = true;
}
2014-04-04 19:10:32 +00:00
if ($public===false) {
# Logged in
$return['loggedIn'] = true;
} else {
# Unset unused vars
unset($return['config']['username']);
unset($return['config']['thumbQuality']);
unset($return['config']['sorting']);
unset($return['config']['dropboxKey']);
unset($return['config']['login']);
unset($return['config']['location']);
unset($return['config']['plugins']);
2014-04-04 19:10:32 +00:00
# Logged out
$return['loggedIn'] = false;
}
2014-04-04 19:12:49 +00:00
# Call plugins
$this->plugins(__METHOD__, 1, func_get_args());
2014-04-04 19:10:32 +00:00
return $return;
}
public function login($username, $password) {
# Check dependencies
2014-06-25 12:50:49 +00:00
self::dependencies(isset($this->settings, $username, $password));
2014-04-04 19:10:32 +00:00
2014-04-04 19:12:49 +00:00
# Call plugins
$this->plugins(__METHOD__, 0, func_get_args());
$username = crypt($username, $this->settings['username']);
$password = crypt($password, $this->settings['password']);
2014-04-04 19:10:32 +00:00
# Check login with crypted hash
if ($this->settings['username']===$username&&
$this->settings['password']===$password) {
$_SESSION['login'] = true;
return true;
}
2014-04-04 19:10:32 +00:00
# No login
if ($this->noLogin()===true) {
2014-04-04 19:10:32 +00:00
$_SESSION['login'] = true;
return true;
}
2014-04-04 19:12:49 +00:00
# Call plugins
$this->plugins(__METHOD__, 1, func_get_args());
2014-04-04 19:10:32 +00:00
return false;
}
2015-01-23 20:00:27 +00:00
private function noLogin() {
# Check dependencies
self::dependencies(isset($this->settings));
# Check if login credentials exist and login if they don't
if ($this->settings['username']===''&&
$this->settings['password']==='') {
$_SESSION['login'] = true;
return true;
2015-01-23 20:00:27 +00:00
}
return false;
}
2014-04-04 19:10:32 +00:00
public function logout() {
2014-04-04 19:12:49 +00:00
# Call plugins
$this->plugins(__METHOD__, 0, func_get_args());
2014-04-04 19:10:32 +00:00
session_destroy();
2014-04-04 19:12:49 +00:00
# Call plugins
$this->plugins(__METHOD__, 1, func_get_args());
2014-04-04 19:10:32 +00:00
return true;
}
}
?>