Outgoing Salmon slaps now use the corrected signature format; if the first hit is rejected with an HTTP error, we try again with the old format.
(This is not 100% ideal; possibly should try to distinguish between server errors and rejections, etc.)
This commit is contained in:
		@@ -52,8 +52,10 @@ class Salmon
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $classes = array('MagicEnvelope', 'MagicEnvelopeCompat');
 | 
			
		||||
        foreach ($classes as $class) {
 | 
			
		||||
            try {
 | 
			
		||||
            $xml = $this->createMagicEnv($xml, $actor);
 | 
			
		||||
                $envelope = $this->createMagicEnv($xml, $actor, $class);
 | 
			
		||||
            } catch (Exception $e) {
 | 
			
		||||
                common_log(LOG_ERR, "Salmon unable to sign: " . $e->getMessage());
 | 
			
		||||
                return false;
 | 
			
		||||
@@ -63,19 +65,23 @@ class Salmon
 | 
			
		||||
    
 | 
			
		||||
            try {
 | 
			
		||||
                $client = new HTTPClient();
 | 
			
		||||
            $client->setBody($xml);
 | 
			
		||||
                $client->setBody($envelope);
 | 
			
		||||
                $response = $client->post($endpoint_uri, $headers);
 | 
			
		||||
            } catch (HTTP_Request2_Exception $e) {
 | 
			
		||||
            common_log(LOG_ERR, "Salmon post to $endpoint_uri failed: " . $e->getMessage());
 | 
			
		||||
            return false;
 | 
			
		||||
                common_log(LOG_ERR, "Salmon ($class) post to $endpoint_uri failed: " . $e->getMessage());
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            if ($response->getStatus() != 200) {
 | 
			
		||||
            common_log(LOG_ERR, "Salmon at $endpoint_uri returned status " .
 | 
			
		||||
                common_log(LOG_ERR, "Salmon ($class) at $endpoint_uri returned status " .
 | 
			
		||||
                    $response->getStatus() . ': ' . $response->getBody());
 | 
			
		||||
            return false;
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Success!
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Encode the given string as a signed MagicEnvelope XML document,
 | 
			
		||||
@@ -87,14 +93,16 @@ class Salmon
 | 
			
		||||
     *
 | 
			
		||||
     * @param string $text XML fragment to sign, assumed to be Atom
 | 
			
		||||
     * @param Profile $actor Profile of a local user to use as signer
 | 
			
		||||
     * @param string $class to override the magic envelope signature version, pass a MagicEnvelope subclass here
 | 
			
		||||
     *
 | 
			
		||||
     * @return string XML string representation of magic envelope
 | 
			
		||||
     *
 | 
			
		||||
     * @throws Exception on bad profile input or key generation problems
 | 
			
		||||
     * @fixme if signing fails, this seems to return the original text without warning. Is there a reason for this?
 | 
			
		||||
     */
 | 
			
		||||
    public function createMagicEnv($text, $actor)
 | 
			
		||||
    public function createMagicEnv($text, $actor, $class='MagicEnvelope')
 | 
			
		||||
    {
 | 
			
		||||
        $magic_env = new MagicEnvelope();
 | 
			
		||||
        $magic_env = new $class();
 | 
			
		||||
 | 
			
		||||
        $user = User::staticGet('id', $actor->id);
 | 
			
		||||
        if ($user->id) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user