Fix #2
Fix #4 Allow use of symlinks for index.php, generate .htaccess accordingly
This commit is contained in:
parent
c6d94e0b4c
commit
d1dd1e5778
2 changed files with 35 additions and 31 deletions
36
index.php
36
index.php
|
@ -1322,9 +1322,9 @@ namespace PicoDAV
|
|||
|
||||
public array $users = [];
|
||||
|
||||
public function __construct()
|
||||
public function __construct(string $path)
|
||||
{
|
||||
$this->path = __DIR__ . '/';
|
||||
$this->path = $path . '/';
|
||||
}
|
||||
|
||||
public function auth(): bool
|
||||
|
@ -1860,7 +1860,10 @@ namespace {
|
|||
use PicoDAV\Storage;
|
||||
|
||||
$uri = strtok($_SERVER['REQUEST_URI'], '?');
|
||||
$root = substr(__DIR__, strlen($_SERVER['DOCUMENT_ROOT']));
|
||||
$self = $_SERVER['SCRIPT_FILENAME'];
|
||||
$self_dir = dirname($self);
|
||||
$root = substr(dirname($_SERVER['SCRIPT_FILENAME']), strlen($_SERVER['DOCUMENT_ROOT']));
|
||||
$root = '/' . ltrim($root, '/');
|
||||
|
||||
if (false !== strpos($uri, '..')) {
|
||||
http_response_code(404);
|
||||
|
@ -1869,8 +1872,8 @@ namespace {
|
|||
|
||||
$relative_uri = ltrim(substr($uri, strlen($root)), '/');
|
||||
|
||||
if (!empty($_SERVER['SERVER_SOFTWARE']) && stristr($_SERVER['SERVER_SOFTWARE'], 'apache') && !file_exists(__DIR__ . '/.htaccess')) {
|
||||
file_put_contents(__DIR__ . '/.htaccess', 'DirectoryIndex disabled
|
||||
if (!empty($_SERVER['SERVER_SOFTWARE']) && stristr($_SERVER['SERVER_SOFTWARE'], 'apache') && !file_exists($self_dir . '/.htaccess')) {
|
||||
file_put_contents($self_dir . '/.htaccess', str_replace('index.php', basename($self), 'DirectoryIndex disabled
|
||||
|
||||
RedirectMatch 404 \\.picodav\\.ini
|
||||
|
||||
|
@ -1884,7 +1887,7 @@ RewriteBase /
|
|||
#RewriteCond %{REQUEST_METHOD} !GET
|
||||
|
||||
RewriteRule ^.*$ /index.php [END]
|
||||
');
|
||||
'));
|
||||
}
|
||||
|
||||
if ($relative_uri == '.webdav/webdav.js' || $relative_uri == '.webdav/webdav.css') {
|
||||
|
@ -1906,11 +1909,11 @@ RewriteRule ^.*$ /index.php [END]
|
|||
$fp = fopen(__FILE__, 'r');
|
||||
|
||||
if ($relative_uri == '.webdav/webdav.js') {
|
||||
fseek($fp, 51058, SEEK_SET);
|
||||
fseek($fp, 51249, SEEK_SET);
|
||||
echo fread($fp, 27769);
|
||||
}
|
||||
else {
|
||||
fseek($fp, 51058 + 27769, SEEK_SET);
|
||||
fseek($fp, 51249 + 27769, SEEK_SET);
|
||||
echo fread($fp, 7004);
|
||||
}
|
||||
|
||||
|
@ -1919,8 +1922,8 @@ RewriteRule ^.*$ /index.php [END]
|
|||
exit;
|
||||
}
|
||||
|
||||
const CONFIG_FILE = __DIR__ . '/.picodav.ini';
|
||||
define('PicoDAV\INTERNAL_FILES', ['.picodav.ini', basename(__FILE__), '.webdav/webdav.js', '.webdav/webdav.css']);
|
||||
$config_file = $self_dir . '/.picodav.ini';
|
||||
define('PicoDAV\INTERNAL_FILES', ['.picodav.ini', $self_dir, '.webdav/webdav.js', '.webdav/webdav.css']);
|
||||
|
||||
const DEFAULT_CONFIG = [
|
||||
'ANONYMOUS_READ' => true,
|
||||
|
@ -1929,11 +1932,10 @@ RewriteRule ^.*$ /index.php [END]
|
|||
];
|
||||
|
||||
$config = [];
|
||||
$storage = new Storage;
|
||||
$storage = new Storage($self_dir);
|
||||
|
||||
|
||||
if (file_exists(CONFIG_FILE)) {
|
||||
$config = parse_ini_file(CONFIG_FILE, true);
|
||||
if (file_exists($config_file)) {
|
||||
$config = parse_ini_file($config_file, true);
|
||||
$users = array_filter($config, 'is_array');
|
||||
$config = array_diff_key($config, $users);
|
||||
$config = array_change_key_case($config, \CASE_UPPER);
|
||||
|
@ -1947,7 +1949,7 @@ RewriteRule ^.*$ /index.php [END]
|
|||
}
|
||||
|
||||
if (count($replace)) {
|
||||
$lines = file(CONFIG_FILE);
|
||||
$lines = file($config_file);
|
||||
$current = null;
|
||||
|
||||
foreach ($lines as &$line) {
|
||||
|
@ -1963,7 +1965,7 @@ RewriteRule ^.*$ /index.php [END]
|
|||
|
||||
unset($line, $current);
|
||||
|
||||
file_put_contents(CONFIG_FILE, implode('', $lines));
|
||||
file_put_contents($config_file, implode('', $lines));
|
||||
}
|
||||
|
||||
$storage->users = $users;
|
||||
|
@ -1982,7 +1984,7 @@ RewriteRule ^.*$ /index.php [END]
|
|||
}
|
||||
|
||||
|
||||
$dav = new Server;
|
||||
$dav = new Server();
|
||||
$dav->setStorage($storage);
|
||||
|
||||
$dav->setBaseURI($root);
|
||||
|
|
30
server.php
30
server.php
|
@ -25,9 +25,9 @@ namespace PicoDAV
|
|||
|
||||
public array $users = [];
|
||||
|
||||
public function __construct()
|
||||
public function __construct(string $path)
|
||||
{
|
||||
$this->path = __DIR__ . '/';
|
||||
$this->path = $path . '/';
|
||||
}
|
||||
|
||||
public function auth(): bool
|
||||
|
@ -563,7 +563,10 @@ namespace {
|
|||
use PicoDAV\Storage;
|
||||
|
||||
$uri = strtok($_SERVER['REQUEST_URI'], '?');
|
||||
$root = substr(__DIR__, strlen($_SERVER['DOCUMENT_ROOT']));
|
||||
$self = $_SERVER['SCRIPT_FILENAME'];
|
||||
$self_dir = dirname($self);
|
||||
$root = substr(dirname($_SERVER['SCRIPT_FILENAME']), strlen($_SERVER['DOCUMENT_ROOT']));
|
||||
$root = '/' . ltrim($root, '/');
|
||||
|
||||
if (false !== strpos($uri, '..')) {
|
||||
http_response_code(404);
|
||||
|
@ -572,8 +575,8 @@ namespace {
|
|||
|
||||
$relative_uri = ltrim(substr($uri, strlen($root)), '/');
|
||||
|
||||
if (!empty($_SERVER['SERVER_SOFTWARE']) && stristr($_SERVER['SERVER_SOFTWARE'], 'apache') && !file_exists(__DIR__ . '/.htaccess')) {
|
||||
file_put_contents(__DIR__ . '/.htaccess', /*__HTACCESS__*/);
|
||||
if (!empty($_SERVER['SERVER_SOFTWARE']) && stristr($_SERVER['SERVER_SOFTWARE'], 'apache') && !file_exists($self_dir . '/.htaccess')) {
|
||||
file_put_contents($self_dir . '/.htaccess', str_replace('index.php', basename($self), /*__HTACCESS__*/));
|
||||
}
|
||||
|
||||
if ($relative_uri == '.webdav/webdav.js' || $relative_uri == '.webdav/webdav.css') {
|
||||
|
@ -608,8 +611,8 @@ namespace {
|
|||
exit;
|
||||
}
|
||||
|
||||
const CONFIG_FILE = __DIR__ . '/.picodav.ini';
|
||||
define('PicoDAV\INTERNAL_FILES', ['.picodav.ini', basename(__FILE__), '.webdav/webdav.js', '.webdav/webdav.css']);
|
||||
$config_file = $self_dir . '/.picodav.ini';
|
||||
define('PicoDAV\INTERNAL_FILES', ['.picodav.ini', $self_dir, '.webdav/webdav.js', '.webdav/webdav.css']);
|
||||
|
||||
const DEFAULT_CONFIG = [
|
||||
'ANONYMOUS_READ' => true,
|
||||
|
@ -618,11 +621,10 @@ namespace {
|
|||
];
|
||||
|
||||
$config = [];
|
||||
$storage = new Storage;
|
||||
$storage = new Storage($self_dir);
|
||||
|
||||
|
||||
if (file_exists(CONFIG_FILE)) {
|
||||
$config = parse_ini_file(CONFIG_FILE, true);
|
||||
if (file_exists($config_file)) {
|
||||
$config = parse_ini_file($config_file, true);
|
||||
$users = array_filter($config, 'is_array');
|
||||
$config = array_diff_key($config, $users);
|
||||
$config = array_change_key_case($config, \CASE_UPPER);
|
||||
|
@ -636,7 +638,7 @@ namespace {
|
|||
}
|
||||
|
||||
if (count($replace)) {
|
||||
$lines = file(CONFIG_FILE);
|
||||
$lines = file($config_file);
|
||||
$current = null;
|
||||
|
||||
foreach ($lines as &$line) {
|
||||
|
@ -652,7 +654,7 @@ namespace {
|
|||
|
||||
unset($line, $current);
|
||||
|
||||
file_put_contents(CONFIG_FILE, implode('', $lines));
|
||||
file_put_contents($config_file, implode('', $lines));
|
||||
}
|
||||
|
||||
$storage->users = $users;
|
||||
|
@ -671,7 +673,7 @@ namespace {
|
|||
}
|
||||
|
||||
|
||||
$dav = new Server;
|
||||
$dav = new Server();
|
||||
$dav->setStorage($storage);
|
||||
|
||||
$dav->setBaseURI($root);
|
||||
|
|
Loading…
Reference in a new issue