Made the webserver a bit smarter. It handles running as root properly (only allows it if user/group specified and port < 1024) and directory listing is massively smarter.
<?php
/**
* Playlist displayer
*
* Greyhound - real web management for Amarok
* Copyright (C) 2008 Dan Fuhry
*
* This program is Free Software; you can redistribute and/or modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
*
* 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 details.
*/
function amarok_playlist($httpd, $socket)
{
global $theme, $playlist, $allowcontrol;
global $use_auth, $auth_data;
if ( $use_auth )
{
if ( !isset($_SERVER['PHP_AUTH_USER']) )
{
$httpd->header('WWW-Authenticate: basic');
$httpd->send_http_error($socket, 401, "A username and password are required to access this resource. Either you did not specify a username and password, or the supplied credentials were incorrect.");
return true;
}
if ( !isset($auth_data[$_SERVER['PHP_AUTH_USER']]) )
{
$httpd->header('WWW-Authenticate: basic');
$httpd->send_http_error($socket, 401, "A username and password are required to access this resource. Either you did not specify a username and password, or the supplied credentials were incorrect.");
return true;
}
else if ( $auth_data[$_SERVER['PHP_AUTH_USER']] !== $_SERVER['PHP_AUTH_PW'] )
{
$httpd->header('WWW-Authenticate: basic');
$httpd->send_http_error($socket, 401, "A username and password are required to access this resource. Either you did not specify a username and password, or the supplied credentials were incorrect.");
return true;
}
}
$iphone = ( ( strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone') ||
strpos($_SERVER['HTTP_USER_AGENT'], 'iPod') ||
strpos($_SERVER['HTTP_USER_AGENT'], 'BlackBerry') ||
isset($_GET['m']) )
&& !isset($_GET['f'])
);
$theme_id = ( $iphone ) ? 'iphone' : $theme;
$smarty = load_theme($theme_id);
$active = dcop_action('playlist', 'getActiveIndex');
$smarty->assign('theme', $theme_id);
$smarty->assign('playlist', $playlist);
$smarty->assign('active', $active);
$smarty->assign('scripts', array(
'ajax.js',
'domutils.js',
'volume.js',
'dom-drag.js',
'position.js'
));
$smarty->assign('allow_control', $allowcontrol);
$smarty->display('playlist.tpl');
}