|
|
|
@ -28,14 +28,14 @@ function dfrn_notify_post(App $a) {
|
|
|
|
|
$prv = (($page == 2) ? 1 : 0); |
|
|
|
|
|
|
|
|
|
$writable = (-1); |
|
|
|
|
if($dfrn_version >= 2.21) { |
|
|
|
|
if ($dfrn_version >= 2.21) { |
|
|
|
|
$writable = (($perm === 'rw') ? 1 : 0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$direction = (-1); |
|
|
|
|
if(strpos($dfrn_id,':') == 1) { |
|
|
|
|
$direction = intval(substr($dfrn_id,0,1)); |
|
|
|
|
$dfrn_id = substr($dfrn_id,2); |
|
|
|
|
if (strpos($dfrn_id, ':') == 1) { |
|
|
|
|
$direction = intval(substr($dfrn_id, 0, 1)); |
|
|
|
|
$dfrn_id = substr($dfrn_id, 2); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$r = q("SELECT * FROM `challenge` WHERE `dfrn-id` = '%s' AND `challenge` = '%s' LIMIT 1", |
|
|
|
@ -70,9 +70,11 @@ function dfrn_notify_post(App $a) {
|
|
|
|
|
break; // NOTREACHED |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// be careful - $importer will contain both the contact information for the contact |
|
|
|
|
// sending us the post, and also the user information for the person receiving it. |
|
|
|
|
// since they are mixed together, it is easy to get them confused. |
|
|
|
|
/* |
|
|
|
|
* be careful - $importer will contain both the contact information for the contact |
|
|
|
|
* sending us the post, and also the user information for the person receiving it. |
|
|
|
|
* since they are mixed together, it is easy to get them confused. |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
$r = q("SELECT `contact`.*, `contact`.`uid` AS `importer_uid`, |
|
|
|
|
`contact`.`pubkey` AS `cpubkey`, |
|
|
|
@ -100,15 +102,16 @@ function dfrn_notify_post(App $a) {
|
|
|
|
|
|
|
|
|
|
logger("Remote rino version: ".$rino_remote." for ".$importer["url"], LOGGER_DEBUG); |
|
|
|
|
|
|
|
|
|
if((($writable != (-1)) && ($writable != $importer['writable'])) || ($importer['forum'] != $forum) || ($importer['prv'] != $prv)) { |
|
|
|
|
if ((($writable != (-1)) && ($writable != $importer['writable'])) || ($importer['forum'] != $forum) || ($importer['prv'] != $prv)) { |
|
|
|
|
q("UPDATE `contact` SET `writable` = %d, forum = %d, prv = %d WHERE `id` = %d", |
|
|
|
|
intval(($writable == (-1)) ? $importer['writable'] : $writable), |
|
|
|
|
intval($forum), |
|
|
|
|
intval($prv), |
|
|
|
|
intval($importer['id']) |
|
|
|
|
); |
|
|
|
|
if($writable != (-1)) |
|
|
|
|
if ($writable != (-1)) { |
|
|
|
|
$importer['writable'] = $writable; |
|
|
|
|
} |
|
|
|
|
$importer['forum'] = $page; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -120,7 +123,7 @@ function dfrn_notify_post(App $a) {
|
|
|
|
|
logger('dfrn_notify: received notify from ' . $importer['name'] . ' for ' . $importer['username']); |
|
|
|
|
logger('dfrn_notify: data: ' . $data, LOGGER_DATA); |
|
|
|
|
|
|
|
|
|
if($dissolve == 1) { |
|
|
|
|
if ($dissolve == 1) { |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
* Relationship is dissolved permanently |
|
|
|
@ -133,7 +136,7 @@ function dfrn_notify_post(App $a) {
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// @TODO remove this old-lost code then? |
|
|
|
|
// If we are setup as a soapbox we aren't accepting input from this person |
|
|
|
|
// This behaviour is deactivated since it really doesn't make sense to even disallow comments |
|
|
|
|
// The check if someone is a friend or simply a follower is done in a later place so it needn't to be done here |
|
|
|
@ -149,7 +152,7 @@ function dfrn_notify_post(App $a) {
|
|
|
|
|
|
|
|
|
|
logger("Local rino version: ". $rino, LOGGER_DEBUG); |
|
|
|
|
|
|
|
|
|
if(strlen($key)) { |
|
|
|
|
if (strlen($key)) { |
|
|
|
|
|
|
|
|
|
// if local rino is lower than remote rino, abort: should not happen! |
|
|
|
|
// but only for $remote_rino > 1, because old code did't send rino version |
|
|
|
@ -162,19 +165,16 @@ function dfrn_notify_post(App $a) {
|
|
|
|
|
logger('rino: md5 raw key: ' . md5($rawkey)); |
|
|
|
|
$final_key = ''; |
|
|
|
|
|
|
|
|
|
if($dfrn_version >= 2.1) { |
|
|
|
|
if((($importer['duplex']) && strlen($importer['cprvkey'])) || (! strlen($importer['cpubkey']))) { |
|
|
|
|
if ($dfrn_version >= 2.1) { |
|
|
|
|
if ((($importer['duplex']) && strlen($importer['cprvkey'])) || (! strlen($importer['cpubkey']))) { |
|
|
|
|
openssl_private_decrypt($rawkey,$final_key,$importer['cprvkey']); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
} else { |
|
|
|
|
openssl_public_decrypt($rawkey,$final_key,$importer['cpubkey']); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
if((($importer['duplex']) && strlen($importer['cpubkey'])) || (! strlen($importer['cprvkey']))) { |
|
|
|
|
} else { |
|
|
|
|
if ((($importer['duplex']) && strlen($importer['cpubkey'])) || (! strlen($importer['cprvkey']))) { |
|
|
|
|
openssl_public_decrypt($rawkey,$final_key,$importer['cpubkey']); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
} else { |
|
|
|
|
openssl_private_decrypt($rawkey,$final_key,$importer['cprvkey']); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -184,19 +184,23 @@ function dfrn_notify_post(App $a) {
|
|
|
|
|
switch($rino_remote) { |
|
|
|
|
case 0: |
|
|
|
|
case 1: |
|
|
|
|
// we got a key. old code send only the key, without RINO version. |
|
|
|
|
// we assume RINO 1 if key and no RINO version |
|
|
|
|
/* |
|
|
|
|
* we got a key. old code send only the key, without RINO version. |
|
|
|
|
* we assume RINO 1 if key and no RINO version |
|
|
|
|
*/ |
|
|
|
|
$data = aes_decrypt(hex2bin($data),$final_key); |
|
|
|
|
break; |
|
|
|
|
case 2: |
|
|
|
|
try { |
|
|
|
|
$data = Crypto::decrypt(hex2bin($data),$final_key); |
|
|
|
|
} catch (InvalidCiphertext $ex) { // VERY IMPORTANT |
|
|
|
|
// Either: |
|
|
|
|
// 1. The ciphertext was modified by the attacker, |
|
|
|
|
// 2. The key is wrong, or |
|
|
|
|
// 3. $ciphertext is not a valid ciphertext or was corrupted. |
|
|
|
|
// Assume the worst. |
|
|
|
|
/* |
|
|
|
|
* Either: |
|
|
|
|
* 1. The ciphertext was modified by the attacker, |
|
|
|
|
* 2. The key is wrong, or |
|
|
|
|
* 3. $ciphertext is not a valid ciphertext or was corrupted. |
|
|
|
|
* Assume the worst. |
|
|
|
|
*/ |
|
|
|
|
logger('The ciphertext has been tampered with!'); |
|
|
|
|
xml_status(0,'The ciphertext has been tampered with!'); |
|
|
|
|
} catch (Ex\CryptoTestFailed $ex) { |
|
|
|
@ -227,8 +231,10 @@ function dfrn_notify_content(App $a) {
|
|
|
|
|
|
|
|
|
|
if(x($_GET,'dfrn_id')) { |
|
|
|
|
|
|
|
|
|
// initial communication from external contact, $direction is their direction. |
|
|
|
|
// If this is a duplex communication, ours will be the opposite. |
|
|
|
|
/* |
|
|
|
|
* initial communication from external contact, $direction is their direction. |
|
|
|
|
* If this is a duplex communication, ours will be the opposite. |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
$dfrn_id = notags(trim($_GET['dfrn_id'])); |
|
|
|
|
$dfrn_version = (float) $_GET['dfrn_version']; |
|
|
|
@ -318,7 +324,6 @@ function dfrn_notify_content(App $a) {
|
|
|
|
|
$rino = get_config('system','rino_encrypt'); |
|
|
|
|
$rino = intval($rino); |
|
|
|
|
// use RINO1 if mcrypt isn't installed and RINO2 was selected |
|
|
|
|
/// @TODO Define a code-standard: and/AND/&& are around |
|
|
|
|
if ($rino == 2 && !function_exists('mcrypt_create_iv')) { |
|
|
|
|
$rino = 1; |
|
|
|
|
} |
|
|
|
|