| 
<?php
 /**
 * This page provides a way to create a redirect to a POST request.
 *
 * @package simpleSAMLphp
 */
 
 if (array_key_exists('RedirId', $_REQUEST)) {
 $postId = $_REQUEST['RedirId'];
 $session = SimpleSAML_Session::getSessionFromRequest();
 } elseif (array_key_exists('RedirInfo', $_REQUEST)) {
 $encData = base64_decode($_REQUEST['RedirInfo']);
 
 if (empty($encData)) {
 throw new SimpleSAML_Error_BadRequest('Invalid RedirInfo data.');
 }
 
 list($sessionId, $postId) = explode(':', SimpleSAML_Utilities::aesDecrypt($encData));
 
 if (empty($sessionId) || empty($postId)) {
 throw new SimpleSAML_Error_BadRequest('Invalid session info data.');
 }
 
 $session = SimpleSAML_Session::getSession($sessionId);
 } else {
 throw new SimpleSAML_Error_BadRequest('Missing redirection info parameter.');
 }
 
 if ($session === NULL) {
 throw new Exception('Unable to load session.');
 }
 
 $postData = $session->getData('core_postdatalink', $postId);
 
 if ($postData === NULL) {
 /* The post data is missing, probably because it timed out. */
 throw new Exception('The POST data we should restore was lost.');
 }
 
 $session->deleteData('core_postdatalink', $postId);
 
 assert('is_array($postData)');
 assert('array_key_exists("url", $postData)');
 assert('array_key_exists("post", $postData)');
 
 $config = SimpleSAML_Configuration::getInstance();
 $p = new SimpleSAML_XHTML_Template($config, 'post.php');
 $p->data['destination'] = $postData['url'];
 $p->data['post'] = $postData['post'];
 $p->show();
 exit(0);
 
 ?>
 |