File "connexion.php"
Full Path: /home/analogde/www/FTP/Monsta-FTP-master/connexion.php
File size: 51.15 KB
MIME-type: text/x-php
Charset: utf-8
<?php
$version = "1.8.8";
require("config.php");
ini_set('max_execution_time', $maxExecTime);
ini_set('memory_limit', $maxFileSize);
header("X-Frame-Options: SAMEORIGIN");
error_reporting(0);
saveFtpDetailsCookie();
startSession();
# SET FOLDERS
$templates_dir = "templates";
$languages_dir = "languages";
# INCLUDE LANGUAGE FILE
if ($_SESSION["lang"] == "" || isset($_POST["lang"]))
setLangFile();
include($languages_dir . "/en_us.php");
include($languages_dir . "/" . $_SESSION["lang"]);
# SET VARS
// Check for AJAX post
if ($_POST["ftpAction"] != "" || $_GET["ftpAction"] != "")
$ajaxRequest = 1;
else
$ajaxRequest = 0;
# LOAD CONTENT
// These check vars are set in the "SET VARS" section
if ($ftpAction == "download" || $ftpAction == "download_zip" || $ftpAction == "iframe_upload" || $ftpAction == "editProcess")
{
echo "<script>alert(' INIT1 ')</script>";
}
else
{
if ($ajaxRequest == 0)
{
echo "<script>alert(' INIT2 ')</script>";
checkLogOut();
displayHeader();
}
// Attempt to login with session or post vars
attemptLogin();
// Check referer
if (checkReferer() == 1)
{
// Display content when logged in
if ($_SESSION["loggedin"] == 1)
{
echo "<script>alert(' INIT3 ')</script>";
if ($ajaxRequest == 0)
{
echo "<script>alert(' INIT3 - AJAX 1 ')</script>";
displayFormStart();
}
// Display folder/file listing
displayFiles();
if ($ajaxRequest == 0)
{
echo "<script>alert(' INIT3 - AJAX 2 ')</script>";
loadJsLangVars();
displayFormEnd();
}
}
if ($ajaxRequest == 0)
{
echo "<script>alert(' INIT3 - AJAX 3 ')</script>";
// Include the footer
displayFooter();
}
}
}
// Close FTP connection
@ftp_close($conn_id);
/*************************************************************/
# FUNCTIONS
function startSession()
{
global $sessionName;
// Only change session name if session.auto_start is not 1, and session name is valid
if (!ini_get("session.auto_start") || ini_get("session.auto_start") == "0")
session_name(preg_match('/^[0-9]*[A-Za-z][A-Za-z0-9]*$/', $sessionName) ? $sessionName : "monstaftp");
@session_start();
$session_keys = array("user_ip", "loggedin",
"lang", "win_lin", "ip_check", "login_error", "login_fails", "login_lockout",
"ftp_ssl", "ftp_host", "ftp_user", "ftp_pass", "ftp_port", "ftp_pasv",
"interface", "dir_current", "dir_history", "clipboard_chmod", "clipboard_files",
"clipboard_folders", "clipboard_rename", "copy",
"errors", "upload_limit", "domain", "filesCharSet",
);
foreach($session_keys as $session_key) {
if (!isset($_SESSION[$session_key]))
$_SESSION[$session_key] = ''; // avoid a lot of "undefined index"
}
}
function saveFtpDetailsCookie()
{
if ($_POST["login"] == 1) {
if ($_POST["login_save"] == 1) {
$s = 31536000; // seconds in a year
setcookie("ftp_ssl", $_POST["ftp_ssl"], time() + $s, '/', null, null, true);
setcookie("ftp_host", trim($_POST["ftp_host"]), time() + $s, '/', null, null, true);
setcookie("ftp_user", trim($_POST["ftp_user"]), time() + $s, '/', null, null, true);
setcookie("ftp_pass", trim($_POST["ftp_pass"]), time() + $s, '/', null, null, true);
setcookie("ftp_port", trim($_POST["ftp_port"]), time() + $s, '/', null, null, true);
setcookie("ftp_pasv", $_POST["ftp_pasv"], time() + $s, '/', null, null, true);
setcookie("interface", $_POST["interface"], time() + $s, '/', null, null, true);
setcookie("login_save", $_POST["login_save"], time() + $s, '/', null, null, true);
setcookie("lang", $_POST["lang"], time() + $s, '/', null, null, true);
setcookie("ip_check", $_POST["ip_check"], time() + $s, '/', null, null, true);
} else {
setcookie("ftp_ssl", "", time() - 3600);
setcookie("ftp_host", "", time() - 3600);
setcookie("ftp_user", "", time() - 3600);
setcookie("ftp_pass", "", time() - 3600);
setcookie("ftp_port", "", time() - 3600);
setcookie("ftp_pasv", "", time() - 3600);
setcookie("interface", "", time() - 3600);
setcookie("login_save", "", time() - 3600);
setcookie("lang", "", time() - 3600);
setcookie("ip_check", "", time() - 3600);
}
}
}
function attemptLogin()
{
global $conn_id;
global $ftpHost;
global $ftpPort;
global $ftpMode;
global $ftpSSL;
global $ftpDir;
global $lang_missing_fields;
global $lang_ip_conflict;
if (connectFTP(0) == 1 && $_POST["login"] != 1)
{
// Check for hijacked session with IP check
if ($_SESSION["ip_check"] == 1)
{
if ($_SERVER['REMOTE_ADDR'] == $_SESSION["user_ip"])
{
$_SESSION["loggedin"] = 1;
}
else
{
$_SESSION["errors"] = $lang_ip_conflict;
sessionExpired($lang_ip_conflict);
logOut();
}
}
else
{
$_SESSION["loggedin"] = 1;
}
}
else
{
if ($_POST["login"] == 1)
{
// Check for login errors
if (checkLoginErrors() == 1)
{
$_SESSION["login_error"] = $lang_missing_fields;
displayLoginForm(1);
}
else
{
// Set POST vars to SESSION
if ($ftpHost == "")
{
$_SESSION["ftp_host"] = trim($_POST["ftp_host"]);
$_SESSION["ftp_port"] = trim($_POST["ftp_port"]);
$_SESSION["ftp_pasv"] = empty($_POST["ftp_pasv"])?0:1;
$_SESSION["ftp_ssl"] = empty($_POST["ftp_ssl"])?0:1;
}
else
{
$_SESSION["ftp_host"] = $ftpHost;
$_SESSION["ftp_port"] = $ftpPort;
$_SESSION["ftp_pasv"] = $ftpMode;
$_SESSION["ftp_ssl"] = $ftpSSL;
}
$_SESSION["ftp_user"] = trim($_POST["ftp_user"]);
$_SESSION["ftp_pass"] = trim($_POST["ftp_pass"]);
$_SESSION["interface"] = empty($_POST["interface"])?"":"adv";
$_SESSION["lang"] = $_POST["lang"];
$_SESSION["ip_check"] = $_POST["ip_check"];
if (connectFTP(1) == 1)
{
$_SESSION["loggedin"] = 1;
// Save user's IP address
$_SESSION["user_ip"] = $_SERVER['REMOTE_ADDR'];
// Set platform
getPlatform();
// Change dir if one set
if ($ftpDir != "")
{
if (@ftp_chdir($conn_id, $ftpDir))
{
$_SESSION["dir_current"] = $ftpDir;
} else
{
if (@ftp_chdir($conn_id, "~" . $ftpDir))
$_SESSION["dir_current"] = "~" . $ftpDir;
}
}
}
else
{
displayLoginForm(1);
}
}
}
else
{
displayLoginForm(0);
}
}
}
function displayHeader()
{
?>
<!DOCTYPE html>
<html>
<head>
<title>Monsta FTP</title>
<link href="css/style.css?<?php echo date("U"); ?>" rel="stylesheet" type="text/css">
<link href="css/colors.css?<?php echo date("U"); ?>" rel="stylesheet" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body
<?php
if ($_POST["login"] == 1)
{
?>
onresize="setFileWindowSize('ajaxContentWindow',0,0);"
<?php
}
?>>
<?php
}
function displayFooter()
{
?>
</body>
</html>
<?php
}
function displayLoginForm($posted)
{
global $ftpHost;
global $ajaxRequest;
global $lang_max_logins;
global $lang_btn_login;
global $lang_ftp_host;
global $lang_port;
global $lang_passive_mode;
global $lang_username;
global $lang_password;
global $lang_ftp_ssl;
global $lang_adv_interface;
global $lang_save_login;
global $lang_ip_check;
global $lang_session_expired;
global $showAdvOption;
global $showLockSess;
// Check for lockout
$date_now = date("YmdHis");
if ($_SESSION["login_lockout"] > 0 && $date_now < $_SESSION["login_lockout"])
{
$n = ceil(($_SESSION["login_lockout"] - $date_now) / 60);
$_SESSION["login_error"] = str_replace("[n]", $n, $lang_max_logins);
}
// Check for posted form
if ($posted == 1)
{
// Set vars
$ftp_ssl = $_POST["ftp_ssl"];
$ftp_host = trim($_POST["ftp_host"]);
$ftp_user = trim($_POST["ftp_user"]);
$ftp_pass = trim($_POST["ftp_pass"]);
$ftp_port = trim($_POST["ftp_port"]);
$ftp_pasv = $_POST["ftp_pasv"];
$interface = $_POST["interface"];
$lang = $_POST["lang"];
$login_save = $_POST["login_save"];
$ip_check = $_POST["ip_check"];
$_SESSION["domain"] = $_SERVER["SERVER_NAME"];
}
else
{
// Set values from cookies
if ($_COOKIE["login_save"] == 1)
{
$ftp_ssl = $_COOKIE["ftp_ssl"];
$ftp_host = $_COOKIE["ftp_host"];
$ftp_user = $_COOKIE["ftp_user"];
$ftp_pass = $_COOKIE["ftp_pass"];
$ftp_port = $_COOKIE["ftp_port"];
$ftp_pasv = $_COOKIE["ftp_pasv"];
$interface = $_COOKIE["interface"];
$lang = $_COOKIE["lang"];
$login_save = $_COOKIE["login_save"];
$ip_check = $_COOKIE["ip_check"];
}
else
{
$ftp_port = 21;
$ftp_pasv = 1;
}
}
if ($ajaxRequest == 1)
{
sessionExpired($lang_session_expired);
logOut();
}
else
{
// Check for errors
if ($_SESSION["login_error"] != "")
{
$height = 522;
}
else
{
$height = 458;
}
?>
<form method="post" action="?">
<div align="center">
<div id="loginForm" align="left">
<div id="loginFormTitle">Monsta FTP</div>
<div id="loginFormContent">
<?php
if ($_SESSION["login_error"] != "")
{
?>
<div id="loginFormError">
<?php echo $_SESSION["login_error"]; ?>
</div>
<?php
}
?>
<input type="hidden" name="login" value="1">
<input type="hidden" name="openFolder" value="<?php echo sanitizeStr($_GET["openFolder"]); ?>">
<?php
if ($ftpHost == "")
{
?>
<?php
echo $lang_ftp_host;
?>:
<br><input type="text" name="ftp_host" value="<?php
echo sanitizeStrTrim($ftp_host);
?>" size="30" class="<?php
if ($posted == 1 && $ftp_host == "")
echo "bgFormError";
?>">
<?php echo $lang_port; ?>: <input type="text" name="ftp_port"
value="<?php echo sanitizeStrTrim($ftp_port); ?>" size="3" class="<?php if ($posted == 1 && $ftp_port == "") echo "bgFormError"; ?>" tabindex="-1">
<p>
<?php
}
?>
<?php
echo $lang_username;
?>:
<br>
<input type="text" name="ftp_user" value="<?php echo sanitizeStrTrim($ftp_user); ?>" size="30"
class="<?php if ($posted == 1 && $ftp_user == "")
echo "bgFormError";
?>">
<p><?php
echo $lang_password;
?>:
<br><input type="password" name="ftp_pass" value="<?php
echo sanitizeStrTrim($ftp_pass);
?>" size="30" class="<?php
if ($posted == 1 && $ftp_pass == "")
echo "bgFormError";
?>" autocomplete="off">
<p><input type="submit" value="<?php
echo $lang_btn_login;
?>" id="btnLogin">
<br><br>
<p><hr noshade>
<?php
if ($ftpHost == "")
{
?>
<p><input type="checkbox" name="ftp_pasv" value="1" <?php
if ($ftp_pasv == 1)
echo "checked";
?> tabindex="-1"> <?php
echo $lang_passive_mode;
?>
<?php
if (function_exists('ftp_ssl_connect'))
{
?>
<p><input type="checkbox" name="ftp_ssl" value="1" <?php
if ($ftp_ssl == 1)
echo "checked";
?> tabindex="-1"> <?php
echo $lang_ftp_ssl;
?>
<?php
}
}
?>
<?php
if ($showLockSess == 1)
{
?>
<p><input type="checkbox" name="ip_check" value="1" <?php
if ($ip_check == 1)
echo "checked";
?> tabindex="-1"> <?php
echo $lang_ip_check;
?>
<?php
}
?>
<?php
if ($showAdvOption == 1)
{
?>
<p><input type="checkbox" name="interface" value="adv" <?php
if ($interface == "adv" || $interface == "")
echo "checked";
?> tabindex="-1"> <?php
echo $lang_adv_interface;
?>
<?php
} else {
?>
<input type="hidden" name="interface" value="">
<?php
}
?>
<p><input type="checkbox" name="login_save" value="1" <?php
if ($login_save == 1)
echo "checked";
?> tabindex="-1"> <?php
echo $lang_save_login;
?>
<p><hr noshade>
<?php
echo displayLangSelect($_SESSION["lang"]);
?>
</div>
</div>
</div>
</form>
<?php
// Reset error
$_SESSION["login_error"] = "";
}
}
function checkLoginErrors()
{
global $ftpHost;
// Check for blank fields
if ($ftpHost == "")
{
if ($_POST["ftp_host"] == "" || trim($_POST["ftp_user"]) == "" || trim($_POST["ftp_pass"]) == "" || trim($_POST["ftp_port"]) == "")
return 1;
else
return 0;
}
if ($ftpHost != "")
{
if (trim($_POST["ftp_user"]) == "" || trim($_POST["ftp_pass"]) == "")
return 1;
else
return 0;
}
}
function connectFTP($posted)
{
global $conn_id;
global $lockOutTime;
global $lang_cant_connect;
global $lang_cant_authenticate;
if ($_SESSION["ftp_host"] != "" && $_SESSION["ftp_port"] != "" && $_SESSION["ftp_user"] != "" && $_SESSION["ftp_pass"] != "")
{
// Connect
if ($_SESSION["ftp_ssl"] == 1)
$conn_id = @ftp_ssl_connect($_SESSION["ftp_host"], $_SESSION["ftp_port"]) or $connectFail = 1;
else
$conn_id = @ftp_connect($_SESSION["ftp_host"], $_SESSION["ftp_port"]) or $connectFail = 1;
if ($connectFail == 1)
{
$_SESSION["login_error"] = $lang_cant_connect;
return 0;
}
else
{
// Check for lockout
$date_now = date("YmdHis");
if ($_SESSION["login_lockout"] == "" || ($_SESSION["login_lockout"] > 0 && $date_now > $_SESSION["login_lockout"]))
{
// Authenticate
if (@ftp_login($conn_id, $_SESSION["ftp_user"], $_SESSION["ftp_pass"]))
{
if ($_SESSION["ftp_pasv"] == 1)
@ftp_pasv($conn_id, true);
$_SESSION["loggedin"] = 1;
$_SESSION["login_fails"] = 0;
return 1;
}
else
{
$_SESSION["login_error"] = $lang_cant_authenticate;
// Count the failed login attempts (if form posted)
if ($posted == 1)
{
$_SESSION["login_fails"]++;
// Lock user for 5 minutes if 3 failed attempts
if ($_SESSION["login_fails"] >= 3)
$_SESSION["login_lockout"] = date("YmdHis") + ($lockOutTime * 60);
}
return 0;
}
}
}
}
else
{
return 0;
}
}
function displayFormStart()
{
?>
<form method="post" action="?" enctype="multipart/form-data" name="ftpActionForm" id="ftpActionForm">
<?php
}
function displayFormEnd()
{
?>
</form>
<?php
}
function displayFiles()
{
echo "Zoulou";
?>
<div class="floatRight">
<input type="button" value="<?php echo "Logout"; ?>" onClick="actionFunctionLogout();"
class="<?php echo adjustButtonWidth("Exit..."); ?> ">
</div>
<?php
f_display();
}
function adjustButtonWidth($str)
{
if (strlen(utf8_decode($str)) > 12)
return "inputButtonNf";
else
return "inputButton";
}
function getPlatform()
{
global $conn_id;
if ($_SESSION["win_lin"] == "")
{
$type = ftp_systype($conn_id);
if (preg_match("/unix/i", $type, $matches))
$win_lin = "lin";
if (preg_match("/windows/i", $type, $matches))
$win_lin = "win";
$_SESSION["win_lin"] = $win_lin;
}
}
function openFolder()
{
}
function checkLogOut()
{
if ($_GET["logout"] == 1)
logOut();
}
function logOut()
{
$_SESSION["user_ip"] = "";
$_SESSION["loggedin"] = "";
$_SESSION["win_lin"] = "";
$_SESSION["login_error"] = "";
$_SESSION["login_fails"] = "";
$_SESSION["login_lockout"] = "";
$_SESSION["ftp_host"] = "";
$_SESSION["ftp_user"] = "";
$_SESSION["ftp_pass"] = "";
$_SESSION["ftp_port"] = "";
$_SESSION["ftp_pasv"] = "";
$_SESSION["interface"] = "";
$_SESSION["dir_current"] = "";
$_SESSION["dir_history"] = "";
$_SESSION["clipboard_chmod"] = "";
$_SESSION["clipboard_files"] = "";
$_SESSION["clipboard_folders"] = "";
$_SESSION["clipboard_rename"] = "";
$_SESSION["copy"] = "";
$_SESSION["errors"] = "";
$_SESSION["upload_limit"] = "";
session_destroy();
}
function downloadFile()
{
}
function quotesEscape($str, $type)
{
}
function displayPopupOpen($resize, $width, $height, $isError, $title)
{
// Set default sizes of exceeded
if ($resize == 1) {
if ($width < 400)
$width = 400;
if ($height > 400)
$height = 400;
}
$windowWidth = $_POST["windowWidth"];
$windowHeight = $_POST["windowHeight"];
// Center window
if ($windowWidth > 0)
$left = round(($windowWidth - $width) / 2 - 15); // -15 for H padding
else
$left = 250;
if ($windowHeight > 0)
$top = round(($_POST["windowHeight"] - $height) / 2 - 50);
else
$top = 250;
echo "<div id=\"blackOutDiv\">";
echo "<div id=\"popupFrame\" style=\"left: " . $left . "px; top: " . $top . "px; width: " . $width . "px;\">";
if ($isError == 1)
$divId = "popupHeaderError";
else
$divId = "popupHeaderAction";
echo "<div id=\"" . $divId . "\">";
echo $title;
echo "</div>";
if ($isError == 1)
$divId = "popupBodyError";
else
$divId = "popupBodyAction";
echo "<div id=\"" . $divId . "\" style=\"height: " . $height . "px;\">";
}
function displayPopupClose($isError, $vars, $btnCancel)
{
global $lang_btn_ok;
global $lang_btn_cancel;
echo "</div>";
if ($isError == 1)
$divId = "popupFooterError";
else
$divId = "popupFooterAction";
echo "<div id=\"" . $divId . "\">";
// OK button
if ($vars != "")
echo "<input type=\"button\" class=\"popUpBtn\" value=\"" . $lang_btn_ok . "\" onClick=\"processForm('" . $vars . "'); activateActionButtons(0,0);\"> ";
// Cancel button
if ($btnCancel == 1)
echo "<input type=\"button\" class=\"popUpBtn\" value=\"" . $lang_btn_cancel . "\" onClick=\"ajaxAbort(); processForm('&ftpAction=openFolder');\"> ";
echo "</div>";
echo "</div>";
echo "</div>";
}
function displayLangSelect($lang)
{
global $lang_language;
global $languages_dir;
$dir = "languages";
$lang_found = 0;
if (is_dir($languages_dir))
{
if ($dh = opendir($languages_dir))
{
$i = 0;
while (($file = readdir($dh)) !== false)
{
if (substr($file,-1) != "." && pathinfo($file, PATHINFO_EXTENSION) == "php")
{
$i++;
$file_name = $file;
// Open file to get language name
include($languages_dir . "/" . $file_name);
$lang_found = 1;
// Strip extension
//$file_name = preg_replace("/\..*$/", "", $file_name);
$langs = "<option value=\"" . $file_name . "\"";
if ($file_name == $lang)
$langs .= " selected";
$langs .= ">";
$langs .= $file_lang_name;
$langs .= "</option>";
$langsAr[] = $langs;
// Restore session language file
include($languages_dir . "/" . $lang);
}
}
closedir($dh);
if ($lang_found == 0)
{
echo "Language: <strong>languages</strong> folder empty!";
}
else
{
if ($i > 1)
{
sort($langsAr);
echo $lang_language . ": ";
echo "<select name=\"lang\" tabindex=\"-1\">";
foreach ($langsAr AS $lang) {
echo $lang;
}
echo "</select>";
} else {
echo "<input type=\"hidden\" name=\"lang\" value=\"" . $file_name . "\">";
}
}
}
else
{
echo "Language: <strong>languages</strong> folder locked!";
}
}
else
{
echo "Language: <strong>languages</strong> folder missing!";
}
}
function loadJsLangVars()
{
global $languages_dir;
// Include language file again to save listing globals
//$langFileArray = getFileArray("languages");
include($languages_dir . "/en_us.php");
//if (in_array($_SESSION["lang"], $langFileArray))
include($languages_dir . "/" . $_SESSION["lang"]);
?>
<script type="text/javascript">
var lang_no_xmlhttp = '<?php
echo quotesEscape($lang_no_xmlhttp, "s");
?>';
var lang_support_drop = '<?php
echo quotesEscape($lang_support_drop, "s");
?>';
var lang_no_support_drop = '<?php
echo quotesEscape($lang_no_support_drop, "s");
?>';
var lang_transfer_pending = '<?php
echo quotesEscape($lang_transfer_pending, "s");
?>';
var lang_transferring_to_ftp = '<?php
echo quotesEscape($lang_transferring_to_ftp, "s");
?>';
var lang_no_file_selected = '<?php
echo quotesEscape($lang_no_file_selected, "s");
?>';
var lang_none_selected = '<?php
echo quotesEscape($lang_none_selected, "s");
?>';
var lang_context_open = '<?php
echo quotesEscape($lang_context_open, "s");
?>';
var lang_context_download = '<?php
echo quotesEscape($lang_context_download, "s");
?>';
var lang_context_edit = '<?php
echo quotesEscape($lang_context_edit, "s");
?>';
var lang_context_cut = '<?php
echo quotesEscape($lang_context_cut, "s");
?>';
var lang_context_copy = '<?php
echo quotesEscape($lang_context_copy, "s");
?>';
var lang_context_paste = '<?php
echo quotesEscape($lang_context_paste, "s");
?>';
var lang_context_rename = '<?php
echo quotesEscape($lang_context_rename, "s");
?>';
var lang_context_delete = '<?php
echo quotesEscape($lang_context_delete, "s");
?>';
var lang_context_chmod = '<?php
echo quotesEscape($lang_context_chmod, "s");
?>';
var lang_size_b = '<?php
echo quotesEscape($lang_size_b, "s");
?>';
var lang_size_kb = '<?php
echo quotesEscape($lang_size_kb, "s");
?>';
var lang_size_mb = '<?php
echo quotesEscape($lang_size_mb, "s");
?>';
var lang_size_gb = '<?php
echo quotesEscape($lang_size_gb, "s");
?>';
var lang_btn_upload_file = '<?php
echo quotesEscape($lang_btn_upload_file, "s");
?>';
var lang_btn_upload_files = '<?php
echo quotesEscape($lang_btn_upload_files, "s");
?>';
var lang_btn_upload_repeat = '<?php
echo quotesEscape($lang_btn_upload_repeat, "s");
?>';
var lang_btn_upload_folder = '<?php
echo quotesEscape($lang_btn_upload_folder, "s");
?>';
var lang_file_size_error = '<?php
echo quotesEscape($lang_file_size_error, "s");
?>';
var upload_limit = '<?php
echo $_SESSION["upload_limit"];
?>';
</script>
<?php
}
function setLangFile()
{
global $languages_dir;
// The order of these determines the proper display
if ($_COOKIE["lang"] != "")
$lang = $_COOKIE["lang"];
if ($_SESSION["lang"] != "")
$lang = $_SESSION["lang"];
if (isset($_POST["lang"]))
$lang = $_POST["lang"];
if ($lang == "")
{
if (is_dir($languages_dir))
{
if ($dh = opendir($languages_dir))
{
while (($file = readdir($dh)) !== false)
{
if ($file != "." && $file != ".." && pathinfo($file, PATHINFO_EXTENSION) == "php")
{
include($languages_dir . "/" . $file);
if ($file_lang_default == 1)
$lang = $file;
}
}
closedir($dh);
}
}
}
else
{
if (checkFileInclude($lang,$languages_dir) != 1)
$lang = "en_us.php";
}
$_SESSION["lang"] = $lang;
}
function sessionExpired($message)
{
global $lang_title_ended;
global $lang_btn_login;
$title = $lang_title_ended;
displayPopupOpen(1, 200, 90, 1, $title);
echo $message;
echo "<p><input type=\"button\" id=\"btnLogin\" value=\"" . $lang_btn_login . "\" onClick=\"document.location.href='?openFolder=" . rawurlencode($_POST["openFolder"]) . "'\">";
displayPopupClose(1, "", 0);
}
function checkReferer()
{
global $lang_session_expired;
$domain = $_SESSION["domain"];
$domain = str_replace(".", "\.", $domain);
if (preg_match("/" . $domain . "/", $_SERVER["HTTP_REFERER"]))
{
return 1;
}
else
{
sessionExpired($lang_session_expired);
logOut();
return 0;
}
}
function sanitizeStr($str)
{
$str = str_replace("&", "&", $str);
$str = str_replace('"', '"', $str);
$str = str_replace("<", "<", $str);
$str = str_replace(">", ">", $str);
return $str;
}
function sanitizeStrTrim($str)
{
return sanitizeStr(trim($str));
}
function checkFileInclude($file_check,$dir)
{
$file_found = 0;
if (is_dir($dir))
{
if ($dh = opendir($dir))
{
while (($file = readdir($dh)) !== false && $file_found == 0)
{
if ($file != "." && $file != "..")
{
if ($file == $file_check)
$file_found = 1;
}
}
closedir($dh);
}
}
return $file_found;
}
/***************************************************************/
function f_display()
{
global $conn_id;
global $lang_table_name;
global $lang_table_size;
global $lang_table_date;
global $lang_table_time;
global $lang_table_user;
global $lang_table_group;
global $lang_table_perms;
$ftp_rawlist = getFtpRawList($_SESSION["dir_current"]);
# TABLE HEADER
echo "<table width=\"100%\" cellpadding=\"7\" cellspacing=\"0\" id=\"ftpTable\">";
echo "<tr>";
echo "<td width=\"16\" class=\"ftpTableHeadingNf\"><input type=\"checkbox\" id=\"checkboxSelector\" onClick=\"checkboxSelectAll()\"></td>";
echo "<td width=\"16\" class=\"ftpTableHeadingNf\"></td>";
echo "<td class=\"ftpTableHeading\">" . getFtpColumnSpan("n", $lang_table_name) . "</td>";
echo "<td width=\"10%\" class=\"ftpTableHeading\">" . getFtpColumnSpan("s", $lang_table_size) . "</td>";
echo "<td width=\"10%\" class=\"ftpTableHeading\">" . getFtpColumnSpan("d", $lang_table_date) . "</td>";
echo "<td width=\"10%\" class=\"ftpTableHeading\">" . getFtpColumnSpan("t", $lang_table_time) . "</td>";
// Only display permissions/user/group for Linux advanced
if ($_SESSION["interface"] == "adv" && $_SESSION["win_lin"] != "win") {
echo "<td width=\"10%\" class=\"ftpTableHeading\">" . $lang_table_user . "</td>";
echo "<td width=\"10%\" class=\"ftpTableHeading\">" . $lang_table_group . "</td>";
echo "<td width=\"10%\" class=\"ftpTableHeading\">" . $lang_table_perms . "</td>";
}
echo "</tr>";
# FOLDER UP BUTTON
if ($_SESSION["dir_current"] != "/" && $_SESSION["dir_current"] != "~") {
echo "<tr>";
echo "<td width=\"16\"></td>";
echo "<td width=\"16\"><img src=\"images/icon_16_folder.gif\" width=\"16\" height=\"16\" alt=\"\"></td>";
if ($_SESSION["interface"] == "adv")
echo "<td colspan=\"7\">";
else
echo "<td colspan=\"4\">";
// Get the parent directory
$parent = getParentDir($_SESSION["dir_current"]);
echo "<div class=\"width100pc\" onDragOver=\"dragFile(event); selectFile('folder0',0);\" onDragLeave=\"unselectFolder('folder0')\" onDrop=\"dropFile('" . rawurlencode($parent) . "')\"><a href=\"#\" id=\"folder0\" draggable=\"false\" onClick=\"openThisFolder('" . rawurlencode($parent) . "',1)\">...</a></div>";
echo "</td>";
echo "</tr>";
}
# FOLDERS & FILES
if (sizeof($ftp_rawlist) > 0) {
// Linux
if ($_SESSION["win_lin"] == "lin" || $_SESSION["win_lin"] == "mac") {
echo createFileFolderArrayLin($ftp_rawlist, "folders");
echo createFileFolderArrayLin($ftp_rawlist, "links");
echo createFileFolderArrayLin($ftp_rawlist, "files");
}
// Windows
elseif ($_SESSION["win_lin"] == "win") {
echo createFileFolderArrayWin($ftp_rawlist, "folders");
echo createFileFolderArrayWin($ftp_rawlist, "files");
}
}
# CLOSE TABLE
echo "</table>";
}
function getFtpRawList($folder_path)
{
// Because ftp_rawlist() doesn't support folders with spaces in
// their names, it is neccessary to first change into the directory.
global $conn_id;
global $lang_folder_cant_access;
$isError = 0;
if (!@ftp_chdir($conn_id, $folder_path)) {
if (checkFirstCharTilde($folder_path) == 1) {
if (!@ftp_chdir($conn_id, replaceTilde($folder_path))) {
recordFileError("folder", replaceTilde($folder_path), $lang_folder_cant_access);
$isError = 1;
}
} else {
recordFileError("folder", $folder_path, $lang_folder_cant_access);
$isError = 1;
}
}
if ($isError == 0)
return ftp_rawlist($conn_id, ".");
}
function checkFirstCharTilde($str)
{
if (substr($str, 0, 1) == "~")
return 1;
else
return 0;
}
function replaceTilde($str)
{
$str = str_replace("~", "/", $str);
$str = str_replace("//", "/", $str);
return $str;
}
function recordFileError($str, $file_name, $error)
{
$_SESSION["errors"][] = str_replace("[" . $str . "]", "<strong>" . sanitizeStr($file_name) . "</strong>", $error);
}
function getParentDir($folder)
{
// Check for Windows backslash
if ($folder == "\\")
$folder = "/";
if ($folder == "/") {
return "/";
} else {
$path_parts = pathinfo($folder);
return $path_parts['dirname'];
}
}
function createFileFolderArrayLin($ftp_rawlist, $type)
{
global $showDotFiles;
// Go through array of files/folders
foreach ($ftp_rawlist AS $ff) {
// Reset values
$time = "";
$year = "";
// Split up array into values
//$ff = preg_split("/[\s]+/", $ff, 9);
preg_match('/'. str_repeat('([^\s]+)\s+',7) . '([^\s]+) (.+)/', $ff, $matches);
$ff = array_slice($matches, 1);
$perms = $ff[0];
$user = $ff[2];
$group = $ff[3];
$size = $ff[4];
$month = $ff[5];
$day = $ff[6];
$file = $ff[8];
// Check if file starts with a dot
$dot_prefix = 0;
if ($showDotFiles == 0) {
if (preg_match("/^\.+/", $file))
$dot_prefix = 1;
}
if ($file != "." && $file != ".." && $dot_prefix == 0) {
// Where the last mod date is the previous year, the year will be displayed in place of the time
if (preg_match("/:/", $ff[7]))
$time = $ff[7];
else
$year = $ff[7];
// Set date
$date = formatFtpDate($day, $month, $year);
// Reset user and group
if ($user == "0")
$user = "-";
if ($group == "0")
$group = "-";
// Add folder to array
if (getFileType($perms) == "d") {
$foldAllAr[] = $file . "|d|" . $date . "|" . $time . "|" . $user . "|" . $group . "|" . $perms;
$foldNameAr[] = $file;
$foldDateAr[] = $date;
$foldTimeAr[] = $time;
$foldUserAr[] = $user;
$foldGroupAr[] = $group;
$foldPermsAr[] = $perms;
}
// Add link to array
if (getFileType($perms) == "l") {
$linkAllAr[] = $file . "|l|" . $date . "|" . $time . "|" . $user . "|" . $group . "|" . $perms;
$linkNameAr[] = $file;
$linkDateAr[] = $date;
$linkTimeAr[] = $time;
$linkUserAr[] = $user;
$linkGroupAr[] = $group;
$linkPermsAr[] = $perms;
}
// Add file to array
if (getFileType($perms) == "f") {
$fileAllAr[] = $file . "|" . $size . "|" . $date . "|" . $time . "|" . $user . "|" . $group . "|" . $perms;
$fileNameAr[] = $file;
$fileSizeAr[] = $size;
$fileDateAr[] = $date;
$fileTimeAr[] = $time;
$fileUserAr[] = $user;
$fileGroupAr[] = $group;
$filePermsAr[] = $perms;
}
}
}
// Check there are files and/or folders to display
if (is_array($foldAllAr) || is_array($linkAllAr) || is_array($fileAllAr)) {
// Set sorting order
if ($_POST["sort"] == "")
$sort = "n";
else
$sort = $_POST["sort"];
if ($_POST["ord"] == "")
$ord = "asc";
else
$ord = $_POST["ord"];
// Return folders
if ($type == "folders") {
if (is_array($foldAllAr)) {
// Set the folder arrays to sort
if ($sort == "n")
$sortAr = $foldNameAr;
if ($sort == "d")
$sortAr = $foldDateAr;
if ($sort == "t")
$sortAr = $foldTimeAr;
if ($sort == "u")
$sortAr = $foldUserAr;
if ($sort == "g")
$sortAr = $foldGroupAr;
if ($sort == "p")
$sortAr = $foldPermsAr;
// Multisort array
if (is_array($sortAr)) {
if ($ord == "asc")
array_multisort($sortAr, SORT_ASC, $foldAllAr);
else
array_multisort($sortAr, SORT_DESC, $foldAllAr);
}
// Format and display folder content
$folders = getFileListHtml($foldAllAr, "icon_16_folder.gif");
}
return $folders;
}
// Return links
if ($type == "links") {
if (is_array($linkAllAr)) {
// Set the folder arrays to sort
if ($sort == "n")
$sortAr = $linkNameAr;
if ($sort == "d")
$sortAr = $linkDateAr;
if ($sort == "t")
$sortAr = $linkTimeAr;
if ($sort == "u")
$sortAr = $linkUserAr;
if ($sort == "g")
$sortAr = $linkGroupAr;
if ($sort == "p")
$sortAr = $linkPermsAr;
// Multisort array
if (is_array($sortAr)) {
if ($ord == "asc")
array_multisort($sortAr, SORT_ASC, $linkAllAr);
else
array_multisort($sortAr, SORT_DESC, $linkAllAr);
}
// Format and display folder content
$links = getFileListHtml($linkAllAr, "icon_16_link.gif");
}
return $links;
}
// Return files
if ($type == "files") {
if (is_array($fileAllAr)) {
// Set the folder arrays to sort
if ($sort == "n")
$sortAr = $fileNameAr;
if ($sort == "s")
$sortAr = $fileSizeAr;
if ($sort == "d")
$sortAr = $fileDateAr;
if ($sort == "t")
$sortAr = $fileTimeAr;
if ($sort == "u")
$sortAr = $fileUserAr;
if ($sort == "g")
$sortAr = $fileGroupAr;
if ($sort == "p")
$sortAr = $filePermsAr;
// Multisort folders
if ($ord == "asc")
array_multisort($sortAr, SORT_ASC, $fileAllAr);
else
array_multisort($sortAr, SORT_DESC, $fileAllAr);
// Format and display file content
$files = getFileListHtml($fileAllAr, "icon_16_file.gif");
}
return $files;
}
}
}
function createFileFolderArrayWin($ftp_rawlist, $type)
{
// Go through array of files/folders
foreach ($ftp_rawlist AS $ff) {
// Split up array into values
$ff = preg_split("/[\s]+/", $ff, 4);
$date = $ff[0];
$time = $ff[1];
$size = $ff[2];
$file = $ff[3];
if ($size == "<DIR>")
$size = "d";
// Format date
$day = substr($date, 3, 2);
$month = substr($date, 0, 2);
$year = substr($date, 6, 4);
$date = formatFtpDate($day, $month, $year);
// Format time
$time = formatWinFtpTime($time);
// Add folder to array
if ($size == "d") {
$foldAllAr[] = $file . "|d|" . $date . "|" . $time . "|||";
$foldNameAr[] = $file;
$foldDateAr[] = $date;
$foldTimeAr[] = $time;
}
// Add file to array
if ($size != "d") {
$fileAllAr[] = $file . "|" . $size . "|" . $date . "|" . $time . "|||";
$fileNameAr[] = $file;
$fileSizeAr[] = $size;
$fileDateAr[] = $date;
$fileTimeAr[] = $time;
}
}
// Check there are files and/or folders to display
if (is_array($foldAllAr) || is_array($fileAllAr)) {
// Set sorting order
if ($_POST["sort"] == "")
$sort = "n";
else
$sort = $_POST["sort"];
if ($_POST["ord"] == "")
$ord = "asc";
else
$ord = $_POST["ord"];
// Return folders
if ($type == "folders") {
if (is_array($foldAllAr)) {
// Set the folder arrays to sort
if ($sort == "n")
$sortAr = $foldNameAr;
if ($sort == "d")
$sortAr = $foldDateAr;
if ($sort == "t")
$sortAr = $foldTimeAr;
// Multisort array
if (is_array($sortAr)) {
if ($ord == "asc")
array_multisort($sortAr, SORT_ASC, $foldAllAr);
else
array_multisort($sortAr, SORT_DESC, $foldAllAr);
}
// Format and display folder content
$folders = getFileListHtml($foldAllAr, "icon_16_folder.gif");
}
return $folders;
}
// Return files
if ($type == "files") {
if (is_array($fileAllAr)) {
// Set the folder arrays to sort
if ($sort == "n")
$sortAr = $fileNameAr;
if ($sort == "s")
$sortAr = $fileSizeAr;
if ($sort == "d")
$sortAr = $fileDateAr;
if ($sort == "t")
$sortAr = $fileTimeAr;
// Multisort folders
if ($ord == "asc")
array_multisort($sortAr, SORT_ASC, $fileAllAr);
else
array_multisort($sortAr, SORT_DESC, $fileAllAr);
// Format and display file content
$files = getFileListHtml($fileAllAr, "icon_16_file.gif");
}
return $files;
}
}
}
function formatFtpDate($day, $month, $year)
{
// Add leading zero to day
if (strlen($day) == 1)
$day = "0" . $day;
if ($month == "Jan")
$month = "01";
if ($month == "Feb")
$month = "02";
if ($month == "Mar")
$month = "03";
if ($month == "Apr")
$month = "04";
if ($month == "May")
$month = "05";
if ($month == "Jun")
$month = "06";
if ($month == "Jul")
$month = "07";
if ($month == "Aug")
$month = "08";
if ($month == "Sep")
$month = "09";
if ($month == "Oct")
$month = "10";
if ($month == "Nov")
$month = "11";
if ($month == "Dec")
$month = "12";
// Set the year if none
if ($year == "") {
// First check if the date falls within the last 12 months (as year only appears after 12 months has passed)
$current_month = date("m");
if ($month > $current_month)
$year = date("Y") - 1;
else
$year = date("Y");
}
if (strlen($year) == 2) {
// To avoid a future Y2K problem, check the first two digits of year on Windows
if ($year > 00 && $year < 99)
$year = substr(date("Y"), 0, 2) . $year;
else
$year = (substr(date("Y"), 0, 2) - 1) . $year;
}
$date = $year . $month . $day;
return $date;
}
function formatWinFtpTime($time)
{
$h = substr($time, 0, 2);
$m = substr($time, 3, 2);
$am_pm = substr($time, 5, 2);
if ($am_pm == "PM")
$h = $h + 12;
$time = $h . ":" . $m;
return $time;
}
function getFileListHtml($array, $image)
{
global $trCount;
global $dateFormatUsa;
if ($trCount == 1)
$trCount = 1;
else
$trCount = 0;
$i = 1;
foreach ($array AS $file) {
list($file, $size, $date, $time, $user, $group, $perms) = explode("|", $file);
// Folder check (lin/win)
if ($size == "d")
$action = "folderAction";
// Link check (lin/win)
if ($size == "l")
$action = "linkAction";
// File check (lin/win)
if ($size != "d" && $size != "l")
$action = "fileAction";
// Set file path
if ($size == "l") {
$file_path = getPathFromLink($file);
$file = preg_replace("/ -> .*/", "", $file);
} else {
if ($_SESSION["dir_current"] == "/")
$file_path = "/" . $file;
else
$file_path = $_SESSION["dir_current"] . "/" . $file;
}
if ($trCount == 0) {
$trClass = "trBg0";
$trCount = 1;
} else {
$trClass = "trBg1";
$trCount = 0;
}
// Check for checkbox check (only if action button clicked)
if ($_POST["ftpAction"] != "") {
if ((sizeof($_SESSION["clipboard_rename"]) > 1 && in_array($file, $_SESSION["clipboard_rename"])) || (sizeof($_SESSION["clipboard_chmod"]) > 1 && in_array($file_path, $_SESSION["clipboard_chmod"])))
$checked = "checked";
else
$checked = "";
} else {
$checked = "";
}
// Set the date
if ($dateFormatUsa == 1)
$date = substr($date, 4, 2) . "/" . substr($date, 6, 2) . "/" . substr($date, 2, 2);
else
$date = substr($date, 6, 2) . "/" . substr($date, 4, 2) . "/" . substr($date, 2, 2);
$html .= "<tr class=\"" . $trClass . "\">";
$html .= "<td>";
$html .= "<input type=\"checkbox\" name=\"" . $action . "[]\" value=\"" . rawurlencode($file_path) . "\" onclick=\"checkFileChecked()\" " . $checked . ">";
$html .= "</td>";
$html .= "<td><img src=\"images/" . $image . "\" width=\"16\" height=\"16\"></td>";
$html .= "<td>";
// Display Folders
if ($action == "folderAction")
$html .= "<div class=\"width100pc\" onDragOver=\"dragFile(event); selectFile('folder" . $i . "',0);\" onDragLeave=\"unselectFolder('folder" . $i . "')\" onDrop=\"dropFile('" . rawurlencode($file_path) . "')\"><a href=\"#\" id=\"folder" . $i . "\" onClick=\"openThisFolder('" . rawurlencode($file_path) . "',1)\" onContextMenu=\"selectFile(this.id,1); displayContextMenu(event,'','" . rawurlencode($file_path) . "'," . assignWinLinNum() . ")\" draggable=\"true\" onDragStart=\"selectFile(this.id,1); setDragFile('','" . rawurlencode($file_path) . "')\">" . str_replace(" "," ",sanitizeStr($file)) . "</a></div>";
// Display Links
if ($action == "linkAction")
$html .= "<div class=\"width100pc\"><a href=\"#\" id=\"folder" . $i . "\" onClick=\"openThisFolder('" . rawurlencode($file_path) . "',1)\" onContextMenu=\"\" draggable=\"false\">" . str_replace(" "," ",sanitizeStr($file)) . "</a></div>";
// Display files
if ($action == "fileAction")
$html .= "<a href=\"?dl=" . rawurlencode($file_path) . "\" id=\"file" . $i . "\" target=\"ajaxIframe\" onContextMenu=\"selectFile(this.id,1); displayContextMenu(event,'" . rawurlencode($file_path) . "',''," . assignWinLinNum() . ")\" draggable=\"true\" onDragStart=\"selectFile(this.id,1); setDragFile('" . rawurlencode($file_path) . "','')\">" . str_replace(" "," ",sanitizeStr($file)) . "</a>";
$html .= "</td>";
$html .= "<td>" . formatFileSize($size) . "</td>";
$html .= "<td>" . $date . "</td>";
$html .= "<td>" . $time . "</td>";
if ($_SESSION["interface"] == "adv" && ($_SESSION["win_lin"] == "lin" || $_SESSION["win_lin"] == "mac")) {
$html .= "<td>" . $user . "</td>";
$html .= "<td>" . $group . "</td>";
$html .= "<td>" . $perms . "</td>";
}
$html .= "</tr>";
$i++;
}
return $html;
}
function formatFileSize($size)
{
global $lang_size_b;
global $lang_size_kb;
global $lang_size_mb;
global $lang_size_gb;
if ($size == "d" || $size == "l") {
$size = "";
} else {
if ($size < 1024) {
$size = round($size, 2);
//$size = round($size,2).$lang_size_b;
} elseif ($size < (1024 * 1024)) {
$size = round(($size / 1024), 0) . $lang_size_kb;
} elseif ($size < (1024 * 1024 * 1024)) {
$size = round((($size / 1024) / 1024), 0) . $lang_size_mb;
} elseif ($size < (1024 * 1024 * 1024 * 1024)) {
$size = round(((($size / 1024) / 1024) / 1024), 0) . $lang_size_gb;
}
}
return $size;
}
function getPathFromLink($file)
{
$file_path = preg_replace("/.* -> /", "", $file);
// Check if path is not absolute
if (substr($file_path, 0, 1) != "/") {
// Count occurances of ../
$i = 0;
while (substr($file_path, 0, 3) == "../") {
$i++;
$file_path = substr($file_path, 3, strlen($file_path));
}
$dir_current = $_SESSION["dir_current"];
// Get the real parent
for ($j = 0; $j < $i; $j++) {
$dir_current = getParentDir($dir_current);
}
// Set the path
if ($dir_current == "/")
$file_path = "/" . $file_path;
else
$file_path = $dir_current . "/" . $file_path;
}
if ($file_path == "~/")
$file_path = "~";
return $file_path;
}
function displayAjaxIframe()
{
?>
<iframe name="ajaxIframe" id="ajaxIframe" width="0" height="0" style="display:none;visibility:hidden;border:0"></iframe>
<?php
}
function loadAjax()
{
?>
<script type="text/javascript" src="ajax.js?<?php echo date("U"); ?>" charset="utf-8"></script>
<?php
}
?>
<script>
function actionFunctionLogout()
{
document.location.href = '?logout=1'
}
</script>