372 lines
10 KiB
PHP
372 lines
10 KiB
PHP
|
<?
|
||
|
/*
|
||
|
Jorge - frontend for mod_logdb - ejabberd server-side message archive module.
|
||
|
|
||
|
Copyright (C) 2009 Zbigniew Zolkiewski
|
||
|
|
||
|
This program is free software; you can redistribute it 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 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||
|
*/
|
||
|
|
||
|
if (__FILE__==$_SERVER['SCRIPT_FILENAME']) {
|
||
|
|
||
|
header("Location: index.php?act=logout");
|
||
|
exit;
|
||
|
|
||
|
}
|
||
|
|
||
|
// turn on buffering
|
||
|
ob_start();
|
||
|
// send headers
|
||
|
header("content-type: text/html; charset=utf-8");
|
||
|
|
||
|
// error reporting to off
|
||
|
error_reporting(E_NONE);
|
||
|
|
||
|
require_once("func.php"); // functions
|
||
|
require_once("class.sessions.php"); // sessions handling
|
||
|
require_once("class.ejabberd_xmlrpc.php"); // rpc class
|
||
|
require_once("class.db.php"); // db_manager
|
||
|
require_once("class.roster.php"); // roster
|
||
|
require_once("class.helper.php"); // helper
|
||
|
require_once("config.php"); // read configuration
|
||
|
|
||
|
# SSL redirection if set to true in config.
|
||
|
if (SSL_REDIRECT === "true") {
|
||
|
|
||
|
if($_SERVER['HTTPS'] != 'on') {
|
||
|
|
||
|
$url = "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
|
||
|
header('Location: '.$url);
|
||
|
ob_end_flush();
|
||
|
exit;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$sess = new session;
|
||
|
// Language support. Well thats the hard way...
|
||
|
$language_found = false;
|
||
|
|
||
|
if ($_GET['lng_sw']) {
|
||
|
|
||
|
debug(DEBUG,"Setting language");
|
||
|
$c_language = is_language_supported($_GET['lng_sw'],$language_support,1,true);
|
||
|
if ($c_language !== false) {
|
||
|
|
||
|
setcookie("jorge_language",$c_language,time()+2592000);
|
||
|
$sess->set('language',$c_language);
|
||
|
debug(DEBUG,"Language found, loading file: $c_language.php");
|
||
|
require("lang/".$c_language.".php");
|
||
|
$language_found = true;
|
||
|
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
setcookie("jorge_language",$language_support[default_language][0],time()+2592000);
|
||
|
$sess->set('language',$language_support[default_language][0]);
|
||
|
debug(DEBUG,"Language not found in selection, using defaults");
|
||
|
require('lang/'.$language_support[default_language][0].'.php');
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
// get client addr
|
||
|
$rem_adre = $_SERVER['REMOTE_ADDR'];
|
||
|
|
||
|
// something for mac users
|
||
|
$mac_user = get_user_agent($_SERVER);
|
||
|
|
||
|
// location
|
||
|
$location=$_SERVER['PHP_SELF'];
|
||
|
|
||
|
// init html helper
|
||
|
$html = new render_html();
|
||
|
|
||
|
if (!preg_match("/index.php/i",$location)) {
|
||
|
|
||
|
if ($sess->get('vhost') === null) {
|
||
|
|
||
|
header("Location: index.php?act=logout");
|
||
|
|
||
|
}
|
||
|
if (array_key_exists($sess->get('vhost'), $vhosts) === false) {
|
||
|
|
||
|
header("Location: index.php?act=logout");
|
||
|
|
||
|
}
|
||
|
|
||
|
define(XMPP_HOST,$sess->get('vhost'));
|
||
|
$rpc_host = check_rpc_server($vhosts[XMPP_HOST],$rpc_port);
|
||
|
debug(DEBUG,"Active RPC host: $rpc_host");
|
||
|
|
||
|
// in case no RPC servers are available stop jorge
|
||
|
if ($rpc_host===false) {
|
||
|
|
||
|
print "<br><center><b>Currently service is unavailable. Please try again later.</b><br>
|
||
|
<a href=\"index.php?act=logout\">Please logout</a>
|
||
|
</center>";
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
// create rpc object
|
||
|
$ejabberd_rpc = new rpc_connector("$rpc_host","$rpc_port",XMPP_HOST);
|
||
|
$xmpp_host = str_replace(".","_", XMPP_HOST);
|
||
|
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
// check if selected host exist in configuration
|
||
|
if (array_key_exists($_POST['vhost'], $vhosts) === true) {
|
||
|
|
||
|
$rpc_host = check_rpc_server($vhosts[$_POST['vhost']],$rpc_port);
|
||
|
debug(DEBUG,"Selecting RPC server during login: $rpc_host");
|
||
|
if ($rpc_host === false) {
|
||
|
|
||
|
print "<br><center><b>Currently service is unavailable. Please try again later.<br>
|
||
|
<a href=\"index.php?act=logout\">Please logout</a>
|
||
|
</b></center>";
|
||
|
exit;
|
||
|
|
||
|
}
|
||
|
else {
|
||
|
|
||
|
define(XMPP_HOST,$_POST['vhost']);
|
||
|
$ejabberd_rpc = new rpc_connector("$rpc_host","$rpc_port",XMPP_HOST);
|
||
|
$xmpp_host = str_replace(".","_", XMPP_HOST);
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
unset($_POST['inpLogin']);
|
||
|
unset($_POST['inpPass']);
|
||
|
|
||
|
// Try to recreate db object...
|
||
|
if ($_GET['act'] === "logout") {
|
||
|
|
||
|
if ($sess->get('vhost')!="") {
|
||
|
|
||
|
$xmpp_host = str_replace(".","_", $sess->get('vhost'));
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
// create db_manager object
|
||
|
$db = new db_manager(MYSQL_HOST,MYSQL_NAME,MYSQL_USER,MYSQL_PASS,"mysql","$xmpp_host");
|
||
|
$db->set_debug(SQL_DEBUG);
|
||
|
|
||
|
// create encryption object
|
||
|
$enc = new url_crypt(ENC_KEY);
|
||
|
|
||
|
// username (token)
|
||
|
define(TOKEN,$sess->get('uid_l'));
|
||
|
|
||
|
//debug
|
||
|
debug(DEBUG,"User session:".TOKEN);
|
||
|
|
||
|
// authentication checks. Ensure if session data is not altered... (only when we are inside Jorge)
|
||
|
if (!preg_match("/index.php/i",$location)) {
|
||
|
|
||
|
if (check_registered_user($sess,$ejabberd_rpc,$enc) !== true) {
|
||
|
|
||
|
header("Location: index.php?act=logout");
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
// Load language file based on current session
|
||
|
debug(DEBUG,"Selecting initial language after authentication");
|
||
|
if ($sess->get('language')) {
|
||
|
|
||
|
// Validate language setting in session
|
||
|
if (is_language_supported($sess->get('language'),$language_support) === true) {
|
||
|
|
||
|
debug(DEBUG,"Language selection ok.");
|
||
|
require('lang/'.$sess->get('language').'.php');
|
||
|
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
debug(DEBUG,"Language in session was altered! Overwritting value...");
|
||
|
require('lang/'.$language_support[default_language][0].'.php');
|
||
|
$sess->set('language',$language_support[default_language][0]);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// we need user_id but only if we are not in not_enabled mode:
|
||
|
if(!preg_match("/not_enabled.php/i",$_SERVER['PHP_SELF'])) {
|
||
|
|
||
|
$db->get_user_id(TOKEN);
|
||
|
$user_id = $db->result->user_id;
|
||
|
// create user_id instance
|
||
|
$db->set_user_id($user_id);
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
// check if user have admin rights
|
||
|
if (in_array(TOKEN, $vhosts_admins[XMPP_HOST]) === true) {
|
||
|
|
||
|
define(ADMIN_NAME,TOKEN);
|
||
|
|
||
|
}
|
||
|
|
||
|
// run only for admins
|
||
|
if (TOKEN === ADMIN_NAME) {
|
||
|
|
||
|
$time_start=getmicrotime();
|
||
|
|
||
|
}
|
||
|
|
||
|
// If language not set or not found in cookie, set default language
|
||
|
if (preg_match("/index.php/i",$location) OR preg_match("/not_enabled.php/i",$location)) {
|
||
|
|
||
|
// Set defaults only if language was not selected
|
||
|
if ($language_found !== true) {
|
||
|
|
||
|
if (is_language_supported($_COOKIE["jorge_language"],$language_support) === true) {
|
||
|
|
||
|
debug(DEBUG,"Setting language according to cookie");
|
||
|
require('lang/'.$_COOKIE["jorge_language"].'.php');
|
||
|
$sess->set('language',$_COOKIE["jorge_language"]);
|
||
|
|
||
|
}
|
||
|
else {
|
||
|
|
||
|
debug(DEBUG,"Language cookie not found, using defaults");
|
||
|
require('lang/'.$language_support[default_language][0].'.php');
|
||
|
$sess->set('language',$language_support[default_language][0]);
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
// Get language from session
|
||
|
$lang=$sess->get('language');
|
||
|
|
||
|
$html->headers('
|
||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||
|
<html>
|
||
|
<head>
|
||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||
|
<meta http-equiv="cache-control" content="no-cache">
|
||
|
<meta http-equiv="pragma" content="no-cache">
|
||
|
<meta name="Author" content="Zbyszek Zolkiewski at jabster.pl">
|
||
|
<meta name="Keywords" content="jorge message archiving ejabberd mod_logdb erlang">
|
||
|
<meta name="Description" content="Jorge">
|
||
|
<link rel="shortcut icon" href="favicon.ico">
|
||
|
<link rel="stylesheet" href="style.css" type="text/css">
|
||
|
<link rel="stylesheet" href="jquery.autocomplete.css" type="text/css">
|
||
|
<link rel="alternate" type="application/rss+xml" title="Project Jorge ChangeLog" href="https://jorge.jabster.pl/changelog.xml">
|
||
|
|
||
|
');
|
||
|
|
||
|
if (preg_match("/main.php/i",$location)) {
|
||
|
|
||
|
$html->headers('
|
||
|
<link rel="stylesheet" href="simpletree.css" type="text/css" />
|
||
|
<script type="text/javascript" src="lib/simpletreemenu.js">
|
||
|
/***********************************************
|
||
|
* Simple Tree Menu - Dynamic Drive DHTML code library (www.dynamicdrive.com)
|
||
|
* This notice MUST stay intact for legal use
|
||
|
* Visit Dynamic Drive at http://www.dynamicdrive.com/ for full source code
|
||
|
***********************************************/
|
||
|
</script>
|
||
|
');
|
||
|
}
|
||
|
$html->headers('
|
||
|
<script type="text/javascript" src="lib/jquery.pack.js"></script>
|
||
|
<script type="text/javascript" src="lib/jquery.bgiframe.min.js"></script>
|
||
|
<script type="text/javascript" src="lib/jquery.tooltip.js"></script>
|
||
|
<script type="text/javascript" src="lib/jquery.quicksearch.js"></script>
|
||
|
<script type="text/javascript" src="lib/jquery.autocomplete.pack.js"></script>
|
||
|
|
||
|
');
|
||
|
|
||
|
// prevent loading includes as long as user is not admin.
|
||
|
if (TOKEN==ADMIN_NAME) {
|
||
|
|
||
|
$html->headers('<script language="javascript" type="text/javascript" src="lib/jquery.flot.pack.js"></script>');
|
||
|
}
|
||
|
$html->headers('
|
||
|
<title>Jorge Beta</title>
|
||
|
<script type="text/javascript">
|
||
|
$(function() {
|
||
|
$(\'table#maincontent tbody#searchfield tr\').quicksearch({
|
||
|
stripeRowClass: [\'odd\', \'even\'],
|
||
|
position: \'before\',
|
||
|
attached: \'#maincontent\',
|
||
|
labelText: \'QuickFilter:\',
|
||
|
loaderText: \'\',
|
||
|
inputClass: \'c_map_class\',
|
||
|
delay: 30
|
||
|
});
|
||
|
|
||
|
|
||
|
$(\'select#c_map option\').quicksearch({
|
||
|
stripeRowClass: [\'odd\', \'even\'],
|
||
|
position: \'before\',
|
||
|
inputText: \''.$filter_form_tip[$lang].'\',
|
||
|
inputClass: \'c_map_class\',
|
||
|
attached: \'#c_map_form\',
|
||
|
labelText: \''.$filter_form[$lang].':\',
|
||
|
delay: 30
|
||
|
});
|
||
|
|
||
|
|
||
|
$(\'img\').Tooltip();
|
||
|
|
||
|
$(\'a, tr, td\').Tooltip({
|
||
|
extraClass: "fancy",
|
||
|
showBody: ";",
|
||
|
showURL: false,
|
||
|
track: true,
|
||
|
fixPNG: true
|
||
|
});
|
||
|
|
||
|
|
||
|
});
|
||
|
</script>
|
||
|
</head>
|
||
|
<body style="background-image: url(img/bak2b.png); background-repeat:repeat-x; background-color: #edf5fa;">
|
||
|
|
||
|
<noscript>
|
||
|
|
||
|
<center><div style="background-color: #fad163; text-align: center; font-weight: bold; width: 500pt;">'.$no_script[$lang].'</div></center><br>
|
||
|
|
||
|
</noscript>
|
||
|
|
||
|
<script language="JavaScript1.2" type="text/javascript">
|
||
|
|
||
|
function smackzk() {
|
||
|
|
||
|
window.open(\'http://slimster.org/web\',\'\',
|
||
|
\'location=no,toolbar=no,menubar=no,scrollbars=no,resizable, height=375,width=715\');
|
||
|
|
||
|
}
|
||
|
</script>
|
||
|
|
||
|
');
|
||
|
|
||
|
?>
|
||
|
|