fill and expire fcontact cache
This commit is contained in:
parent
f561a82647
commit
c534dd2969
5 changed files with 57 additions and 41 deletions
2
boot.php
2
boot.php
|
@ -9,7 +9,7 @@ require_once("include/pgettext.php");
|
||||||
|
|
||||||
define ( 'FRIENDIKA_VERSION', '2.2.1075' );
|
define ( 'FRIENDIKA_VERSION', '2.2.1075' );
|
||||||
define ( 'DFRN_PROTOCOL_VERSION', '2.21' );
|
define ( 'DFRN_PROTOCOL_VERSION', '2.21' );
|
||||||
define ( 'DB_UPDATE_VERSION', 1080 );
|
define ( 'DB_UPDATE_VERSION', 1081 );
|
||||||
|
|
||||||
define ( 'EOL', "<br />\r\n" );
|
define ( 'EOL', "<br />\r\n" );
|
||||||
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
|
define ( 'ATOM_TIME', 'Y-m-d\TH:i:s\Z' );
|
||||||
|
|
|
@ -531,6 +531,7 @@ CREATE TABLE IF NOT EXISTS `fcontact` (
|
||||||
`network` CHAR( 32 ) NOT NULL ,
|
`network` CHAR( 32 ) NOT NULL ,
|
||||||
`alias` CHAR( 255 ) NOT NULL ,
|
`alias` CHAR( 255 ) NOT NULL ,
|
||||||
`pubkey` TEXT NOT NULL ,
|
`pubkey` TEXT NOT NULL ,
|
||||||
|
`updated` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||||
INDEX ( `addr` ),
|
INDEX ( `addr` ),
|
||||||
INDEX ( `network` )
|
INDEX ( `network` )
|
||||||
) ENGINE = MYISAM DEFAULT CHARSET=utf8;
|
) ENGINE = MYISAM DEFAULT CHARSET=utf8;
|
||||||
|
|
|
@ -4,25 +4,11 @@ require_once('include/crypto.php');
|
||||||
require_once('include/items.php');
|
require_once('include/items.php');
|
||||||
|
|
||||||
function get_diaspora_key($uri) {
|
function get_diaspora_key($uri) {
|
||||||
$key = '';
|
|
||||||
|
|
||||||
logger('Fetching diaspora key for: ' . $uri);
|
logger('Fetching diaspora key for: ' . $uri);
|
||||||
|
|
||||||
$arr = lrdd($uri);
|
$r = find_diaspora_person_by_handle($uri);
|
||||||
|
if($r)
|
||||||
if(is_array($arr)) {
|
return $r['pubkey'];
|
||||||
foreach($arr as $a) {
|
|
||||||
if($a['@attributes']['rel'] === 'diaspora-public-key') {
|
|
||||||
$key = base64_decode($a['@attributes']['href']);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
|
|
||||||
if($key)
|
|
||||||
return rsatopem($key);
|
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -218,7 +204,7 @@ function diaspora_decode($importer,$xml) {
|
||||||
$encoding = $base->encoding;
|
$encoding = $base->encoding;
|
||||||
$alg = $base->alg;
|
$alg = $base->alg;
|
||||||
|
|
||||||
// Diaspora devs: I can't even begin to tell you how sucky this is. Read the freaking spec.
|
// Diaspora devs: I can't even begin to tell you how sucky this is. Please read the spec.
|
||||||
|
|
||||||
$signed_data = $data . (($data[-1] != "\n") ? "\n" : '') . '.' . base64url_encode($type) . "\n" . '.' . base64url_encode($encoding) . "\n" . '.' . base64url_encode($alg) . "\n";
|
$signed_data = $data . (($data[-1] != "\n") ? "\n" : '') . '.' . base64url_encode($type) . "\n" . '.' . base64url_encode($encoding) . "\n" . '.' . base64url_encode($alg) . "\n";
|
||||||
|
|
||||||
|
@ -278,28 +264,33 @@ function diaspora_get_contact_by_handle($uid,$handle) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function find_person_by_handle($handle) {
|
function find_diaspora_person_by_handle($handle) {
|
||||||
$r = q("select * from fcontact where network = '%s' and addr = '%s' limit 1",
|
$r = q("select * from fcontact where network = '%s' and addr = '%s' limit 1",
|
||||||
dbesc(NETWORK_DIASPORA),
|
dbesc(NETWORK_DIASPORA),
|
||||||
dbesc($handle)
|
dbesc($handle)
|
||||||
);
|
);
|
||||||
if(count($r))
|
if(count($r)) {
|
||||||
return $r[0];
|
// update record occasionally so it doesn't get stale
|
||||||
|
$d = strtotime($r[0]['updated'] . ' +00:00');
|
||||||
// we don't care about the uid, we just want to save an expensive webfinger probe
|
if($d < strtotime('now - 14 days')) {
|
||||||
$r = q("select * from contact where network = '%s' and addr = '%s' LIMIT 1",
|
q("delete from fcontact where id = %d limit 1",
|
||||||
dbesc(NETWORK_DIASPORA),
|
intval($r[0]['id'])
|
||||||
dbesc($handle)
|
|
||||||
);
|
);
|
||||||
if(count($r))
|
}
|
||||||
|
else
|
||||||
return $r[0];
|
return $r[0];
|
||||||
$r = probe_url($handle);
|
}
|
||||||
// need to cached this, perhaps in fcontact
|
require_once('include/Scrape.php');
|
||||||
if(count($r))
|
$r = probe_url($handle, PROBE_DIASPORA);
|
||||||
|
if((count($r)) && ($r['network'] === NETWORK_DIASPORA)) {
|
||||||
|
add_fcontact($r);
|
||||||
return ($r);
|
return ($r);
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function diaspora_request($importer,$xml) {
|
function diaspora_request($importer,$xml) {
|
||||||
|
|
||||||
$sender_handle = unxmlify($xml->sender_handle);
|
$sender_handle = unxmlify($xml->sender_handle);
|
||||||
|
@ -504,7 +495,7 @@ function diaspora_comment($importer,$xml,$msg) {
|
||||||
$key = $msg['key'];
|
$key = $msg['key'];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$person = find_person_by_handle($diaspora_handle);
|
$person = find_diaspora_person_by_handle($diaspora_handle);
|
||||||
|
|
||||||
if(is_array($person) && x($person,'pubkey'))
|
if(is_array($person) && x($person,'pubkey'))
|
||||||
$key = $person['pubkey'];
|
$key = $person['pubkey'];
|
||||||
|
@ -661,7 +652,7 @@ function diaspora_like($importer,$xml,$msg) {
|
||||||
$key = $msg['key'];
|
$key = $msg['key'];
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$person = find_person_by_handle($diaspora_handle);
|
$person = find_diaspora_person_by_handle($diaspora_handle);
|
||||||
if(is_array($person) && x($person,'pubkey'))
|
if(is_array($person) && x($person,'pubkey'))
|
||||||
$key = $person['pubkey'];
|
$key = $person['pubkey'];
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -693,3 +693,24 @@ function parse_xml_string($s,$strict = true) {
|
||||||
}
|
}
|
||||||
return $x;
|
return $x;
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
function add_fcontact($arr) {
|
||||||
|
|
||||||
|
$r = q("insert into fcontact ( `url`,`name`,`photo`,`request`,`nick`,`addr`,
|
||||||
|
`notify`,`poll`,`confirm`,`network`,`alias`,`pubkey` )
|
||||||
|
values('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')",
|
||||||
|
dbesc($arr['url']),
|
||||||
|
dbesc($arr['name']),
|
||||||
|
dbesc($arr['photo']),
|
||||||
|
dbesc($arr['request']),
|
||||||
|
dbesc($arr['nick']),
|
||||||
|
dbesc($arr['addr']),
|
||||||
|
dbesc($arr['notify']),
|
||||||
|
dbesc($arr['poll']),
|
||||||
|
dbesc($arr['confirm']),
|
||||||
|
dbesc($arr['network']),
|
||||||
|
dbesc($arr['alias']),
|
||||||
|
dbesc($arr['pubkey'])
|
||||||
|
);
|
||||||
|
return $r;
|
||||||
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
define( 'UPDATE_VERSION' , 1080 );
|
define( 'UPDATE_VERSION' , 1081 );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -671,3 +671,6 @@ function update_1079() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function update_1080() {
|
||||||
|
q("ALTER TABLE `fcontact` ADD `updated` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00'");
|
||||||
|
}
|
Loading…
Reference in a new issue