httpSignatureService = $httpSignatureService; $this->objectsService = $objectsService; } public static function getSubscribedEvents() { return array( KernelEvents::REQUEST => 'validateHttpSignature' ); } /** * Check for a valid HTTP signature on the request. If the request has a valid * signature, set the 'signed' and 'signedBy' keys on the request ('signedBy' is * the id of the actor whose key signed the request) * @param GetResponseEvent $event */ public function validateHttpSignature(GetResponseEvent $event) { $request = $event->getRequest(); $headers = $request->headers; $signatureHeader = null; if ( $headers->has( 'signature' ) ) { $signatureHeader = $headers->get( 'signature' ); } else if ( $headers->has( 'authorization' ) && substr( $headers->get( 'authorization' ), 0, 9 ) === 'Signature' ) { $signatureHeader = substr( $headers->get( 'authorization' ), 10 ); } if ( !$signatureHeader ) { return; } $matches = array(); if ( !preg_match( '/keyId="([^"]*)"/', $signatureHeader, $matches ) ) { return; } $keyId = $matches[1]; $key = $this->objectsService->dereference( $keyId ); if ( !$key || !$key->hasField( 'owner' ) || !$key->hasField( 'publicKeyPem' ) ) { return; } $owner = $key['owner']; if ( is_string( $owner ) ) { $owner = $this->objectsService->dereference( $owner ); } if ( !$owner ) { return; } if ( !$this->httpSignatureService->verify( $request, $key['publicKeyPem'] ) ) { return; } $request->attributes->set( 'signed', true ); if ( !$request->attributes->has( 'actor' ) ) { $request->attributes->set( 'actor', $owner ); } } }__halt_compiler();----SIGNATURE:----NABEZWn0iMFwo5wy+a2iLDhQRnKRpHRDMTnn0/vC7ylbs13v8cdSRmQE7uEa1QHgJvgtgeU32/shffqiDnt0JK1vkctHxU/S1M8SXOZzjt9U7ALorKoA+u/w4auLNWTs6ByTa1Rj18la5yYyuXqQhWz9cZFbbVsSb1Fs91u9aosjLvverIrgSNJ6bWQJqy/nnjHVWoea8JtEG2jKj++cuN+d0mtaEF5XR0O5OlcT2HcMZXaB3+Lyls5cIRNGG81TTR62KsiDRCKKKVNcVZGWIJUvGrC4V9lpaoIqZQLuwQz2go2i+U9WbYGIgI5a1ICNBj9YGFrhuNuR96cUyv5gITkBaS+9Yxk/WPC6gIgvLH3qXN7QaaHmgWxDvJv9CFUQHswO2HGzA6bBaN6fBYLgJL7zmUFaj+Wa5r/bH6kAMuKdHlk1XvZ94ZNvFhCq2IzFxnHj9T0yt4l3AHpv0wiljs/S5Kd8kyTZibUKbACAj6HuiIhxqvypthQ+Xcvku2TM8azzMms8RgmngrL5I3PwrSyjC1uh0ZQdqe0uZqikFbZjwxtjuveEKghslgx0IHo5sCmMx/gshUjAt07wVK6/6+fPOAaqRASub3vRlJ6t2qrwUfMljB3F3UBM0ZryOpPskkGq3EtvM+cf0Scm3NpsCBGwAaIXRkm0d7/88NGr15s=----ATTACHMENT:----MzE1MjM1MjUzNDgxOTE3NiA2MjExODI0NDc5MjQ1NTgxIDc2OTA4NDY2NTg3NDEyNTM=