some backend work for the remaining missing bits of mod_hubman - this is still a fair ways from being complete and is not ready for prime time. Basically we'll let a channel send out a public message saying "these are my currently approved locations" and anything that isn't in the list will be marked deleted. We'll send out this message when locations change somehow - either through direct personal involvement (hub revoke, change primary, channel import) or during a system rename or "find bad/obsolete hublocs" activity. This way we won't have clones sending back location info we just got rid of and re-importing the bad entries.

This commit is contained in:
friendica
2014-09-13 16:00:09 -07:00
parent b1809f5f0c
commit 0350b76d85
4 changed files with 258 additions and 6 deletions

View File

@@ -42,4 +42,58 @@ function prune_hub_reinstalls() {
}
}
}
}
}
function remove_obsolete_hublocs() {
// Get rid of any hublocs which are ours but aren't valid anymore -
// e.g. they point to a different and perhaps transient URL that we aren't using.
// I need to stress that this shouldn't happen. fix_system_urls() fixes hublocs
// when it discovers the URL has changed. So it's unclear how we could end up
// with URLs pointing to the old site name. But it happens. This may be an artifact
// of an old bug or maybe a regression in some newer code. In any event, they
// mess up communications and we have to take action if we find any.
// First make sure we have any hublocs (at all) with this URL and sitekey.
// We don't want to perform this operation while somebody is in the process
// of renaming their hub or installing certs.
$r = q("select hubloc_id from hubloc where hubloc_url = '%s' and hubloc_sitekey = '%s'",
dbesc(z_root()),
dbesc(get_config('system','pubkey'))
);
if((! $r) || (! count($r)))
return;
// Good. We have at least one valid hubloc.
// Do we have any invalid ones?
$r = q("select hubloc_id from hubloc where hubloc_sitekey = '%s' and hubloc_url != '%s'",
dbesc(get_config('system','pubkey')),
dbesc(z_root())
);
if(! $r)
return;
logger('remove_obsolete_hublocs: removing ' . count($r) . ' hublocs.');
// We've got invalid hublocs. Get rid of them.
$r = q("delete from hubloc where hubloc_sitekey = '%s' and hubloc_url != '%s'",
dbesc(get_config('system','pubkey')),
dbesc(z_root())
);
// We should probably tell everybody... But we don't have an easy way to do this
// for the entire site. We'd have to do a channel at a time.
// They will find out anyway - it just might take a little while.
// FIXME we probably also need to check that the sys channel has a valid hubloc
// and re-create it if it doesn't.
}