You need to install the Jappix application, adapted for Friendica (see README).';
}
else if (!file_exists("addon/jappixmini/jappix.zip")) {
$o .= 'The source archive jappix.zip does not exist. This is probably a violation of the Jappix License (see README).
';
}
else {
$o .= 'Jappix is installed.
';
}
// info text field
$o .= '
';
$info_text = get_config("jappixmini", "infotext");
$o .= '
';
$o .= '';
}
function jappixmini_plugin_admin_post(&$a) {
// set info text
$submit = $_REQUEST['jappixmini-admin-settings'];
if ($submit) {
$info_text = $_REQUEST['jappixmini-infotext'];
set_config("jappixmini", "infotext", $info_text);
}
}
function jappixmini_module() {}
function jappixmini_init(&$a) {
// module page where other Friendica sites can submit Jabber addresses to and also can query Jabber addresses
// of local users
if (!file_exists("addon/jappixmini/jappix")) killme();
$dfrn_id = $_REQUEST["dfrn_id"];
if (!$dfrn_id) killme();
$role = $_REQUEST["role"];
if ($role=="pub") {
$r = q("SELECT * FROM `contact` WHERE LENGTH(`pubkey`) AND `dfrn-id`='%s' LIMIT 1",
dbesc($dfrn_id)
);
if (!count($r)) killme();
$encrypt_func = openssl_public_encrypt;
$decrypt_func = openssl_public_decrypt;
$key = $r[0]["pubkey"];
} else if ($role=="prv") {
$r = q("SELECT * FROM `contact` WHERE LENGTH(`prvkey`) AND `issued-id`='%s' LIMIT 1",
dbesc($dfrn_id)
);
if (!count($r)) killme();
$encrypt_func = openssl_private_encrypt;
$decrypt_func = openssl_private_decrypt;
$key = $r[0]["prvkey"];
} else {
killme();
}
$uid = $r[0]["uid"];
// save the Jabber address we received
try {
$signed_address_hex = $_REQUEST["signed_address"];
$signed_address = hex2bin($signed_address_hex);
$trusted_address = "";
$decrypt_func($signed_address, $trusted_address, $key);
$now = intval(time());
set_pconfig($uid, "jappixmini", "id:$dfrn_id", "$now:$trusted_address");
} catch (Exception $e) {
}
// do not return an address if user deactivated plugin
$activated = get_pconfig($uid, 'jappixmini', 'activate');
if (!$activated) killme();
// return the requested Jabber address
try {
$username = get_pconfig($uid, 'jappixmini', 'username');
$server = get_pconfig($uid, 'jappixmini', 'server');
$address = "$username@$server";
$encrypted_address = "";
$encrypt_func($address, $encrypted_address, $key);
$encrypted_address_hex = bin2hex($encrypted_address);
$answer = Array(
"status"=>"ok",
"encrypted_address"=>$encrypted_address_hex
);
$answer_json = json_encode($answer);
echo $answer_json;
killme();
} catch (Exception $e) {
killme();
}
}
function jappixmini_settings(&$a, &$s) {
// addon settings for a user
if (!file_exists("addon/jappixmini/jappix")) return;
$activate = get_pconfig(local_user(),'jappixmini','activate');
$activate = intval($activate) ? ' checked="checked"' : '';
$username = get_pconfig(local_user(),'jappixmini','username');
$username = htmlentities($username);
$server = get_pconfig(local_user(),'jappixmini','server');
$server = htmlentities($server);
$bosh = get_pconfig(local_user(),'jappixmini','bosh');
$bosh = htmlentities($bosh);
$password = get_pconfig(local_user(),'jappixmini','password');
$autosubscribe = get_pconfig(local_user(),'jappixmini','autosubscribe');
$autosubscribe = intval($autosubscribe) ? ' checked="checked"' : '';
$autoapprove = get_pconfig(local_user(),'jappixmini','autoapprove');
$autoapprove = intval($autoapprove) ? ' checked="checked"' : '';
$encrypt = intval(get_pconfig(local_user(),'jappixmini','encrypt'));
$encrypt_checked = $encrypt ? ' checked="checked"' : '';
$encrypt_disabled = $encrypt ? '' : ' disabled="disabled"';
$info_text = get_config("jappixmini", "infotext");
$info_text = htmlentities($info_text);
$info_text = str_replace("\n", "
", $info_text);
if (!$activate) {
// load scripts if not yet activated so that password can be saved
$a->page['htmlhead'] .= ''."\r\n";
$a->page['htmlhead'] .= ''."\r\n";
$a->page['htmlhead'] .= ''."\r\n";
$a->page['htmlhead'] .= ''."\r\n";
$a->page['htmlhead'] .= ''."\r\n";
$a->page['htmlhead'] .= ''."\r\n";
}
$s .= '';
$s .= '
Jappix Mini addon settings
';
$s .= '
';
$s .= '
';
$a->page['htmlhead'] .= "";
}
function jappixmini_settings_post(&$a,&$b) {
// save addon settings for a user
if (!file_exists("addon/jappixmini/jappix")) return;
if(! local_user()) return;
$uid = local_user();
if($_POST['jappixmini-submit']) {
$encrypt = intval($b['jappixmini-encrypt']);
if ($encrypt) {
// check that Jabber password was encrypted with correct Friendica password
$friendica_password = trim($b['jappixmini-friendica-password']);
$encrypted = hash('whirlpool',$friendica_password);
$r = q("SELECT * FROM `user` WHERE `uid`=$uid AND `password`='%s'",
dbesc($encrypted)
);
if (!count($r)) {
info("Wrong friendica password!");
return;
}
}
$purge = intval($b['jappixmini-purge']);
$username = trim($b['jappixmini-username']);
$old_username = get_pconfig($uid,'jappixmini','username');
if ($username!=$old_username) $purge = 1;
$server = trim($b['jappixmini-server']);
$old_server = get_pconfig($uid,'jappixmini','server');
if ($server!=$old_server) $purge = 1;
set_pconfig($uid,'jappixmini','username',$username);
set_pconfig($uid,'jappixmini','server',$server);
set_pconfig($uid,'jappixmini','bosh',trim($b['jappixmini-bosh']));
set_pconfig($uid,'jappixmini','password',trim($b['jappixmini-encrypted-password']));
set_pconfig($uid,'jappixmini','autosubscribe',intval($b['jappixmini-autosubscribe']));
set_pconfig($uid,'jappixmini','autoapprove',intval($b['jappixmini-autoapprove']));
set_pconfig($uid,'jappixmini','activate',intval($b['jappixmini-activate']));
set_pconfig($uid,'jappixmini','encrypt',$encrypt);
info( 'Jappix Mini settings saved.' );
if ($purge) {
q("DELETE FROM `pconfig` WHERE `uid`=$uid AND `cat`='jappixmini' and `k` LIKE 'id%%'");
info( 'List of addresses purged.' );
}
}
}
function jappixmini_script(&$a,&$s) {
// adds the script to the page header which starts Jappix Mini
if (!file_exists("addon/jappixmini/jappix")) return;
if(! local_user()) return;
$activate = get_pconfig(local_user(),'jappixmini','activate');
if (!$activate) return;
$a->page['htmlhead'] .= ''."\r\n";
$a->page['htmlhead'] .= ''."\r\n";
$a->page['htmlhead'] .= ''."\r\n";
$a->page['htmlhead'] .= ''."\r\n";
$a->page['htmlhead'] .= ''."\r\n";
$a->page['htmlhead'] .= ''."\r\n";
$username = get_pconfig(local_user(),'jappixmini','username');
$username = str_replace("'", "\\'", $username);
$server = get_pconfig(local_user(),'jappixmini','server');
$server = str_replace("'", "\\'", $server);
$bosh = get_pconfig(local_user(),'jappixmini','bosh');
$bosh = str_replace("'", "\\'", $bosh);
$encrypt = get_pconfig(local_user(),'jappixmini','encrypt');
$encrypt = intval($encrypt);
$password = get_pconfig(local_user(),'jappixmini','password');
$password = str_replace("'", "\\'", $password);
$autoapprove = get_pconfig(local_user(),'jappixmini','autoapprove');
$autoapprove = intval($autoapprove);
$autosubscribe = get_pconfig(local_user(),'jappixmini','autosubscribe');
$autosubscribe = intval($autosubscribe);
// deactivate bosh host if proxy is off
$conf = file_get_contents("addon/jappixmini/jappix/store/conf/main.xml");
preg_match("/(.*)<\/bosh_proxy>/", $conf, $matches);
if ($matches[1]!="on") {
$bosh = '';
}
// get a list of jabber accounts of the contacts
$contacts = Array();
$uid = local_user();
$rows = q("SELECT * FROM `pconfig` WHERE `uid`=$uid AND `cat`='jappixmini' and `k` LIKE 'id%%'");
foreach ($rows as $row) {
$key = $row['k'];
$pos = strpos($key, ":");
$dfrn_id = substr($key, $pos+1);
$r = q("SELECT `name` FROM `contact` WHERE `uid`=$uid AND `dfrn-id`='%s' OR `issued-id`='%s'",
dbesc($dfrn_id),
dbesc($dfrn_id)
);
$name = $r[0]["name"];
$value = $row['v'];
$pos = strpos($value, ":");
$address = substr($value, $pos+1);
if (!$address) continue;
if (!$name) $name = $address;
$contacts[$address] = $name;
}
$contacts_json = json_encode($contacts);
// get nickname
$r = q("SELECT `username` FROM `user` WHERE `uid`=$uid");
$nickname = json_encode($r[0]["username"]);
// add javascript to start Jappix Mini
$a->page['htmlhead'] .= "";
return;
}
function jappixmini_login(&$a, &$o) {
// create client secret on login to be able to encrypt jabber passwords
if (!file_exists("addon/jappixmini/jappix")) return;
// for setDB, needed by jappixmini_addon_set_client_secret
$a->page['htmlhead'] .= ''."\r\n";
// for str_sha1, needed by jappixmini_addon_set_client_secret
$a->page['htmlhead'] .= ''."\r\n";
// for jappixmini_addon_set_client_secret
$a->page['htmlhead'] .= ''."\r\n";
// save hash of password
$o = str_replace("