mirror of
https://github.com/friendica/friendica
synced 2024-12-23 10:40:16 +00:00
Automatically update contact data.
This commit is contained in:
parent
95945ecae6
commit
fe137a92ef
4 changed files with 48 additions and 15 deletions
|
@ -1,5 +1,30 @@
|
||||||
<?php
|
<?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
|
// Takes a $uid and a url/handle and adds a new contact
|
||||||
|
@ -120,9 +145,10 @@ function new_contact($uid,$url,$interactive = false) {
|
||||||
// the poll url is more reliable than the profile url, as we may have
|
// the poll url is more reliable than the profile url, as we may have
|
||||||
// indirect links or webfinger links
|
// 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),
|
intval($uid),
|
||||||
dbesc($ret['poll']),
|
dbesc($ret['poll']),
|
||||||
|
dbesc(normalise_link($ret['poll'])),
|
||||||
dbesc($ret['network'])
|
dbesc($ret['network'])
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -136,8 +162,8 @@ function new_contact($uid,$url,$interactive = false) {
|
||||||
intval($uid)
|
intval($uid)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else {
|
} else {
|
||||||
|
|
||||||
|
|
||||||
// check service class limits
|
// check service class limits
|
||||||
|
|
|
@ -2064,11 +2064,11 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
|
||||||
|| ($contact['rel'] == CONTACT_IS_SHARING && strlen($contact['pubkey']))) {
|
|| ($contact['rel'] == CONTACT_IS_SHARING && strlen($contact['pubkey']))) {
|
||||||
openssl_public_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['pubkey']);
|
openssl_public_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['pubkey']);
|
||||||
openssl_public_decrypt($challenge,$postvars['challenge'],$contact['pubkey']);
|
openssl_public_decrypt($challenge,$postvars['challenge'],$contact['pubkey']);
|
||||||
}
|
} elseif($contact['prvkey']) {
|
||||||
else {
|
|
||||||
openssl_private_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['prvkey']);
|
openssl_private_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['prvkey']);
|
||||||
openssl_private_decrypt($challenge,$postvars['challenge'],$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, 0, strpos($final_dfrn_id, '.'));
|
||||||
|
|
||||||
|
@ -2076,7 +2076,7 @@ function dfrn_deliver($owner,$contact,$atom, $dissolve = false) {
|
||||||
$final_dfrn_id = substr($final_dfrn_id,2);
|
$final_dfrn_id = substr($final_dfrn_id,2);
|
||||||
|
|
||||||
if($final_dfrn_id != $orig_id) {
|
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
|
// did not decode properly - cannot trust this site
|
||||||
return 3;
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
require_once("boot.php");
|
require_once("boot.php");
|
||||||
|
require_once("include/follow.php");
|
||||||
|
require_once("include/Scrape.php");
|
||||||
|
|
||||||
function RemoveReply($subject) {
|
function RemoveReply($subject) {
|
||||||
while (in_array(strtolower(substr($subject, 0, 3)), array("re:", "aw:")))
|
while (in_array(strtolower(substr($subject, 0, 3)), array("re:", "aw:")))
|
||||||
|
@ -129,6 +131,10 @@ function onepoll_run(&$argv, &$argc){
|
||||||
: datetime_convert('UTC','UTC',$contact['last-update'], ATOM_TIME)
|
: 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['network'] === NETWORK_DFRN) {
|
||||||
|
|
||||||
|
|
||||||
|
@ -231,11 +237,11 @@ function onepoll_run(&$argv, &$argc){
|
||||||
if(($contact['duplex']) && strlen($contact['prvkey'])) {
|
if(($contact['duplex']) && strlen($contact['prvkey'])) {
|
||||||
openssl_private_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['prvkey']);
|
openssl_private_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['prvkey']);
|
||||||
openssl_private_decrypt($challenge,$postvars['challenge'],$contact['prvkey']);
|
openssl_private_decrypt($challenge,$postvars['challenge'],$contact['prvkey']);
|
||||||
}
|
} elseif($contact['pubkey']) {
|
||||||
else {
|
|
||||||
openssl_public_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['pubkey']);
|
openssl_public_decrypt($sent_dfrn_id,$final_dfrn_id,$contact['pubkey']);
|
||||||
openssl_public_decrypt($challenge,$postvars['challenge'],$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, 0, strpos($final_dfrn_id, '.'));
|
||||||
|
|
||||||
|
@ -265,7 +271,8 @@ function onepoll_run(&$argv, &$argc){
|
||||||
|
|
||||||
$stat_writeable = ((($contact['notify']) && ($contact['rel'] == CONTACT_IS_FOLLOWER || $contact['rel'] == CONTACT_IS_FRIEND)) ? 1 : 0);
|
$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;
|
$stat_writeable = 1;
|
||||||
|
|
||||||
if($stat_writeable != $contact['writable']) {
|
if($stat_writeable != $contact['writable']) {
|
||||||
|
|
Loading…
Reference in a new issue