<?php
+function update_contact($id) {
+ $r = q("SELECT `url`, `network` FROM `contact` WHERE `id` = %d", intval($id));
+ if (!$r)
+ return;
+
+ $ret = probe_url($r[0]["url"]);
+
+ // If probe_url fails the network code will be different
+ if ($ret["network"] != $r[0]["network"])
+ return;
+
+ q("UPDATE `contact` SET `url` = '%s', `nurl` = '%s', `addr` = '%s', `alias` = '%s', `batch` = '%s', `notify` = '%s', `poll` = '%s', `poco` = '%s', `name` = '%s', `nick` = '%s' WHERE `id` = %d",
+ dbesc($ret['url']),
+ dbesc(normalise_link($ret['url'])),
+ dbesc($ret['addr']),
+ dbesc($ret['alias']),
+ dbesc($ret['batch']),
+ dbesc($ret['notify']),
+ dbesc($ret['poll']),
+ dbesc($ret['poco']),
+ dbesc($ret['name']),
+ dbesc($ret['nick']),
+ intval($id)
+ );
+}
//
// Takes a $uid and a url/handle and adds a new contact
// the poll url is more reliable than the profile url, as we may have
// indirect links or webfinger links
- $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `poll` = '%s' AND `network` = '%s' LIMIT 1",
+ $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `poll` IN ('%s', '%s') AND `network` = '%s' LIMIT 1",
intval($uid),
dbesc($ret['poll']),
+ dbesc(normalise_link($ret['poll'])),
dbesc($ret['network'])
);
intval($uid)
);
}
- }
- else {
+
+ } else {
// check service class limits
|| ($contact['rel'] == CONTACT_IS_SHARING && strlen($contact['pubkey']))) {
openssl_public_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['pubkey']);
openssl_public_decrypt($challenge,$postvars['challenge'],$contact['pubkey']);
- }
- else {
+ } elseif($contact['prvkey']) {
openssl_private_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['prvkey']);
openssl_private_decrypt($challenge,$postvars['challenge'],$contact['prvkey']);
- }
+ } else
+ logger("No private or public key for contact ".$contact['id']." ".$contact['url']);
$final_dfrn_id = substr($final_dfrn_id, 0, strpos($final_dfrn_id, '.'));
$final_dfrn_id = substr($final_dfrn_id,2);
if($final_dfrn_id != $orig_id) {
- logger('dfrn_deliver: wrong dfrn_id.');
+ logger('dfrn_deliver: wrong dfrn_id. Original: '.$orig_id.' Target: '.$final_dfrn_id.' Test: '.$test);
// did not decode properly - cannot trust this site
return 3;
}
<?php
require_once("boot.php");
+require_once("include/follow.php");
+require_once("include/Scrape.php");
function RemoveReply($subject) {
while (in_array(strtolower(substr($subject, 0, 3)), array("re:", "aw:")))
: datetime_convert('UTC','UTC',$contact['last-update'], ATOM_TIME)
);
+ // Update the contact entry
+ if(($contact['network'] === NETWORK_OSTATUS) || ($contact['network'] === NETWORK_DIASPORA) || ($contact['network'] === NETWORK_DFRN))
+ update_contact($contact["id"]);
+
if($contact['network'] === NETWORK_DFRN) {
if(($contact['duplex']) && strlen($contact['prvkey'])) {
openssl_private_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['prvkey']);
openssl_private_decrypt($challenge,$postvars['challenge'],$contact['prvkey']);
- }
- else {
+ } elseif($contact['pubkey']) {
openssl_public_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['pubkey']);
openssl_public_decrypt($challenge,$postvars['challenge'],$contact['pubkey']);
- }
+ } else
+ logger("No private or public key for contact ".$contact['id']." ".$contact['url']);
$final_dfrn_id = substr($final_dfrn_id, 0, strpos($final_dfrn_id, '.'));
$final_dfrn_id = substr($final_dfrn_id,2);
if($final_dfrn_id != $orig_id) {
- logger('poller: ID did not decode: ' . $contact['id'] . ' orig: ' . $orig_id . ' final: ' . $final_dfrn_id);
- // did not decode properly - cannot trust this site
+ logger('poller: ID did not decode: ' . $contact['id'] . ' orig: ' . $orig_id . ' final: ' . $final_dfrn_id);
+ // did not decode properly - cannot trust this site
return;
}
$xml = post_url($contact['poll'],$postvars);
}
- elseif(($contact['network'] === NETWORK_OSTATUS)
+ elseif(($contact['network'] === NETWORK_OSTATUS)
|| ($contact['network'] === NETWORK_DIASPORA)
|| ($contact['network'] === NETWORK_FEED) ) {
$stat_writeable = ((($contact['notify']) && ($contact['rel'] == CONTACT_IS_FOLLOWER || $contact['rel'] == CONTACT_IS_FRIEND)) ? 1 : 0);
- if($contact['network'] === NETWORK_OSTATUS && get_pconfig($importer_uid,'system','ostatus_autofriend'))
+ // Contacts from OStatus are always writable
+ if($contact['network'] === NETWORK_OSTATUS)
$stat_writeable = 1;
if($stat_writeable != $contact['writable']) {