209 lines
4.5 KiB
PHP
209 lines
4.5 KiB
PHP
|
<?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.
|
||
|
|
||
|
*/
|
||
|
|
||
|
// Suppress all errors
|
||
|
error_reporting(E_NONE);
|
||
|
|
||
|
require("func.php");
|
||
|
require("class.sessions.php");
|
||
|
require("class.ejabberd_xmlrpc.php");
|
||
|
require("class.db.php");
|
||
|
require("class.roster.php");
|
||
|
require("class.helper.php");
|
||
|
require("config.php");
|
||
|
|
||
|
ob_start();
|
||
|
|
||
|
// init session
|
||
|
$sess = new session;
|
||
|
|
||
|
// Select language
|
||
|
if ($sess->get('language')) {
|
||
|
|
||
|
// Validate language setting in session
|
||
|
if (is_language_supported($sess->get('language'),$language_support) === true) {
|
||
|
|
||
|
require('lang/'.$sess->get('language').'.php');
|
||
|
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
// In case of invalid session, overwrite value
|
||
|
require('lang/'.$language_support[default_language][0].'.php');
|
||
|
$sess->set('language',$language_support[default_language][0]);
|
||
|
|
||
|
}
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
// If no lang in sess, set it anyway...
|
||
|
require('lang/'.$language_support[default_language][0].'.php');
|
||
|
$sess->set('language',$language_support[default_language][0]);
|
||
|
|
||
|
}
|
||
|
|
||
|
// language
|
||
|
$lang = $sess->get('language');
|
||
|
|
||
|
define(XMPP_HOST,$sess->get('vhost'));
|
||
|
$xmpp_host = str_replace(".","_", XMPP_HOST);
|
||
|
|
||
|
$rpc_host = check_rpc_server($vhosts[XMPP_HOST],$rpc_port);
|
||
|
|
||
|
// 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></center>";
|
||
|
exit;
|
||
|
}
|
||
|
|
||
|
// connect to xmpp server
|
||
|
$ejabberd_rpc = new rpc_connector("$rpc_host","$rpc_port",XMPP_HOST);
|
||
|
|
||
|
// initialize encryption system
|
||
|
$enc = new url_crypt(ENC_KEY);
|
||
|
|
||
|
// authenticate
|
||
|
if (check_registered_user($sess,$ejabberd_rpc,$enc) !== true) {
|
||
|
|
||
|
header("Location: index.php?act=logout");
|
||
|
exit;
|
||
|
|
||
|
}
|
||
|
|
||
|
// create database object
|
||
|
$db = new db_manager(MYSQL_HOST,MYSQL_NAME,MYSQL_USER,MYSQL_PASS,"mysql","$xmpp_host");
|
||
|
|
||
|
// set user data
|
||
|
define(TOKEN,$sess->get('uid_l'));
|
||
|
$db->get_user_id(TOKEN);
|
||
|
define(USER_ID, $db->result->user_id);
|
||
|
|
||
|
if (!ctype_digit(USER_ID)) {
|
||
|
|
||
|
// exit on unexpected results
|
||
|
exit;
|
||
|
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
$db->set_user_id(USER_ID);
|
||
|
|
||
|
}
|
||
|
|
||
|
// get parameters
|
||
|
$e_string=$_GET['a'];
|
||
|
|
||
|
|
||
|
if ($enc->decrypt_url($e_string) === true) {
|
||
|
|
||
|
$tslice = $enc->tslice;
|
||
|
$talker = $enc->peer_name_id;
|
||
|
$server = $enc->peer_server_id;
|
||
|
|
||
|
}
|
||
|
else {
|
||
|
|
||
|
// if validation of link fail, exit
|
||
|
header('Location: index.php');
|
||
|
exit;
|
||
|
|
||
|
}
|
||
|
|
||
|
$db->get_user_name($talker);
|
||
|
$user_name = $db->result->username;
|
||
|
$db->get_server_name($server);
|
||
|
$server_name = $db->result->server_name;
|
||
|
$nickname = $sess->get('export_nickname');
|
||
|
$db->get_own_name();
|
||
|
if ($db->result->own_name) {
|
||
|
|
||
|
$own_name = $db->result->own_name;
|
||
|
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
$own_name = false;
|
||
|
|
||
|
}
|
||
|
|
||
|
// get chat
|
||
|
$db->get_user_chat($tslice,$talker,$server,$resource_id = null,$start = null,10000);
|
||
|
$result = $db->result;
|
||
|
|
||
|
// set headers
|
||
|
header("Cache-Control: public, must-revalidate");
|
||
|
header("Pragma: hack"); // this is WEIRD - it is needed to work with Internet Explorer :O
|
||
|
header("Content-Type: application/octet-stream");
|
||
|
header("Content-Disposition: attachment; filename=\"Jorge_chat_$nickname-$tslice.txt\"");
|
||
|
|
||
|
$data="$export_head1[$lang]$nickname ($user_name@$server_name) $export_head2[$lang] $tslice:\n";
|
||
|
|
||
|
foreach ($result as $results) {
|
||
|
|
||
|
if ($results["direction"] == "from")
|
||
|
{
|
||
|
$out=$nickname;
|
||
|
$tt=$tt+1;
|
||
|
$aa=0;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if ($own_name !== false) {
|
||
|
|
||
|
$out = $own_name;
|
||
|
}
|
||
|
else{
|
||
|
|
||
|
$out = TOKEN;
|
||
|
|
||
|
}
|
||
|
$aa=$aa+1;
|
||
|
$tt=0;
|
||
|
}
|
||
|
|
||
|
|
||
|
if ($aa<2 AND $tt<2) {
|
||
|
|
||
|
$data .= "\n(".trim(strstr($results[ts], ' ')).") $out\n";
|
||
|
$here="1";
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$data .=""; $here="0";
|
||
|
}
|
||
|
|
||
|
$data .=" $results[body]\n";
|
||
|
|
||
|
}
|
||
|
|
||
|
$data .="\n\n______\nChat exported by Jorge";
|
||
|
|
||
|
echo $data;
|
||
|
ob_end_flush();
|
||
|
|
||
|
// log event
|
||
|
$db->set_logger("8","1", "JID: $user_name@$server_name, Date: $tslice");
|
||
|
$sess->unregister('export_nickname');
|
||
|
|
||
|
?>
|