create update record for accounts on directory server itself during profile changes, re-queue failed directory sync packets, fix account_id index in queue creation, be more selective about updating hubloc_connected (only when we're talking to the associated site). But we still need a way to flag dead accounts and these mechanisms won't cut it, because it isn't a requirement that channels communicate with anybody, except for contacting the directory when the account is created. I think we need to make every channel ping the directory once a month. Then we can find those that have not done so (after syncing with other directories). We can't have the directory just flag dead accounts as this would create a way for an anti-social attacker to become a directory server and mark all the accounts dead.

This commit is contained in:
friendica 2013-10-24 19:38:50 -07:00
parent 3da20b3797
commit 0b0bd3c207
4 changed files with 31 additions and 8 deletions

View File

@ -118,6 +118,7 @@ function update_directory_entry($ud) {
); );
} }
} }
} }
@ -128,7 +129,7 @@ function syncdirs($uid) {
logger('syncdirs', LOGGER_DEBUG); logger('syncdirs', LOGGER_DEBUG);
$p = q("select channel.channel_hash, channel_timezone, profile.* from profile left join channel on channel_id = uid where uid = %d and is_default = 1", $p = q("select channel.channel_hash, channel_address, channel_timezone, profile.* from profile left join channel on channel_id = uid where uid = %d and is_default = 1",
intval($uid) intval($uid)
); );
@ -199,6 +200,8 @@ function syncdirs($uid) {
} }
} }
// TODO send refresh zots to downstream directory servers $ud_hash = random_string();
update_modtime($ud_hash,$hash,$p[0]['channel_address'] . '@' . get_app()->get_hostname(),1);
} }

View File

@ -49,8 +49,25 @@ function directory_run($argv, $argc){
$packet = zot_build_packet($channel,'refresh'); $packet = zot_build_packet($channel,'refresh');
$z = zot_zot($url,$packet); $z = zot_zot($url,$packet);
// re-queue if unsuccessful // re-queue if unsuccessful
if(! $z['success']) {
$hash = random_string();
q("insert into outq ( outq_hash, outq_account, outq_channel, outq_posturl, outq_async, outq_created, outq_updated, outq_notify, outq_msg )
values ( '%s', %d, %d, '%s', %d, '%s', '%s', '%s', '%s' )",
dbesc($hash),
intval($channel['channel_account_id']),
intval($channel['channel_id']),
dbesc($url),
intval(1),
dbesc(datetime_convert()),
dbesc(datetime_convert()),
dbesc($packet),
dbesc('')
);
}
// Now update all the connections // Now update all the connections
proc_run('php','include/notifier.php','refresh_all',$channel['channel_id']); proc_run('php','include/notifier.php','refresh_all',$channel['channel_id']);

View File

@ -444,7 +444,7 @@ function notifier_run($argv, $argc){
$n = zot_build_packet($channel,$packet_type); $n = zot_build_packet($channel,$packet_type);
q("insert into outq ( outq_hash, outq_account, outq_channel, outq_posturl, outq_async, outq_created, outq_updated, outq_notify, outq_msg ) values ( '%s', %d, %d, '%s', %d, '%s', '%s', '%s', '%s' )", q("insert into outq ( outq_hash, outq_account, outq_channel, outq_posturl, outq_async, outq_created, outq_updated, outq_notify, outq_msg ) values ( '%s', %d, %d, '%s', %d, '%s', '%s', '%s', '%s' )",
dbesc($hash), dbesc($hash),
intval($channel['channel_account']), intval($channel['channel_account_id']),
intval($channel['channel_id']), intval($channel['channel_id']),
dbesc($hub['hubloc_callback']), dbesc($hub['hubloc_callback']),
intval(1), intval(1),

View File

@ -604,11 +604,14 @@ function import_xchan($arr,$ud_flags = 1) {
); );
if($r) { if($r) {
logger('import_xchan: hub exists: ' . $location['url']); logger('import_xchan: hub exists: ' . $location['url']);
// update connection timestamp // update connection timestamp if this is the site we're talking to
q("update hubloc set hubloc_connected = '%s' where hubloc_id = %d limit 1", if($location['url'] == $arr['site']['url']) {
dbesc(datetime_convert()), q("update hubloc set hubloc_connected = '%s', hubloc_updated = '%s' where hubloc_id = %d limit 1",
intval($r[0]['hubloc_id']) dbesc(datetime_convert()),
); dbesc(datetime_convert()),
intval($r[0]['hubloc_id'])
);
}
if((($r[0]['hubloc_flags'] & HUBLOC_FLAGS_PRIMARY) && (! $location['primary'])) if((($r[0]['hubloc_flags'] & HUBLOC_FLAGS_PRIMARY) && (! $location['primary']))
|| ((! ($r[0]['hubloc_flags'] & HUBLOC_FLAGS_PRIMARY)) && ($location['primary']))) { || ((! ($r[0]['hubloc_flags'] & HUBLOC_FLAGS_PRIMARY)) && ($location['primary']))) {
$r = q("update hubloc set hubloc_flags = (hubloc_flags ^ %d), hubloc_updated = '%s' where hubloc_id = %d limit 1", $r = q("update hubloc set hubloc_flags = (hubloc_flags ^ %d), hubloc_updated = '%s' where hubloc_id = %d limit 1",