<?php
-/*
- * Module: dfrn_confirm
+/**
+ * @file mod/dfrn_confirm.php
+ * @brief Module: dfrn_confirm
* Purpose: Friendship acceptance for DFRN contacts
- *
+ *.
* There are two possible entry points and three scenarios.
- *
+ *.
* 1. A form was submitted by our user approving a friendship that originated elsewhere.
* This may also be called from dfrn_request to automatically approve a friendship.
*
* 2. We may be the target or other side of the conversation to scenario 1, and will
* interact with that process on our own user's behalf.
- *
+ *.
+ * @see PDF with dfrn specs: https://github.com/friendica/friendica/blob/master/spec/dfrn2.pdf
+ * You also find a graphic which describes the confirmation process at
+ * https://github.com/friendica/friendica/blob/master/spec/dfrn2_contact_confirmation.png
*/
require_once('include/enotify.php');
require_once('include/group.php');
+require_once('include/Probe.php');
function dfrn_confirm_post(&$a,$handsfree = null) {
if(is_array($handsfree)) {
- /**
+ /*
* We were called directly from dfrn_request due to automatic friend acceptance.
* Any $_POST parameters we may require are supplied in the $handsfree array.
*
$node = $a->argv[1];
}
- /**
+ /*
*
* Main entry point. Scenario 1. Our user received a friend request notification (perhaps
* from another site) and clicked 'Approve'.
$activity = ((x($_POST,'activity')) ? intval($_POST['activity']) : 0 );
}
- /**
+ /*
*
* Ensure that dfrn_id has precedence when we go to find the contact record.
* We only want to search based on contact id if there is no dfrn_id,
logger('Confirming follower with contact_id: ' . $cid);
- /**
+ /*
*
* The other person will have been issued an ID when they first requested friendship.
* Locate their record. At this time, their record will have both pending and blocked set to 1.
intval($uid)
);
- if(! count($r)) {
+ if (! dbm::is_result($r)) {
logger('Contact not found in DB.');
notice( t('Contact not found.') . EOL );
notice( t('This may occasionally happen if contact was requested by both persons and it has already been approved.') . EOL );
if($network === NETWORK_DFRN) {
- /**
+ /*
*
* Generate a key pair for all further communications with this person.
* We have a keypair for every contact, and a site key for unknown people.
$params = array();
- /**
+ /*
*
* Per the DFRN protocol, we will verify both ends by encrypting the dfrn_id with our
* site private key (person on the other end can decrypt it with our site public key).
$params['public_key'] = $public_key;
- $my_url = $a->get_baseurl() . '/profile/' . $user[0]['nickname'];
+ $my_url = App::get_baseurl() . '/profile/' . $user[0]['nickname'];
openssl_public_encrypt($my_url, $params['source_url'], $site_pubkey);
$params['source_url'] = bin2hex($params['source_url']);
logger('Confirm: posting data to ' . $dfrn_confirm . ': ' . print_r($params,true), LOGGER_DATA);
- /**
+ /*
*
* POST all this stuff to the other site.
* Temporarily raise the network timeout to 120 seconds because the default 60
$poll = (($contact['poll']) ? $contact['poll'] : '');
if((! $contact['notify']) || (! $contact['poll'])) {
- $arr = lrdd($contact['url']);
+ $arr = Probe::lrdd($contact['url']);
if(count($arr)) {
foreach($arr as $link) {
if($link['@attributes']['rel'] === 'salmon')
$r = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1",
intval($contact_id)
);
- if(count($r))
+ if (dbm::is_result($r))
$contact = $r[0];
else
$contact = null;
if(($contact) && ($contact['network'] === NETWORK_DIASPORA)) {
require_once('include/diaspora.php');
- $ret = diaspora::send_share($user[0],$r[0]);
+ $ret = Diaspora::send_share($user[0],$r[0]);
logger('share returns: ' . $ret);
}
intval($uid)
);
- if((count($r)) && ($r[0]['hide-friends'] == 0) && ($activity) && (! $hidden)) {
+ if((dbm::is_result($r)) && ($r[0]['hide-friends'] == 0) && ($activity) && (! $hidden)) {
require_once('include/items.php');
$i = item_store($arr);
if($i)
- proc_run('php',"include/notifier.php","activity","$i");
+ proc_run(PRIORITY_HIGH, "include/notifier.php", "activity", $i);
}
}
}
// Let's send our user to the contact editor in case they want to
// do anything special with this new friend.
- if($handsfree === null)
- goaway($a->get_baseurl() . '/contacts/' . intval($contact_id));
- else
+ if ($handsfree === null) {
+ goaway(App::get_baseurl() . '/contacts/' . intval($contact_id));
+ } else {
return;
+ }
//NOTREACHED
}
- /**
+ /*
*
*
* End of Scenario 1. [Local confirmation of remote friend request].
*
*/
- if(x($_POST,'source_url')) {
+ if (x($_POST,'source_url')) {
// We are processing an external confirmation to an introduction created by our user.
// If $aes_key is set, both of these items require unpacking from the hex transport encoding.
- if(x($aes_key)) {
+ if (x($aes_key)) {
$aes_key = hex2bin($aes_key);
$public_key = hex2bin($public_key);
}
$r = q("SELECT * FROM `user` WHERE `nickname` = '%s' LIMIT 1",
dbesc($node));
- if(! count($r)) {
+ if (! dbm::is_result($r)) {
$message = sprintf(t('No user record found for \'%s\' '), $node);
xml_status(3,$message); // failure
// NOTREACHED
$r = q("SELECT * FROM `contact` WHERE `dfrn-id` = '%s' LIMIT 1",
dbesc($decrypted_dfrn_id)
);
- if(count($r)) {
+ if (dbm::is_result($r)) {
$message = t('The ID provided by your system is a duplicate on our system. It should work if you try again.');
xml_status(1,$message); // Birthday paradox - duplicate dfrn-id
// NOTREACHED
dbesc($dfrn_pubkey),
intval($dfrn_record)
);
- if(! count($r)) {
+ if (! dbm::is_result($r)) {
$message = t('Unable to set your contact credentials on our system.');
xml_status(3,$message);
}
$r = q("SELECT `photo` FROM `contact` WHERE `id` = %d LIMIT 1",
intval($dfrn_record));
- if(count($r))
+ if (dbm::is_result($r)) {
$photo = $r[0]['photo'];
- else
- $photo = $a->get_baseurl() . '/images/person-175.jpg';
+ } else {
+ $photo = App::get_baseurl() . '/images/person-175.jpg';
+ }
require_once("include/Photo.php");
logger('dfrn_confirm: request - photos imported');
$new_relation = CONTACT_IS_SHARING;
- if(($relation == CONTACT_IS_FOLLOWER) || ($duplex))
+ if (($relation == CONTACT_IS_FOLLOWER) || ($duplex)) {
$new_relation = CONTACT_IS_FRIEND;
+ }
- if(($relation == CONTACT_IS_FOLLOWER) && ($duplex))
+ if (($relation == CONTACT_IS_FOLLOWER) && ($duplex)) {
$duplex = 0;
+ }
$r = q("UPDATE `contact` SET
`rel` = %d,
dbesc(NETWORK_DFRN),
intval($dfrn_record)
);
- if($r === false) { // indicates schema is messed up or total db failure
+ if ($r === false) { // indicates schema is messed up or total db failure
$message = t('Unable to update your contact profile details on our system');
xml_status(3,$message);
}
intval($dfrn_record)
);
- if(count($r))
+ if (dbm::is_result($r))
$combined = $r[0];
- if((count($r)) && ($r[0]['notify-flags'] & NOTIFY_CONFIRM)) {
+ if((dbm::is_result($r)) && ($r[0]['notify-flags'] & NOTIFY_CONFIRM)) {
$mutual = ($new_relation == CONTACT_IS_FRIEND);
notification(array(
'type' => NOTIFY_CONFIRM,
'to_name' => $r[0]['username'],
'to_email' => $r[0]['email'],
'uid' => $r[0]['uid'],
- 'link' => $a->get_baseurl() . '/contacts/' . $dfrn_record,
+ 'link' => App::get_baseurl() . '/contacts/' . $dfrn_record,
'source_name' => ((strlen(stripslashes($r[0]['name']))) ? stripslashes($r[0]['name']) : t('[Name Withheld]')),
'source_link' => $r[0]['url'],
'source_photo' => $r[0]['photo'],
intval($local_uid)
);
- if((count($r)) && ($r[0]['hide-friends'] == 0)) {
+ if((dbm::is_result($r)) && ($r[0]['hide-friends'] == 0)) {
require_once('include/items.php');
$i = item_store($arr);
if($i)
- proc_run('php',"include/notifier.php","activity","$i");
+ proc_run(PRIORITY_HIGH, "include/notifier.php", "activity", $i);
}
}