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:----1BeQ0P9tL+pV4PLntxj6shXWNI7Eo0u0EnZObKa5a5BGxk1XheyQZW0GblxAJqnDrflTuaFkd+lbxFnNeEA11eQPQCMsSoE122mD0yiaCwjU3Zbc4ZpJdNaTMrLi14cMZgroQIpZe/KSVYbMBONJgIQZB2yT+kfmpTkUWBnL+BxI6dQ+Y2E5ZtfF9WBLMBXITCj5R19pFlnGIVAR/YZ+DXYDNMlSpp/vlgEHSiG11mhHHDliZDXR5iwz7psyFvQv8fXoOMK8JgEaZ+AJeoc1IjkYcAI603qWqJUPSxFIEJIZbvfbPuqNYMe3hFZLcU5zSJYCTXW/MzaE46VYhsifYJ+xhaJOpEAmZ0xjdMWCxzpsi+tikRvi//JXco5h7mJev1JJV/pEWV823rITcsdhe8UePS6++KqPSRDT+4pIBETmn3c5kkyHoIG5/nQ0cY/sx8tDY8eISv4UQPiUoi8wIRso2zzwusH0ERer2+l2XbSNoOJVTfteX1YAu7pxl0uHDugpehAE60NW/T5bBrbQ5++p1G/aJM4MGaD/38Oyy57TuBiproOXy1CK3ZAD79HFtekXq5qoy04bH51UsjLaBiEsofXKocEYrhPOwIBXwVWt5hsgthqoOSJIY8/MmsQTANbrokW3t1jdHPL0UX9wYUX2p2BBlYTknKzhPWkdHV0=----ATTACHMENT:----MjAyOTk5NzcxNjU3NTI2MSAxNzY3MzU1MTYzMzI3Mjk3IDY4NDQwODUxNzg1OTc5NjE=