forked from GNUsocial/gnu-social
		
	
		
			
	
	
		
			153 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			153 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|   | <?php | ||
|  | 
 | ||
|  | require_once "Auth/Yadis/Yadis.php"; | ||
|  | require_once "Tests/Auth/Yadis/TestUtil.php"; | ||
|  | 
 | ||
|  | global $testlist; | ||
|  | $testlist = array( | ||
|  |                   // success,  input_name,          id_name,            result_name
 | ||
|  |                   array(true,  "equiv",             "equiv",            "xrds"), | ||
|  |                   array(true,  "header",            "header",           "xrds"), | ||
|  |                   array(true,  "lowercase_header",  "lowercase_header", "xrds"), | ||
|  |                   array(true,  "xrds",              "xrds",             "xrds"), | ||
|  |                   array(true,  "xrds_ctparam",      "xrds_ctparam",     "xrds_ctparam"), | ||
|  |                   array(true,  "xrds_ctcase",       "xrds_ctcase",      "xrds_ctcase"), | ||
|  |                   array(false, "xrds_html",         "xrds_html",        "xrds_html"), | ||
|  |                   array(true,  "redir_equiv",       "equiv",            "xrds"), | ||
|  |                   array(true,  "redir_header",      "header",           "xrds"), | ||
|  |                   array(true,  "redir_xrds",        "xrds",             "xrds"), | ||
|  |                   array(false, "redir_xrds_html",   "xrds_html",        "xrds_html"), | ||
|  |                   array(true,  "redir_redir_equiv", "equiv",            "xrds"), | ||
|  |                   array(false, "404_server_response", null,             null), | ||
|  |                   array(false, "404_with_header",     null,             null), | ||
|  |                   array(false, "404_with_meta",       null,             null), | ||
|  |                   array(false, "201_server_response", null,             null), | ||
|  |                   array(false, "500_server_response", null,             null) | ||
|  |                   ); | ||
|  | 
 | ||
|  | function getExampleXRDS() | ||
|  | { | ||
|  |     return Tests_Auth_Yadis_readdata('example-xrds.xml'); | ||
|  | } | ||
|  | 
 | ||
|  | global $example_xrds; | ||
|  | $example_xrds = getExampleXRDS(); | ||
|  | 
 | ||
|  | global $default_test_file; | ||
|  | $default_test_file = 'test1-discover.txt'; | ||
|  | 
 | ||
|  | global $discover_tests; | ||
|  | $discover_tests = array(); | ||
|  | 
 | ||
|  | function readTests($filename) | ||
|  | { | ||
|  |     $data = Tests_Auth_Yadis_readdata($filename); | ||
|  | 
 | ||
|  |     if ($data === null) { | ||
|  |         return null; | ||
|  |     } | ||
|  | 
 | ||
|  |     $tests = array(); | ||
|  |     foreach (preg_split("/\f\n/", $data) as $case) { | ||
|  |         list($name, $content) = explode("\n", $case, 2); | ||
|  |         $tests[$name] = $content; | ||
|  |     } | ||
|  |     return $tests; | ||
|  | } | ||
|  | 
 | ||
|  | function getData($filename, $name) | ||
|  | { | ||
|  |     global $discover_tests; | ||
|  |     if (!array_key_exists($filename, $discover_tests)) { | ||
|  |         $data = readTests($filename); | ||
|  |         if ($data === null) { | ||
|  |             return null; | ||
|  |         } | ||
|  |         $discover_tests[$filename] = $data; | ||
|  |     } | ||
|  | 
 | ||
|  |     $file_tests = $discover_tests[$filename]; | ||
|  | 
 | ||
|  |     if (array_key_exists($name, $file_tests)) { | ||
|  |         return $file_tests[$name]; | ||
|  |     } else { | ||
|  |         return null; | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | function fillTemplate($test_name, $template, $base_url, $example_xrds) | ||
|  | { | ||
|  |     $mapping = array( | ||
|  |                      array('URL_BASE/', $base_url), | ||
|  |                      array('<XRDS Content>', $example_xrds), | ||
|  |                      array('YADIS_HEADER', 'X-XRDS-Location'), | ||
|  |                      array('NAME', $test_name)); | ||
|  | 
 | ||
|  |     foreach ($mapping as $pair) { | ||
|  |         list($k, $v) = $pair; | ||
|  |         $template = str_replace($k, $v, $template); | ||
|  |     } | ||
|  | 
 | ||
|  |     return $template; | ||
|  | } | ||
|  | 
 | ||
|  | function generateSample($test_name, $base_url, | ||
|  |                         $_example_xrds = null, $filename = null) | ||
|  | { | ||
|  |     global $example_xrds, $default_test_file; | ||
|  | 
 | ||
|  |     if ($_example_xrds === null) { | ||
|  |         $_example_xrds = $example_xrds; | ||
|  |     } | ||
|  | 
 | ||
|  |     if ($filename === null) { | ||
|  |         $filename = $default_test_file; | ||
|  |     } | ||
|  | 
 | ||
|  |     $template = getData($filename, $test_name); | ||
|  | 
 | ||
|  |     if ($template === null) { | ||
|  |         return null; | ||
|  |     } | ||
|  | 
 | ||
|  |     return fillTemplate($test_name, $template, $base_url, $_example_xrds); | ||
|  | } | ||
|  | 
 | ||
|  | function generateResult($base_url, $input_name, $id_name, $result_name, $success) | ||
|  | { | ||
|  |     $input_url = $base_url . $input_name; // urlparse.urljoin(base_url, input_name)
 | ||
|  | 
 | ||
|  |     // If the name is null then we expect the protocol to fail, which
 | ||
|  |     // we represent by null
 | ||
|  |     if ($id_name === null) { | ||
|  |         // assert result_name is null
 | ||
|  |         return array($input_url, null); // DiscoveryFailure
 | ||
|  |     } | ||
|  | 
 | ||
|  |     $result = generateSample($result_name, $base_url); | ||
|  |     list($headers, $content) = explode("\n\n", $result, 2); | ||
|  |     $header_lines = explode("\n", $headers); | ||
|  |     $ctype = null; | ||
|  |     foreach ($header_lines as $header_line) { | ||
|  |         if (strpos($header_line, 'Content-Type:') === 0) { | ||
|  |             list($temp, $ctype) = explode(":", $header_line, 2); | ||
|  |             $ctype = trim($ctype); | ||
|  |             break; | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     $id_url = $base_url . $id_name; | ||
|  | 
 | ||
|  |     $result = new Auth_Yadis_Yadis(); | ||
|  |     $result->uri = $id_url; | ||
|  |     if ($success) { | ||
|  |         $result->xrds_uri = $base_url . $result_name; | ||
|  |     } else { | ||
|  |         $result->xrds_uri = null; | ||
|  |     } | ||
|  |     $result->content_type = $ctype; | ||
|  |     $result->body = $content; | ||
|  |     return array($input_url, $result); | ||
|  | } | ||
|  | 
 |