WebSub fixes
More fixes related to https://github.com/friendica/friendica/issues/6128 * Bug when using direct ATOM URL, which ends with .atom after nick name * Bug when callback URL already has some ?query=parameters (which is quite usual) Slight refactoring
This commit is contained in:
parent
921094017c
commit
51f0d52100
1 changed files with 21 additions and 14 deletions
|
@ -50,13 +50,15 @@ function pubsubhubbub_init(App $a) {
|
||||||
|
|
||||||
Logger::log("$hub_mode request from " . $_SERVER['REMOTE_ADDR']);
|
Logger::log("$hub_mode request from " . $_SERVER['REMOTE_ADDR']);
|
||||||
|
|
||||||
// get the nick name from the topic, a bit hacky but needed as a fallback
|
|
||||||
$nick = substr(strrchr($hub_topic, "/"), 1);
|
|
||||||
|
|
||||||
// Normally the url should now contain the nick name as last part of the url
|
|
||||||
if ($a->argc > 1) {
|
if ($a->argc > 1) {
|
||||||
|
// Normally the url should now contain the nick name as last part of the url
|
||||||
$nick = $a->argv[1];
|
$nick = $a->argv[1];
|
||||||
|
} else {
|
||||||
|
// Get the nick name from the topic as a fallback
|
||||||
|
$nick = $hub_topic;
|
||||||
}
|
}
|
||||||
|
// Extract nick name and strip any .atom extension
|
||||||
|
$nick = basename($nick, '.atom');
|
||||||
|
|
||||||
if (!$nick) {
|
if (!$nick) {
|
||||||
Logger::log('Bad hub_topic=$hub_topic, ignoring.');
|
Logger::log('Bad hub_topic=$hub_topic, ignoring.');
|
||||||
|
@ -97,18 +99,23 @@ function pubsubhubbub_init(App $a) {
|
||||||
|
|
||||||
// do subscriber verification according to the PuSH protocol
|
// do subscriber verification according to the PuSH protocol
|
||||||
$hub_challenge = Strings::getRandomHex(40);
|
$hub_challenge = Strings::getRandomHex(40);
|
||||||
$params = 'hub.mode=' .
|
|
||||||
($subscribe == 1 ? 'subscribe' : 'unsubscribe') .
|
|
||||||
'&hub.topic=' . urlencode($hub_topic) .
|
|
||||||
'&hub.challenge=' . $hub_challenge .
|
|
||||||
'&hub.lease_seconds=604800' .
|
|
||||||
'&hub.verify_token=' . $hub_verify_token;
|
|
||||||
|
|
||||||
// lease time is hard coded to one week (in seconds)
|
$params = http_build_query([
|
||||||
// we don't actually enforce the lease time because GNU
|
'hub.mode' => $subscribe == 1 ? 'subscribe' : 'unsubscribe',
|
||||||
// Social/StatusNet doesn't honour it (yet)
|
'hub.topic' => $hub_topic,
|
||||||
|
'hub.challenge' => $hub_challenge,
|
||||||
|
'hub.verify_token' => $hub_verify_token,
|
||||||
|
|
||||||
$fetchResult = Network::fetchUrlFull($hub_callback . "?" . $params);
|
// lease time is hard coded to one week (in seconds)
|
||||||
|
// we don't actually enforce the lease time because GNU
|
||||||
|
// Social/StatusNet doesn't honour it (yet)
|
||||||
|
'hub.lease_seconds' => 604800,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$hub_callback = rtrim($hub_callback, ' ?&#');
|
||||||
|
$separator = parse_url($hub_callback, PHP_URL_QUERY) === null ? '?' : '&';
|
||||||
|
|
||||||
|
$fetchResult = Network::fetchUrlFull($hub_callback . $separator . $params);
|
||||||
$body = $fetchResult->getBody();
|
$body = $fetchResult->getBody();
|
||||||
$ret = $fetchResult->getReturnCode();
|
$ret = $fetchResult->getReturnCode();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue