From 60a7952688aa41c25106b2a05cad1f9ecf223e48 Mon Sep 17 00:00:00 2001
From: Leberwurscht
The source archive jappix.zip does not exist. This is probably a violation of the Jappix License (see README).
'; + } +} + +function jappixmini_plugin_admin_post(&$a) { +} + +function jappixmini_module() {} +function jappixmini_init(&$a) { + // Here, other friendica sites can fetch the jabber address of local users. + // Because we do not want to publish the addresses publicly, they are encrypted so + // that only contacts can read it. + $encrypt_for = $_REQUEST["encrypt_for"]; + if ($encrypt_for) { + $r = q("SELECT * FROM `contact` WHERE LENGTH(`pubkey`) AND `dfrn-id` = '%s' LIMIT 1", + dbesc($encrypt_for) + ); + if (!count($r)) killme(); + + // get public key to encrypt address + $pubkey = $r[0]['pubkey']; + + // get jabber address + $uid = $r[0]['uid']; + $username = get_pconfig($uid, 'jappixmini', 'username'); + if (!$username) killme(); + $server = get_pconfig($uid, 'jappixmini', 'server'); + if (!$server) killme(); + + $address = $username."@".$server; + + // encrypt address + $encrypted = ""; + openssl_public_encrypt($address,$encrypted,$pubkey); + + // calculate hex representation of encrypted address + $hex = bin2hex($encrypted); + + // construct answer + $answer = Array("status"=>"ok", "encrypted_address"=>$hex); + + // return answer as json + echo json_encode($answer); + killme(); + } + + // If we have only a private key, other site sends encrypted request, we answer unencrypted. + $encrypted_for = $_REQUEST["encrypted_for"]; + if (!$encrypted_for) killme(); + + $encrypted_request_hex = $_REQUEST["encrypted_request"]; + if (!$encrypted_request_hex) killme(); + $encrypted_request = hex2bin($encrypted_request_hex); + + $r = q("SELECT * FROM `contact` WHERE LENGTH(`prvkey`) AND `issued-id` = '%s' LIMIT 1", + dbesc($encrypted_for) + ); + if (!count($r)) killme(); + + // decrypt request, validate it + $prvkey = $r[0]['prvkey']; + $decrypted_request = ""; + openssl_private_decrypt($encrypted_request, $decrypted_request, $prvkey); + + if ($decrypted_request!=$encrypted_for) killme(); + + // get jabber address + $uid = $r[0]['uid']; + $username = get_pconfig($uid, 'jappixmini', 'username'); + if (!$username) killme(); + $server = get_pconfig($uid, 'jappixmini', 'server'); + if (!$server) killme(); + + $address = $username."@".$server; + + // construct answer + $answer = Array("status"=>"ok", "address"=>$address); + + // return answer as json + echo json_encode($answer); + killme(); +} + +function jappixmini_settings(&$a, &$s) { + $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); + $encrypted_password = get_pconfig(local_user(),'jappixmini','encrypted-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"' : ''; + $activate = get_pconfig(local_user(),'jappixmini','activate'); + $activate = intval($activate) ? ' checked="checked"' : ''; + + $s .= '