Files
proxmox-selfservice/qa-tool/htdocs/vendor/litesaml/lightsaml/src/Binding/HttpPostBinding.php
Sven Steinert fce31ebcd7 Viel neues
2026-04-30 12:06:00 +02:00

70 lines
2.2 KiB
PHP

<?php
namespace LightSaml\Binding;
use LightSaml\Context\Profile\Helper\MessageContextHelper;
use LightSaml\Context\Profile\MessageContext;
use LightSaml\Error\LightSamlBindingException;
use LightSaml\Model\Protocol\AbstractRequest;
use LightSaml\Model\Protocol\SamlMessage;
use Symfony\Component\HttpFoundation\Request;
class HttpPostBinding extends AbstractBinding
{
/**
* @param string|null $destination
*
* @return SamlPostResponse
*/
public function send(MessageContext $context, $destination = null)
{
$message = MessageContextHelper::asSamlMessage($context);
$destination = $message->getDestination() ? $message->getDestination() : $destination;
$serializationContext = $context->getSerializationContext();
$message->serialize($serializationContext->getDocument(), $serializationContext);
$msgStr = $serializationContext->getDocument()->saveXML();
$this->dispatchSend($msgStr);
$msgStr = base64_encode($msgStr);
$type = $message instanceof AbstractRequest ? 'SAMLRequest' : 'SAMLResponse';
$data = [$type => $msgStr];
if ($message->getRelayState()) {
$data['RelayState'] = $message->getRelayState();
}
$result = new SamlPostResponse($destination, $data);
$result->renderContent();
return $result;
}
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);
}
}