|
|
|
@ -7,7 +7,7 @@ require_once('include/crypto.php');
|
|
|
|
|
function get_salmon_key($uri,$keyhash) { |
|
|
|
|
$ret = array(); |
|
|
|
|
|
|
|
|
|
logger('Fetching salmon key'); |
|
|
|
|
logger('Fetching salmon key for '.$uri); |
|
|
|
|
|
|
|
|
|
$arr = lrdd($uri); |
|
|
|
|
|
|
|
|
@ -44,10 +44,10 @@ function get_salmon_key($uri,$keyhash) {
|
|
|
|
|
if(count($ret) == 1) { |
|
|
|
|
|
|
|
|
|
// We only found one one key so we don't care if the hash matches. |
|
|
|
|
// If it's the wrong key we'll find out soon enough because |
|
|
|
|
// message verification will fail. This also covers some older |
|
|
|
|
// If it's the wrong key we'll find out soon enough because |
|
|
|
|
// message verification will fail. This also covers some older |
|
|
|
|
// software which don't supply a keyhash. As long as they only |
|
|
|
|
// have one key we'll be right. |
|
|
|
|
// have one key we'll be right. |
|
|
|
|
|
|
|
|
|
return $ret[0]; |
|
|
|
|
} |
|
|
|
@ -62,20 +62,20 @@ function get_salmon_key($uri,$keyhash) {
|
|
|
|
|
return ''; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function slapper($owner,$url,$slap) { |
|
|
|
|
|
|
|
|
|
logger('slapper called. Data: ' . $slap); |
|
|
|
|
logger('slapper called for '.$url.'. Data: ' . $slap); |
|
|
|
|
|
|
|
|
|
// does contact have a salmon endpoint? |
|
|
|
|
// does contact have a salmon endpoint? |
|
|
|
|
|
|
|
|
|
if(! strlen($url)) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if(! $owner['sprvkey']) { |
|
|
|
|
logger(sprintf("slapper: user '%s' (%d) does not have a salmon private key. Send failed.", |
|
|
|
|
logger(sprintf("user '%s' (%d) does not have a salmon private key. Send failed.", |
|
|
|
|
$owner['username'],$owner['uid'])); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
@ -96,7 +96,7 @@ $namespaces = <<< EOT
|
|
|
|
|
EOT; |
|
|
|
|
|
|
|
|
|
$slap = str_replace('<entry>',$namespaces,$slap); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// create a magic envelope |
|
|
|
|
|
|
|
|
|
$data = base64url_encode($slap); |
|
|
|
@ -125,7 +125,7 @@ EOT;
|
|
|
|
|
'$signature' => $signature |
|
|
|
|
)); |
|
|
|
|
|
|
|
|
|
// slap them |
|
|
|
|
// slap them |
|
|
|
|
post_url($url,$salmon, array( |
|
|
|
|
'Content-type: application/magic-envelope+xml', |
|
|
|
|
'Content-length: ' . strlen($salmon) |
|
|
|
@ -138,7 +138,7 @@ EOT;
|
|
|
|
|
|
|
|
|
|
if($return_code > 299) { |
|
|
|
|
|
|
|
|
|
logger('slapper: compliant salmon failed. Falling back to status.net hack2'); |
|
|
|
|
logger('compliant salmon failed. Falling back to status.net hack2'); |
|
|
|
|
|
|
|
|
|
// Entirely likely that their salmon implementation is |
|
|
|
|
// non-compliant. Let's try once more, this time only signing |
|
|
|
@ -152,7 +152,7 @@ EOT;
|
|
|
|
|
'$signature' => $signature2 |
|
|
|
|
)); |
|
|
|
|
|
|
|
|
|
// slap them |
|
|
|
|
// slap them |
|
|
|
|
post_url($url,$salmon, array( |
|
|
|
|
'Content-type: application/magic-envelope+xml', |
|
|
|
|
'Content-length: ' . strlen($salmon) |
|
|
|
@ -162,11 +162,11 @@ EOT;
|
|
|
|
|
|
|
|
|
|
if($return_code > 299) { |
|
|
|
|
|
|
|
|
|
logger('slapper: compliant salmon failed. Falling back to status.net hack3'); |
|
|
|
|
logger('compliant salmon failed. Falling back to status.net hack3'); |
|
|
|
|
|
|
|
|
|
// Entirely likely that their salmon implementation is |
|
|
|
|
// non-compliant. Let's try once more, this time only signing |
|
|
|
|
// the data, without the precomputed blob |
|
|
|
|
// the data, without the precomputed blob |
|
|
|
|
|
|
|
|
|
$salmon = replace_macros($salmon_tpl,array( |
|
|
|
|
'$data' => $data, |
|
|
|
@ -176,7 +176,7 @@ EOT;
|
|
|
|
|
'$signature' => $signature3 |
|
|
|
|
)); |
|
|
|
|
|
|
|
|
|
// slap them |
|
|
|
|
// slap them |
|
|
|
|
post_url($url,$salmon, array( |
|
|
|
|
'Content-type: application/magic-envelope+xml', |
|
|
|
|
'Content-length: ' . strlen($salmon) |
|
|
|
@ -184,7 +184,7 @@ EOT;
|
|
|
|
|
$return_code = $a->get_curl_code(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
logger('slapper returned ' . $return_code); |
|
|
|
|
logger('slapper for '.$url.' returned ' . $return_code); |
|
|
|
|
if(! $return_code) |
|
|
|
|
return(-1); |
|
|
|
|
if(($return_code == 503) && (stristr($a->get_curl_headers(),'retry-after'))) |
|
|
|
|