1
0
Fork 0
mirror of https://github.com/Yetangitu/ampache synced 2025-10-04 10:19:25 +02:00
ampache/lib/init.php
Karl Vollmer 56eb2ac7dc Fixed two PHP warnings, and some issues with how users were being constructed
in init (which makes me wonder) and started trying to figure out why libre.fm broke
2011-12-01 15:59:33 -04:00

296 lines
9.7 KiB
PHP

<?php
/* vim:set tabstop=8 softtabstop=8 shiftwidth=8 noexpandtab: */
/**
* Init Library
*
*
* LICENSE: GNU General Public License, version 2 (GPLv2)
* Copyright (c) 2001 - 2011 Ampache.org All Rights Reserved
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License v2
* as published by the Free Software Foundation
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* @package Ampache
* @copyright 2001 - 2011 Ampache.org
* @license http://opensource.org/licenses/gpl-2.0 GPLv2
* @link http://www.ampache.org/
*/
// Use output buffering, this gains us a few things and
// fixes some CSS issues
ob_start();
// Do a check for PHP5 because nothing will work without it
if (floatval(phpversion()) < 5) {
echo "ERROR: Ampache requires PHP5";
exit;
}
error_reporting(E_ERROR); // Only show fatal errors in production
$ampache_path = dirname(__FILE__);
$prefix = realpath($ampache_path . "/../");
$configfile = "$prefix/config/ampache.cfg.php";
require_once $prefix . '/lib/general.lib.php';
require_once $prefix . '/lib/class/config.class.php';
if (!function_exists('gettext')) {
require_once $prefix . '/modules/emulator/gettext.php';
}
// Define some base level config options
Config::set('prefix',$prefix);
/*
Check to see if this is http or https
*/
if ((isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' )
|| (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')
|| Config::get('force_ssl') == true) {
$http_type = "https://";
}
else {
$http_type = "http://";
}
/*
Check to make sure the config file exists. If it doesn't then go ahead and send
them over to the install script.
*/
if (!file_exists($configfile)) {
$path = preg_replace("/(.*)\/(\w+\.php)$/","\${1}", $_SERVER['PHP_SELF']);
$link = $http_type . $_SERVER['HTTP_HOST'] . $path . "/install.php";
header ("Location: $link");
exit();
}
// Use the built in PHP function, suppress errors here so we can handle it
// properly below
$results = @parse_ini_file($configfile);
if (!count($results)) {
$path = preg_replace("/(.*)\/(\w+\.php)$/","\${1}", $_SERVER['PHP_SELF']);
$link = $http_type . $_SERVER['HTTP_HOST'] . $path . "/test.php?action=config";
header ("Location: $link");
exit();
}
/** Verify a few commonly disabled PHP functions exist and re-direct to /test if not **/
if (!function_exists('hash') OR !function_exists('inet_pton') OR (strtoupper(substr(PHP_OS,0,3)) == 'WIN' AND floatval(phpversion()) < 5.3)) {
$path = preg_replace("/(.*)\/(\w+\.php)$/","\${1}", $_SERVER['PHP_SELF']);
$link = $http_type . $_SERVER['HTTP_HOST'] . $path . "/test.php";
header ("Location: $link");
exit();
}
/** This is the version.... fluf nothing more... **/
$results['version'] = '3.6-Alpha1-DEV';
$results['int_config_version'] = '11';
$results['raw_web_path'] = $results['web_path'];
$results['web_path'] = $http_type . $_SERVER['HTTP_HOST'] . $results['web_path'];
if (isset($_SERVER['HTTP_X_FORWARDED_PORT'])) {
$results['http_port'] = $_SERVER['HTTP_X_FORWARDED_PORT'];
} else {
$results['http_port'] = $_SERVER['SERVER_PORT'];
}
if (!$results['http_port']) {
$results['http_port'] = '80';
}
if (!$results['site_charset']) {
$results['site_charset'] = "UTF-8";
}
if (!$results['raw_web_path']) {
$results['raw_web_path'] = '/';
}
if (!$_SERVER['SERVER_NAME']) {
$_SERVER['SERVER_NAME'] = '';
}
if (isset($results['user_ip_cardinality']) && !$results['user_ip_cardinality']) {
$results['user_ip_cardinality'] = 42;
}
/* Variables needed for vauth class */
$results['cookie_path'] = $results['raw_web_path'];
$results['cookie_domain'] = $_SERVER['SERVER_NAME'];
$results['cookie_life'] = $results['session_cookielife'];
$results['cookie_secure'] = $results['session_cookiesecure'];
$results['mysql_password'] = $results['database_password'];
$results['mysql_username'] = $results['database_username'];
$results['mysql_hostname'] = $results['database_hostname'];
$results['mysql_db'] = $results['database_name'];
// Define that we've loaded the INIT file
define('INIT_LOADED','1');
// Library and module includes we can't do with the autoloader
require_once $prefix . '/lib/preferences.php';
require_once $prefix . '/lib/log.lib.php';
require_once $prefix . '/lib/ui.lib.php';
require_once $prefix . '/lib/gettext.php';
require_once $prefix . '/lib/batch.lib.php';
require_once $prefix . '/lib/themes.php';
require_once $prefix . '/lib/class/localplay.abstract.php';
require_once $prefix . '/lib/class/database_object.abstract.php';
require_once $prefix . '/lib/class/playlist_object.abstract.php';
require_once $prefix . '/lib/class/media.interface.php';
require_once $prefix . '/modules/getid3/getid3.php';
require_once $prefix . '/modules/nusoap/nusoap.php';
require_once $prefix . '/modules/phpmailer/class.phpmailer.php';
require_once $prefix . '/modules/phpmailer/class.smtp.php';
require_once $prefix . '/modules/infotools/Snoopy.class.php';
require_once $prefix . '/modules/infotools/AmazonSearchEngine.class.php';
require_once $prefix . '/modules/infotools/lastfm.class.php';
//require_once $prefix . '/modules/infotools/jamendoSearch.class.php';
require_once $prefix . '/modules/php_musicbrainz/mbQuery.php';
require_once $prefix . '/modules/ampacheapi/AmpacheApi.lib.php';
/* Temp Fixes */
$results = Preference::fix_preferences($results);
Config::set_by_array($results,1);
// Modules (These are conditionally included depending upon config values)
if (Config::get('ratings')) {
require_once $prefix . '/lib/rating.lib.php';
}
/* Set a new Error Handler */
$old_error_handler = set_error_handler('ampache_error_handler');
/* Check their PHP Vars to make sure we're cool here */
$post_size = @ini_get('post_max_size');
if (substr($post_size,strlen($post_size)-1,strlen($post_size)) != 'M') {
/* Sane value time */
ini_set('post_max_size','8M');
}
// In case the local setting is 0
ini_set('session.gc_probability','5');
if (! isset($results['memory_limit']) || $results['memory_limit'] < 24) {
$results['memory_limit'] = 24;
}
set_memory_limit($results['memory_limit']);
/**** END Set PHP Vars ****/
// If we want a session
if (!defined('NO_SESSION') && Config::get('use_auth')) {
/* Verify their session */
if (!vauth::session_exists('interface',$_COOKIE[Config::get('session_name')])) { vauth::logout($_COOKIE[Config::get('session_name')]); exit; }
// This actually is starting the session
vauth::check_session();
/* Create the new user */
$GLOBALS['user'] = new User($_SESSION['userdata']['uid']);
/* If the user ID doesn't exist deny them */
if (!$GLOBALS['user']->id AND !Config::get('demo_mode')) { vauth::logout(session_id()); exit; }
vauth::session_extend(session_id());
/* Load preferences and theme */
$GLOBALS['user']->update_last_seen();
}
elseif (!Config::get('use_auth')) {
$auth['success'] = 1;
$auth['username'] = '-1';
$auth['fullname'] = "Ampache User";
$auth['id'] = -1;
$auth['offset_limit'] = 50;
$auth['access'] = Config::get('default_auth_level') ? User::access_name_to_level(Config::get('default_auth_level')) : '100';
if (!vauth::session_exists('interface',$_COOKIE[Config::get('session_name')])) {
vauth::create_cookie();
vauth::session_create($auth);
vauth::check_session();
$GLOBALS['user'] = new User($auth['username']);
$GLOBALS['user']->username = $auth['username'];
$GLOBALS['user']->fullname = $auth['fullname'];
$GLOBALS['user']->access = $auth['access'];
}
else {
vauth::check_session();
if ($_SESSION['userdata']['username']) {
$GLOBALS['user'] = User::get_from_username($_SESSION['userdata']['username']);
}
else {
$GLOBALS['user'] = new User($auth['username']);
$GLOBALS['user']->id = '-1';
$GLOBALS['user']->username = $auth['username'];
$GLOBALS['user']->fullname = $auth['fullname'];
$GLOBALS['user']->access = $auth['access'];
}
if (!$GLOBALS['user']->id AND !Config::get('demo_mode')) { vauth::logout(session_id()); exit; }
$GLOBALS['user']->update_last_seen();
}
}
// If Auth, but no session is set
else {
if (isset($_REQUEST['sid'])) {
session_name(Config::get('session_name'));
session_id(scrub_in($_REQUEST['sid']));
session_start();
$GLOBALS['user'] = new User($_SESSION['userdata']['uid']);
}
else {
$GLOBALS['user'] = new User();
}
} // If NO_SESSION passed
// Load the Preferences from the database
Preference::init();
// We need to create the tmp playlist for our user only if we have a session
if (session_id()) {
$GLOBALS['user']->load_playlist();
}
/* Add in some variables for ajax done here because we need the user */
Config::set('ajax_url',Config::get('web_path') . '/server/ajax.server.php',1);
// Load gettext mojo
load_gettext();
/* Set CHARSET */
header ("Content-Type: text/html; charset=" . Config::get('site_charset'));
/* Clean up a bit */
unset($array);
unset($results);
/* Set up the flip class */
flip_class(array('odd','even'));
/* Check to see if we need to perform an update */
if (!preg_match('/update\.php/', $_SERVER['PHP_SELF'])) {
if (Update::need_update()) {
header("Location: " . Config::get('web_path') . "/update.php");
exit();
}
}
// For the XMLRPC stuff
$GLOBALS['xmlrpc_internalencoding'] = Config::get('site_charset');
// If debug is on GIMMIE DA ERRORS
if (Config::get('debug')) {
error_reporting(E_ALL);
}
// Merge GET then POST into REQUEST effectively stripping COOKIE without
// depending on a PHP setting change for the effect
$_REQUEST = array_merge($_GET,$_POST);
?>