/**
  * @param SamlMessage $message
  *
  * @return string
  */
 private function signAndSerialize(SamlMessage $message)
 {
     $signatureWriter = new SignatureWriter($this->getCertificate(), $this->getPrivateKey());
     $message->setSignature($signatureWriter);
     $serializationContext = new SerializationContext();
     $message->serialize($serializationContext->getDocument(), $serializationContext);
     $xml = $serializationContext->getDocument()->saveXML();
     return $xml;
 }
 /**
  * @param Request        $request
  * @param MessageContext $context
  */
 public function receive(Request $request, MessageContext $context)
 {
     $post = $request->request->all();
     if (array_key_exists('SAMLRequest', $post)) {
         $msg = $post['SAMLRequest'];
     } elseif (array_key_exists('SAMLResponse', $post)) {
         $msg = $post['SAMLResponse'];
     } else {
         throw new LightSamlBindingException('Missing SAMLRequest or SAMLResponse parameter');
     }
     $msg = base64_decode($msg);
     $this->dispatchReceive($msg);
     $deserializationContext = $context->getDeserializationContext();
     $result = SamlMessage::fromXML($msg, $deserializationContext);
     if (array_key_exists('RelayState', $post)) {
         $result->setRelayState($post['RelayState']);
     }
     $context->setMessage($result);
 }
 /**
  * @param \DOMNode               $node
  * @param DeserializationContext $context
  */
 public function deserialize(\DOMNode $node, DeserializationContext $context)
 {
     $this->attributesFromXml($node, array('InResponseTo'));
     $this->singleElementsFromXml($node, $context, array('Status' => array('samlp', 'LightSaml\\Model\\Protocol\\Status')));
     parent::deserialize($node, $context);
 }
 /**
  * @param SamlMessage|EntityDescriptor|EntitiesDescriptor|Assertion $object
  */
 protected function sign($object)
 {
     $object->setSignature(new SignatureWriter($this->getX509Certificate(), KeyHelper::createPrivateKey(__DIR__ . '/../../../../../resources/sample/Certificate/saml.pem', '', true)));
 }
 /**
  * @dataProvider deserialize_provider
  */
 public function test_deserialize($xml, $expectedType)
 {
     $deserializationContext = new DeserializationContext();
     $samlMessage = SamlMessage::fromXML($xml, $deserializationContext);
     $this->assertInstanceOf($expectedType, $samlMessage);
 }
 /**
  * @param string      $msg
  * @param SamlMessage $message
  * @param string|null $destination
  *
  * @return string
  */
 protected function getDestinationUrl($msg, SamlMessage $message, $destination)
 {
     $destination = $message->getDestination() ? $message->getDestination() : $destination;
     if (strpos($destination, '?') === false) {
         $destination .= '?' . $msg;
     } else {
         $destination .= '&' . $msg;
     }
     return $destination;
 }