200 lines
6.7 KiB
PHP
200 lines
6.7 KiB
PHP
|
<?php
|
||
|
// translator ready
|
||
|
// addnews ready
|
||
|
// mail ready
|
||
|
define("ALLOW_ANONYMOUS",true);
|
||
|
define("OVERRIDE_FORCED_NAV",true);
|
||
|
require_once("common.php");
|
||
|
require_once("lib/errorhandling.php");
|
||
|
require_once("lib/http.php");
|
||
|
|
||
|
tlschema("source");
|
||
|
|
||
|
$url=httpget('url');
|
||
|
if ($url) {
|
||
|
popup_header("Source code for %s", $url);
|
||
|
} else {
|
||
|
popup_header("Source code");
|
||
|
}
|
||
|
if (!($session['user']['loggedin'] && $session['user']['superuser'] & SU_VIEW_SOURCE) || !isset($session['user']['loggedin'])) {
|
||
|
output("Due to the behaviour of people in the past, access to the source code online has been restricted.");
|
||
|
output("You may download the entirety of the latest publically released stable version from <a href='http://www.dragonprime.net' target='_blank'>DragonPrime</a>.", true);
|
||
|
output("You may then work with that code within the restrictions of its license.");
|
||
|
output("`n`nHopefully this will help put an end to actions like the following:");
|
||
|
rawoutput("<ul><li>");
|
||
|
output("Releasing code which they do not own without permission.");
|
||
|
rawoutput("</li><li>");
|
||
|
output("Removing valid copyright information from code and replacing it.");
|
||
|
rawoutput("</li><li>");
|
||
|
output("Removing portions of the code required to be kept intact by licensing.");
|
||
|
rawoutput("</li><li>");
|
||
|
output("Claiming copyright of items which they did not create.");
|
||
|
rawoutput("</li></ul>");
|
||
|
popup_footer();
|
||
|
} else {
|
||
|
$legal_start_dirs = array(
|
||
|
"" => 1,
|
||
|
"lib/*" => 1,
|
||
|
"modules/*" => 1,
|
||
|
"modules/avatar" => 0, // No PHP files, so don't show
|
||
|
);
|
||
|
if ($url) {
|
||
|
$dirname = dirname($url);
|
||
|
foreach ($legal_start_dirs as $dirs=>$value) {
|
||
|
if (strpos($dirs,"/") === false || !$value) {
|
||
|
continue;
|
||
|
}
|
||
|
if (strpos($dirs,"/*")) {
|
||
|
$ghjkl = str_replace("/*","",$dirs);
|
||
|
$dirname = preg_replace("!".$ghjkl."/?\\w*/?!","",$dirname);
|
||
|
}else {
|
||
|
$ghjkl = str_replace("/","",$dirs);
|
||
|
$dirname = preg_replace("!".$ghjkl."/?!","",$dirname);
|
||
|
}
|
||
|
}
|
||
|
$dirname = preg_replace("/\\A\\./","",$dirname);
|
||
|
$length = strlen($dirname);
|
||
|
$url = substr($url,$length);
|
||
|
if (strpos($url,"/") === 0) {
|
||
|
$url = substr($url,1);
|
||
|
}
|
||
|
}
|
||
|
$select_dir = httpget("dir");
|
||
|
if (!$select_dir) {
|
||
|
$select_dir = "";
|
||
|
}
|
||
|
$select_dir = "./$select_dir";
|
||
|
$illegal_files = array(
|
||
|
"dbconnect.php"=>"Contains sensitive information specific to this installation.",
|
||
|
"dragon.php"=>"If you want to read the dragon script, I suggest you do so by defeating it!",
|
||
|
"output_translator.php"=>"X", // hidden
|
||
|
"pavilion.php"=>"Not released at least for now.",
|
||
|
"source.php"=>"X", //hide completely -- so that people can't see the names of the other completely hidden files.
|
||
|
"remotebackup.php"=>"X", // hide completely
|
||
|
"remotequery.php"=>"X", // hide completely
|
||
|
"lib/datatable.php"=>"X", // hide completely
|
||
|
"lib/dbremote.php"=>"X", //hide completely
|
||
|
"lib/smsnotify.php"=>"X", //hide completely
|
||
|
"modules/battlearena.php"=>"X", // not for dist
|
||
|
"modules/blog.php"=>"X", // not for dist
|
||
|
"modules/clues.php"=>"X", // hidden
|
||
|
"modules/lycanthropy.php"=>"X", // hidden
|
||
|
"modules/mutagens.php"=>"X", // hidden
|
||
|
"modules/privacy.php"=>"X", // hidden
|
||
|
"modules/store.php"=>"X", // not for dist
|
||
|
"modules/tournament.php"=>"X", // hide
|
||
|
);
|
||
|
$legal_files=array();
|
||
|
|
||
|
rawoutput("<h1>");
|
||
|
output("View Source: ");
|
||
|
output_notl("%s", htmlentities($url, ENT_COMPAT, getsetting("charset", "ISO-8859-1")));
|
||
|
rawoutput("</h1>");
|
||
|
if($url) output("<a href='#source'>Click here for the source,</a> OR`n", true);
|
||
|
output("`bOther files that you may wish to view the source of:`b");
|
||
|
rawoutput("<ul>");
|
||
|
// Gather all the legal dirs
|
||
|
$legal_dirs = array();
|
||
|
foreach ($legal_start_dirs as $dir=>$value) {
|
||
|
// If this is a dir to exclude, skip it
|
||
|
if (!$value) continue;
|
||
|
|
||
|
$sdir = $dir;
|
||
|
$base = "./$sdir";
|
||
|
|
||
|
// If this is not a 'recursive' dir, add it and continue
|
||
|
if (!strstr($base, "/*")) {
|
||
|
array_push($legal_dirs, $base);
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
// Strip of the /*
|
||
|
$base = substr($base, 0, -2);
|
||
|
array_push($legal_dirs, $base . "/");
|
||
|
$d = dir("$base");
|
||
|
while($entry = $d->read()) {
|
||
|
// Skip any . files
|
||
|
if ($entry[0] == '.') continue;
|
||
|
// skip any php files
|
||
|
if (substr($entry,strrpos($entry, '.')) == ".php") continue;
|
||
|
$ndir = $base . "/" . $entry;
|
||
|
// Okay, check if it's a directory
|
||
|
$test = preg_replace("!^\\./!", "", $ndir);
|
||
|
if (is_dir($ndir)) {
|
||
|
if ((!isset($legal_start_dirs[$test]) ||
|
||
|
$legal_start_dirs[$test] != 0) && ((strpos(strtolower($select_dir),strtolower($ndir)) !== false) || (strpos(strtolower($ndir),strtolower($select_dir)) !== false)) && $select_dir != "./") {
|
||
|
array_push($legal_dirs, $ndir . "/");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
foreach ($legal_dirs as $key) {
|
||
|
//$skey = substr($key,strlen($subdir));
|
||
|
//if ($key==dirname($_SERVER['SCRIPT_NAME'])) $skey="";
|
||
|
//$d = dir("./$skey");
|
||
|
//if (substr($key,0,2)=="//") $key = substr($key,1);
|
||
|
//if ($key=="//") $key="/";
|
||
|
// Gaurentee a sort order on source files - Hidehisa Yasuda
|
||
|
$key1 = substr($key, 2);
|
||
|
$key2 = $key1;
|
||
|
$skey = "//" . $key1;
|
||
|
if ($key != $select_dir) {
|
||
|
rawoutput("<li>Folder: <a href='source.php?dir=$key1'>".($key1==""?"/":$key1)."</a></li>\n");
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
$d = dir("$key");
|
||
|
$files = array();
|
||
|
while (false !== ($entry = $d->read())) {
|
||
|
if (substr($entry,strrpos($entry,"."))==".php"){
|
||
|
array_push($files, "$entry");
|
||
|
}
|
||
|
}
|
||
|
$d->close();
|
||
|
asort($files);
|
||
|
foreach($files as $entry) {
|
||
|
if (isset($illegal_files["$key2$entry"]) &&
|
||
|
$illegal_files["$key2$entry"]!=""){
|
||
|
if ($illegal_files["$key2$entry"]=="X"){
|
||
|
//we're hiding the file completely.
|
||
|
}else{
|
||
|
rawoutput("<li>$key1$entry");
|
||
|
$reason = translate_inline($illegal_files[$key2 . $entry]);
|
||
|
output("— This file cannot be viewed: %s", $reason, true);
|
||
|
rawoutput("</li>\n");
|
||
|
}
|
||
|
}else{
|
||
|
rawoutput("<li><a href='source.php?url=$key1$entry&dir=$key1'>$key1$entry</a> — ".date("Y-m-d H:i:s",filemtime($key."/".$entry))."</li>\n");
|
||
|
$legal_files["$key1$entry"]=true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
rawoutput("</ul>");
|
||
|
if ($url) {
|
||
|
rawoutput("<h1><a name='source'>");
|
||
|
output("Source of: %s", htmlentities($url, ENT_COMPAT, getsetting("charset", "ISO-8859-1")));
|
||
|
rawoutput("</a></h1>");
|
||
|
|
||
|
$page_name = $url;
|
||
|
if (substr($page_name,0,1)=="/") $page_name=substr($page_name,1);
|
||
|
if ($legal_files[$url]){
|
||
|
rawoutput("<table bgcolor=#cccccc>");
|
||
|
rawoutput("<tr><td>");
|
||
|
rawoutput("<font size=-1>");
|
||
|
ob_start();
|
||
|
show_source($page_name);
|
||
|
$t = ob_get_contents();
|
||
|
ob_end_clean();
|
||
|
rawoutput($t);
|
||
|
rawoutput("</font>", true);
|
||
|
rawoutput("</td></tr></table>", true);
|
||
|
}else if ($illegal_files[$url]!="" && $illegal_files[$url]!="X"){
|
||
|
$reason = translate_inline($illegal_files[$url]);
|
||
|
output("`nCannot view this file: %s`n", $reason);
|
||
|
}else {
|
||
|
output("`nCannot view this file.`n");
|
||
|
}
|
||
|
}
|
||
|
popup_footer();
|
||
|
}
|
||
|
?>
|