From faf14197cd7956c5ced768a82acaefd0d0acce89 Mon Sep 17 00:00:00 2001 From: Mikael Nordfeldth Date: Sat, 6 Jun 2015 16:57:29 +0200 Subject: [PATCH] Diaspora doesn't understand our Salmon POST, so send again --- plugins/OStatus/lib/salmon.php | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/plugins/OStatus/lib/salmon.php b/plugins/OStatus/lib/salmon.php index 83be963c77..2097ffa77f 100644 --- a/plugins/OStatus/lib/salmon.php +++ b/plugins/OStatus/lib/salmon.php @@ -71,7 +71,19 @@ class Salmon common_log(LOG_ERR, "Salmon post to $endpoint_uri failed: " . $e->getMessage()); return false; } - if ($response->getStatus() != 200) { + + // Diaspora wants a slightly different formatting on the POST (other Content-type, so body needs "xml=") + if ($response->getStatus() === 422) { + common_debug(sprintf('Salmon (from profile %d) endpoint %s returned status %s. Diaspora? Will try again! Body: %s', + $user->id, $endpoint_uri, $response->getStatus(), $response->getBody())); + $headers = array('Content-Type: application/x-www-form-urlencoded'); + $client->setBody('xml=' . Magicsig::base64_url_encode($envxml)); + $response = $client->post($endpoint_uri, $headers); + } + + // 200 OK is the best response + // 202 Accepted is what we get from Diaspora for example + if (!in_array($response->getStatus(), array(200, 202))) { common_log(LOG_ERR, sprintf('Salmon (from profile %d) endpoint %s returned status %s: %s', $user->id, $endpoint_uri, $response->getStatus(), $response->getBody())); return false;