]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Diaspora doesn't understand our Salmon POST, so send again
authorMikael Nordfeldth <mmn@hethane.se>
Sat, 6 Jun 2015 14:57:29 +0000 (16:57 +0200)
committerMikael Nordfeldth <mmn@hethane.se>
Sat, 6 Jun 2015 14:57:29 +0000 (16:57 +0200)
plugins/OStatus/lib/salmon.php

index 83be963c77cca4ed55ba6aa372ac4a35ad93bfee..2097ffa77f87e04378037e8f91c09922176ee793 100644 (file)
@@ -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;