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:----KEuyWnj+wa40SlriNLGULZqw0X9LXrZD/SWtbfX/+Qj6pp5Mzy9WVKDdCEoVaL2J6WqGTnRoTfaIWHjn11J31Ii5Cuz72FCS0xOsSYVI7Xju7O8kohfssra803VeWo4kLuW7LcNRtbwYtTJ9bwOQhTYiTlRyJVnR0pdZwH2v7EoiF891wZ5fHbBRCyfHLtgbTuq/0ofWl0hdYbJgo+i0miZ3q4LSfftz9x4yqBZCqx/nMHC1MEooS5b9yAVmU40lTA66VnCNs2oCqNY9p8NdLKXQXQMIoDRhDORdPpekFFedoCf0nMQivYy65fL6QLmcbZ/AdkQY2YNAkE51xXimvpcEhQSGAFMQO3pSPMC6rr+oFUiJhH87s1OkuVOR65ay2ge/IwIkagFPKK7QRzLsmbTLP0MbCYV0VgEZlHFadxbE6CCcGNeC8VRlbS9ENTeqMIZtj/XaLB32CKcScj4U6scmzmpq+fnjc2SLx7Mk0rvAYmpPiqHUUmL2Z3YDEvEjw/kjdx4832VBYfgwdR2MGaN44L3mfcvz+5e+txCkZtt8/Q+3dZE/AB6p2h1RXOx2NmTA+Md71EB2Cnlpp7SMF0yMrlRTTuG+pB+EGXGjhMVPXFLOVQx1Lv+Egw3pqECDS3V6y00zG9x6HKhyejjWowalUV6LMNgG3Xoe5Xg7m+w=----ATTACHMENT:----OTczNzM4OTcwOTEwNzQ4OCAxNDc5MjM1Mjg3MjMxNjggMzg4MDMzNDMzODk1OTkxOA==