OpenIdTest.php 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708
  1. <?php
  2. /**
  3. * Zend Framework
  4. *
  5. * LICENSE
  6. *
  7. * This source file is subject to the new BSD license that is bundled
  8. * with this package in the file LICENSE.txt.
  9. * It is also available through the world-wide-web at this URL:
  10. * http://framework.zend.com/license/new-bsd
  11. * If you did not receive a copy of the license and are unable to
  12. * obtain it through the world-wide-web, please send an email
  13. * to license@zend.com so we can send you a copy immediately.
  14. *
  15. * @category Zend
  16. * @package Zend_OpenId
  17. * @copyright Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com)
  18. * @license http://framework.zend.com/license/new-bsd New BSD License
  19. * @version $Id$
  20. */
  21. /**
  22. * Test helper
  23. */
  24. require_once dirname(__FILE__) . '/../TestHelper.php';
  25. /**
  26. * Zend_OpenId
  27. */
  28. require_once 'Zend/OpenId.php';
  29. /**
  30. * PHPUnit test case
  31. */
  32. require_once 'PHPUnit/Framework.php';
  33. /**
  34. * Zend_OpenId_ResponseHelper
  35. */
  36. require_once 'Zend/OpenId/ResponseHelper.php';
  37. /**
  38. * @package Zend_OpenId
  39. * @subpackage UnitTests
  40. */
  41. class Zend_OpenIdTest extends PHPUnit_Framework_TestCase
  42. {
  43. private $_serverVariables;
  44. public function setUp()
  45. {
  46. $this->_serverVariables = $_SERVER;
  47. }
  48. public function tearDown()
  49. {
  50. $_SERVER = $this->_serverVariables;
  51. }
  52. /**
  53. * testing testSelfUrl
  54. *
  55. */
  56. public function testSelfUrl()
  57. {
  58. unset($_SERVER['SCRIPT_URI']);
  59. unset($_SERVER['HTTPS']);
  60. unset($_SERVER['HTTP_HOST']);
  61. unset($_SERVER['SERVER_NAME']);
  62. unset($_SERVER['SERVER_PORT']);
  63. unset($_SERVER['SCRIPT_URL']);
  64. unset($_SERVER['REDIRECT_URL']);
  65. unset($_SERVER['PHP_SELF']);
  66. unset($_SERVER['SCRIPT_NAME']);
  67. unset($_SERVER['PATH_INFO']);
  68. $this->assertSame( 'http://', Zend_OpenId::selfUrl() );
  69. $_SERVER['SCRIPT_URI'] = "http://www.test.com/";
  70. $this->assertSame( 'http://www.test.com/', Zend_OpenId::selfUrl() );
  71. unset($_SERVER['SCRIPT_URI']);
  72. $_SERVER['HTTP_HOST'] = "www.test.com";
  73. $_SERVER['SERVER_NAME'] = "www.wrong.com";
  74. $this->assertSame( 'http://www.test.com', Zend_OpenId::selfUrl() );
  75. $_SERVER['HTTP_HOST'] = "www.test.com:80";
  76. $this->assertSame( 'http://www.test.com', Zend_OpenId::selfUrl() );
  77. $_SERVER['HTTP_HOST'] = "www.test.com:8080";
  78. $this->assertSame( 'http://www.test.com:8080', Zend_OpenId::selfUrl() );
  79. $_SERVER['HTTP_HOST'] = "www.test.com";
  80. $_SERVER['SERVER_PORT'] = "80";
  81. $this->assertSame( 'http://www.test.com', Zend_OpenId::selfUrl() );
  82. $_SERVER['SERVER_PORT'] = "8080";
  83. $this->assertSame( 'http://www.test.com:8080', Zend_OpenId::selfUrl() );
  84. unset($_SERVER['HTTP_HOST']);
  85. unset($_SERVER['SERVER_PORT']);
  86. $_SERVER['SERVER_NAME'] = "www.test.com";
  87. $this->assertSame( 'http://www.test.com', Zend_OpenId::selfUrl() );
  88. $_SERVER['SERVER_PORT'] = "80";
  89. $this->assertSame( 'http://www.test.com', Zend_OpenId::selfUrl() );
  90. $_SERVER['SERVER_PORT'] = "8080";
  91. $this->assertSame( 'http://www.test.com:8080', Zend_OpenId::selfUrl() );
  92. unset($_SERVER['SERVER_PORT']);
  93. $_SERVER['HTTPS'] = "on";
  94. $this->assertSame( 'https://www.test.com', Zend_OpenId::selfUrl() );
  95. $_SERVER['SERVER_PORT'] = "443";
  96. $this->assertSame( 'https://www.test.com', Zend_OpenId::selfUrl() );
  97. $_SERVER['SERVER_PORT'] = "8080";
  98. $this->assertSame( 'https://www.test.com:8080', Zend_OpenId::selfUrl() );
  99. unset($_SERVER['SERVER_PORT']);
  100. unset($_SERVER['HTTPS']);
  101. $_SERVER['SCRIPT_URL'] = '/test.php';
  102. $_SERVER['PHP_SELF'] = '/bug.php';
  103. $_SERVER['SCRIPT_NAME'] = '/bug.php';
  104. $_SERVER['PATH_INFO'] = '/bug';
  105. $this->assertSame( 'http://www.test.com/test.php', Zend_OpenId::selfUrl() );
  106. unset($_SERVER['SCRIPT_URL']);
  107. $_SERVER['REDIRECT_URL'] = '/ok';
  108. $_SERVER['PHP_SELF'] = '/bug.php';
  109. $_SERVER['SCRIPT_NAME'] = '/bug.php';
  110. $_SERVER['PATH_INFO'] = '/bug';
  111. $this->assertSame( 'http://www.test.com/ok', Zend_OpenId::selfUrl() );
  112. unset($_SERVER['REDIRECT_URL']);
  113. $_SERVER['PHP_SELF'] = '/test.php';
  114. $this->assertSame( 'http://www.test.com/test.php', Zend_OpenId::selfUrl() );
  115. unset($_SERVER['PHP_SELF']);
  116. $_SERVER['SCRIPT_NAME'] = '/test.php';
  117. $_SERVER['PATH_INFO'] = '/ok';
  118. $this->assertSame( 'http://www.test.com/test.php/ok', Zend_OpenId::selfUrl() );
  119. unset($_SERVER['PATH_INFO']);
  120. $this->assertSame( 'http://www.test.com/test.php', Zend_OpenId::selfUrl() );
  121. }
  122. /**
  123. * testing testAbsolutefUrl
  124. *
  125. */
  126. public function testAbsoluteUrl()
  127. {
  128. unset($_SERVER['SCRIPT_URI']);
  129. unset($_SERVER['HTTPS']);
  130. unset($_SERVER['HTTP_HOST']);
  131. unset($_SERVER['SERVER_NAME']);
  132. unset($_SERVER['SERVER_PORT']);
  133. unset($_SERVER['SCRIPT_URL']);
  134. unset($_SERVER['REDIRECT_URL']);
  135. unset($_SERVER['PHP_SELF']);
  136. unset($_SERVER['SCRIPT_NAME']);
  137. unset($_SERVER['PATH_INFO']);
  138. $_SERVER['HTTP_HOST'] = "www.test.com";
  139. $_SERVER['SCRIPT_NAME'] = '/a/b/c/test.php';
  140. $this->assertSame( 'http://www.test.com/a/b/c/test.php', Zend_OpenId::absoluteUrl("") );
  141. $this->assertSame( 'http://www.test.com/a/b/c/ok.php', Zend_OpenId::absoluteUrl("ok.php") );
  142. $this->assertSame( 'http://www.test.com/a/ok.php', Zend_OpenId::absoluteUrl("/a/ok.php") );
  143. $this->assertSame( 'http://www.php.net/ok.php', Zend_OpenId::absoluteUrl("http://www.php.net/ok.php") );
  144. $this->assertSame( 'https://www.php.net/ok.php', Zend_OpenId::absoluteUrl("https://www.php.net/ok.php") );
  145. $_SERVER['SCRIPT_NAME'] = '/test.php';
  146. $this->assertSame( 'http://www.test.com/a/b.php', Zend_OpenId::absoluteUrl("/a/b.php") );
  147. $this->assertSame( 'http://www.test.com/a/b.php', Zend_OpenId::absoluteUrl("a/b.php") );
  148. }
  149. /**
  150. * testing testParamsToQuery
  151. *
  152. */
  153. public function testParamsToQuery()
  154. {
  155. $this->assertSame( '', Zend_OpenId::paramsToQuery(array()) );
  156. $this->assertSame( 'a=1', Zend_OpenId::paramsToQuery(array('a'=>1)) );
  157. $this->assertSame( 'a=1&b=2', Zend_OpenId::paramsToQuery(array('a'=>1,'b'=>2)) );
  158. $this->assertSame( 'a=x+y', Zend_OpenId::paramsToQuery(array('a'=>'x y')) );
  159. }
  160. /**
  161. * testing testNormalizeUrl
  162. *
  163. */
  164. public function testNormalizeUrl()
  165. {
  166. $url = 'example://a/b/c/%7Bfoo%7D';
  167. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  168. $this->assertSame( 'example://a/b/c/%7Bfoo%7D', $url );
  169. $url = 'eXAMPLE://A/./b/../b/%63/%7bfoo%7d';
  170. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  171. $this->assertSame( 'example://a/b/c/%7Bfoo%7D', $url );
  172. $url = 'eXAMPLE://A/./b/../b/%63/%bbfoo%Bd';
  173. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  174. $this->assertSame( 'example://a/b/c/%BBfoo%BD', $url );
  175. $url = 'example://a/b/c/%1';
  176. $this->assertFalse( Zend_OpenId::normalizeUrl($url) );
  177. $url = 'example://a/b/c/%x1';
  178. $this->assertFalse( Zend_OpenId::normalizeUrl($url) );
  179. $url = 'example://a/b/c/%1x';
  180. $this->assertFalse( Zend_OpenId::normalizeUrl($url) );
  181. $url = 'eXAMPLE://A/b/c/x%20y';
  182. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  183. $this->assertSame( 'example://a/b/c/x%20y', $url );
  184. $url = 'example://host/.a/b/c';
  185. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  186. $this->assertSame( 'example://host/.a/b/c', $url );
  187. $url = 'a/b/c';
  188. $this->assertFalse( Zend_OpenId::normalizeUrl($url) );
  189. $url = 'example://:80/a/b/c';
  190. $this->assertFalse( Zend_OpenId::normalizeUrl($url) );
  191. $url = 'example://host/a/.b/c';
  192. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  193. $this->assertSame( 'example://host/a/.b/c', $url );
  194. $url = 'example://host/a/b/.c';
  195. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  196. $this->assertSame( 'example://host/a/b/.c', $url );
  197. $url = 'example://host/..a/b/c';
  198. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  199. $this->assertSame( 'example://host/..a/b/c', $url );
  200. $url = 'example://host/a/..b/c';
  201. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  202. $this->assertSame( 'example://host/a/..b/c', $url );
  203. $url = 'example://host/a/b/..c';
  204. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  205. $this->assertSame( 'example://host/a/b/..c', $url );
  206. $url = 'example://host/./b/c';
  207. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  208. $this->assertSame( 'example://host/b/c', $url );
  209. $url = 'example://host/a/./c';
  210. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  211. $this->assertSame( 'example://host/a/c', $url );
  212. $url = 'example://host/a/b/.';
  213. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  214. $this->assertSame( 'example://host/a/b', $url );
  215. $url = 'example://host/a/b/./';
  216. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  217. $this->assertSame( 'example://host/a/b/', $url );
  218. $url = 'example://host/../b/c';
  219. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  220. $this->assertSame( 'example://host/b/c', $url );
  221. $url = 'example://host/a/../c';
  222. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  223. $this->assertSame( 'example://host/c', $url );
  224. $url = 'example://host/a/b/..';
  225. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  226. $this->assertSame( 'example://host/a', $url );
  227. $url = 'example://host/a/b/../';
  228. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  229. $this->assertSame( 'example://host/a/', $url );
  230. $url = 'example://host/a/b/c/..';
  231. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  232. $this->assertSame( 'example://host/a/b', $url );
  233. $url = 'example://host/a/b/c/../..';
  234. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  235. $this->assertSame( 'example://host/a', $url );
  236. $url = 'example://host/a/b/c/../../..';
  237. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  238. $this->assertSame( 'example://host/', $url );
  239. $url = 'example://host///a///b///c///..///../d';
  240. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  241. $this->assertSame( 'example://host/a/d', $url );
  242. $url = 'example://host///a///b///c///.///./d';
  243. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  244. $this->assertSame( 'example://host/a/b/c/d', $url );
  245. $url = 'example://host///a///b///c///..///./d';
  246. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  247. $this->assertSame( 'example://host/a/b/d', $url );
  248. $url = 'example://host///a///b///c///.///../d';
  249. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  250. $this->assertSame( 'example://host/a/b/d', $url );
  251. $url = 'http://example.com';
  252. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  253. $this->assertSame( 'http://example.com/', $url );
  254. $url = 'http://example.com/';
  255. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  256. $this->assertSame( 'http://example.com/', $url );
  257. $url = 'http://example.com:';
  258. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  259. $this->assertSame( 'http://example.com/', $url );
  260. $url = 'http://example.com:80/';
  261. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  262. $this->assertSame( 'http://example.com/', $url );
  263. $url = 'https://example.com:443/';
  264. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  265. $this->assertSame( 'https://example.com/', $url );
  266. $url = 'http://example.com?';
  267. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  268. $this->assertSame( 'http://example.com/?', $url );
  269. $url = 'http://example.com/?';
  270. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  271. $this->assertSame( 'http://example.com/?', $url );
  272. $url = 'http://example.com/test.php?Foo=Bar#Baz';
  273. $this->assertTrue( Zend_OpenId::normalizeUrl($url) );
  274. $this->assertSame( 'http://example.com/test.php?Foo=Bar', $url );
  275. }
  276. /**
  277. * testing testNormalize
  278. *
  279. */
  280. public function testNormalize()
  281. {
  282. $url = '';
  283. $this->assertTrue( Zend_OpenId::normalize($url) );
  284. $this->assertSame( '', $url );
  285. $url = ' localhost ';
  286. $this->assertTrue( Zend_OpenId::normalize($url) );
  287. $this->assertSame( 'http://localhost/', $url );
  288. $url = 'xri://$ip*127.0.0.1';
  289. $this->assertTrue( Zend_OpenId::normalize($url) );
  290. $this->assertSame( 'http://127.0.0.1/', $url );
  291. $url = 'xri://$dns*localhost';
  292. $this->assertTrue( Zend_OpenId::normalize($url) );
  293. $this->assertSame( 'http://localhost/', $url );
  294. $url = 'xri://localhost';
  295. $this->assertTrue( Zend_OpenId::normalize($url) );
  296. $this->assertSame( 'http://localhost/', $url );
  297. $url = '=name';
  298. $this->assertTrue( Zend_OpenId::normalize($url) );
  299. $this->assertSame( '=name', $url );
  300. $url = '@name';
  301. $this->assertTrue( Zend_OpenId::normalize($url) );
  302. $this->assertSame( '@name', $url );
  303. $url = '+name';
  304. $this->assertTrue( Zend_OpenId::normalize($url) );
  305. $this->assertSame( '+name', $url );
  306. $url = '$name';
  307. $this->assertTrue( Zend_OpenId::normalize($url) );
  308. $this->assertSame( '$name', $url );
  309. $url = '!name';
  310. $this->assertTrue( Zend_OpenId::normalize($url) );
  311. $this->assertSame( '!name', $url );
  312. $url = 'localhost';
  313. $this->assertTrue( Zend_OpenId::normalize($url) );
  314. $this->assertSame( 'http://localhost/', $url );
  315. $url = 'http://localhost';
  316. $this->assertTrue( Zend_OpenId::normalize($url) );
  317. $this->assertSame( 'http://localhost/', $url );
  318. $url = 'https://localhost';
  319. $this->assertTrue( Zend_OpenId::normalize($url) );
  320. $this->assertSame( 'https://localhost/', $url );
  321. }
  322. /**
  323. * testing testRedirect
  324. *
  325. */
  326. public function testRedirect()
  327. {
  328. $response = new Zend_OpenId_ResponseHelper(true);
  329. Zend_OpenId::redirect("http://www.test.com/", null, $response, 'GET');
  330. $this->assertSame( 302, $response->getHttpResponseCode() );
  331. $this->assertSame( array(), $response->getRawHeaders() );
  332. $headers = $response->getHeaders();
  333. $this->assertTrue( is_array($headers) );
  334. $this->assertSame( 1, count($headers) );
  335. $this->assertTrue( is_array($headers[0]) );
  336. $this->assertSame( 3, count($headers[0]) );
  337. $this->assertSame( 'Location', $headers[0]['name'] );
  338. $this->assertSame( 'http://www.test.com/', $headers[0]['value'] );
  339. $this->assertSame( true, $headers[0]['replace'] );
  340. $this->assertSame( '', $response->getBody() );
  341. $response = new Zend_OpenId_ResponseHelper(true);
  342. Zend_OpenId::redirect("http://www.test.com/test.php?a=b", null, $response, 'GET');
  343. $headers = $response->getHeaders();
  344. $this->assertSame( 'http://www.test.com/test.php?a=b', $headers[0]['value'] );
  345. $response = new Zend_OpenId_ResponseHelper(true);
  346. Zend_OpenId::redirect("http://www.test.com/test.php", array('a'=>'b'), $response, 'GET');
  347. $headers = $response->getHeaders();
  348. $this->assertSame( 'http://www.test.com/test.php?a=b', $headers[0]['value'] );
  349. $response = new Zend_OpenId_ResponseHelper(true);
  350. Zend_OpenId::redirect("http://www.test.com/test.php", array('a'=>'b', 'c'=>'d'), $response, 'GET');
  351. $headers = $response->getHeaders();
  352. $this->assertSame( 'http://www.test.com/test.php?a=b&c=d', $headers[0]['value'] );
  353. $response = new Zend_OpenId_ResponseHelper(true);
  354. Zend_OpenId::redirect("http://www.test.com/test.php?a=b", array('c'=>'d'), $response, 'GET');
  355. $headers = $response->getHeaders();
  356. $this->assertSame( 'http://www.test.com/test.php?a=b&c=d', $headers[0]['value'] );
  357. $response = new Zend_OpenId_ResponseHelper(true);
  358. Zend_OpenId::redirect("http://www.test.com/test.php", array('a'=>'x y'), $response, 'GET');
  359. $headers = $response->getHeaders();
  360. $this->assertSame( 'http://www.test.com/test.php?a=x+y', $headers[0]['value'] );
  361. $response = new Zend_OpenId_ResponseHelper(false);
  362. Zend_OpenId::redirect("http://www.test.com/", null, $response, 'GET');
  363. $this->assertSame( 200, $response->getHttpResponseCode() );
  364. $this->assertSame( array(), $response->getRawHeaders() );
  365. $this->assertSame( array(), $response->getHeaders() );
  366. $this->assertSame(
  367. "<script language=\"JavaScript\" type=\"text/javascript\">window.location='http://www.test.com/';</script>",
  368. $response->getBody() );
  369. $response = new Zend_OpenId_ResponseHelper(false);
  370. Zend_OpenId::redirect("http://www.test.com/test.php?a=b", null, $response, 'GET');
  371. $this->assertSame(
  372. "<script language=\"JavaScript\" type=\"text/javascript\">window.location='http://www.test.com/test.php?a=b';</script>",
  373. $response->getBody() );
  374. $response = new Zend_OpenId_ResponseHelper(false);
  375. Zend_OpenId::redirect("http://www.test.com/test.php", array('a'=>'b'), $response, 'GET');
  376. $this->assertSame(
  377. "<script language=\"JavaScript\" type=\"text/javascript\">window.location='http://www.test.com/test.php?a=b';</script>",
  378. $response->getBody() );
  379. $response = new Zend_OpenId_ResponseHelper(false);
  380. Zend_OpenId::redirect("http://www.test.com/test.php", array('a'=>'b','c'=>'d'), $response, 'GET');
  381. $this->assertSame(
  382. "<script language=\"JavaScript\" type=\"text/javascript\">window.location='http://www.test.com/test.php?a=b&c=d';</script>",
  383. $response->getBody() );
  384. $response = new Zend_OpenId_ResponseHelper(false);
  385. Zend_OpenId::redirect("http://www.test.com/test.php?a=b", array('c'=>'d'), $response, 'GET');
  386. $this->assertSame(
  387. "<script language=\"JavaScript\" type=\"text/javascript\">window.location='http://www.test.com/test.php?a=b&c=d';</script>",
  388. $response->getBody() );
  389. $response = new Zend_OpenId_ResponseHelper(false);
  390. Zend_OpenId::redirect("http://www.test.com/test.php", array('a'=>'x y'), $response, 'GET');
  391. $this->assertSame(
  392. "<script language=\"JavaScript\" type=\"text/javascript\">window.location='http://www.test.com/test.php?a=x+y';</script>",
  393. $response->getBody() );
  394. $response = new Zend_OpenId_ResponseHelper(true);
  395. Zend_OpenId::redirect("http://www.test.com/", null, $response, 'POST');
  396. $this->assertSame( 200, $response->getHttpResponseCode() );
  397. $this->assertSame( array(), $response->getRawHeaders() );
  398. $this->assertSame( array(), $response->getHeaders() );
  399. $this->assertSame(
  400. "<html><body onLoad=\"document.forms[0].submit();\">\n" .
  401. "<form method=\"POST\" action=\"http://www.test.com/\">\n" .
  402. "<input type=\"submit\" value=\"Continue OpenID transaction\">\n" .
  403. "</form></body></html>\n",
  404. $response->getBody() );
  405. $response = new Zend_OpenId_ResponseHelper(true);
  406. Zend_OpenId::redirect("http://www.test.com/test.php?a=b", array('a'=>'b'), $response, 'POST');
  407. $this->assertSame(
  408. "<html><body onLoad=\"document.forms[0].submit();\">\n" .
  409. "<form method=\"POST\" action=\"http://www.test.com/test.php?a=b\">\n" .
  410. "<input type=\"hidden\" name=\"a\" value=\"b\">\n" .
  411. "<input type=\"submit\" value=\"Continue OpenID transaction\">\n" .
  412. "</form></body></html>\n",
  413. $response->getBody() );
  414. $response = new Zend_OpenId_ResponseHelper(true);
  415. Zend_OpenId::redirect("http://www.test.com/test.php?a=b", array('a'=>'b','c'=>'d'), $response, 'POST');
  416. $this->assertSame(
  417. "<html><body onLoad=\"document.forms[0].submit();\">\n" .
  418. "<form method=\"POST\" action=\"http://www.test.com/test.php?a=b\">\n" .
  419. "<input type=\"hidden\" name=\"a\" value=\"b\">\n" .
  420. "<input type=\"hidden\" name=\"c\" value=\"d\">\n" .
  421. "<input type=\"submit\" value=\"Continue OpenID transaction\">\n" .
  422. "</form></body></html>\n",
  423. $response->getBody() );
  424. }
  425. /**
  426. * testing testRedirect
  427. *
  428. */
  429. public function testRandomBytes()
  430. {
  431. $this->assertSame( '', Zend_OpenId::randomBytes(0) );
  432. $x = Zend_OpenId::randomBytes(1);
  433. $this->assertTrue( is_string($x) );
  434. $this->assertSame( 1, strlen($x) );
  435. $x = Zend_OpenId::randomBytes(1024);
  436. $this->assertTrue( is_string($x) );
  437. $this->assertSame( 1024, strlen($x) );
  438. }
  439. /**
  440. * testing testDigest
  441. *
  442. */
  443. public function testDigest()
  444. {
  445. $this->assertSame(
  446. 'aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d',
  447. bin2hex(Zend_OpenId::digest('sha1', 'hello')) );
  448. $this->assertSame(
  449. '2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824',
  450. bin2hex(Zend_OpenId::digest('sha256', 'hello')) );
  451. }
  452. /**
  453. * testing testHashHmac
  454. *
  455. */
  456. public function testHashHmac()
  457. {
  458. $key = 'password';
  459. $this->assertSame(
  460. '1f48abc79459fa853af681ddb3c73ff7f35c48fb',
  461. bin2hex(Zend_OpenId::hashHmac('sha1', 'hello', $key)) );
  462. $this->assertSame(
  463. '7ae615e698567e5e1512dd8140e740bd4d65dfa4db195d80ca327de6302b4a63',
  464. bin2hex(Zend_OpenId::hashHmac('sha256', 'hello', $key)) );
  465. $key = str_repeat('x',128);
  466. $this->assertSame(
  467. '59c6c30dc9fb96b2cb2d7c41dbc6f96d1fbf67ac',
  468. bin2hex(Zend_OpenId::hashHmac('sha1', 'hello', $key)) );
  469. $this->assertSame(
  470. 'f5e0c31f7cdd272710052ac3ebcc40d7e82be2427b7e5e1e8373ef1e327515f4',
  471. bin2hex(Zend_OpenId::hashHmac('sha256', 'hello', $key)) );
  472. }
  473. /**
  474. * testing testCreateDhKey
  475. *
  476. */
  477. public function testCreateDhKey()
  478. {
  479. try {
  480. $dh = Zend_OpenId::createDhKey(
  481. pack('H*', '0233'),
  482. pack('H*', '05'),
  483. pack('H*', '09'));
  484. $dh_details = Zend_OpenId::getDhKeyDetails($dh);
  485. $this->assertTrue( is_array($dh_details) );
  486. $this->assertSame( 4, count($dh_details));
  487. $this->assertSame( '0233', bin2hex($dh_details['p']) );
  488. $this->assertSame( '05', bin2hex($dh_details['g']) );
  489. $this->assertSame( '09', bin2hex($dh_details['priv_key']) );
  490. $this->assertSame( '4e', bin2hex($dh_details['pub_key']) );
  491. $dh = Zend_OpenId::createDhKey(
  492. pack('H*', '0233'),
  493. pack('H*', '02'),
  494. pack('H*', '09'));
  495. $dh_details = Zend_OpenId::getDhKeyDetails($dh);
  496. $this->assertTrue( is_array($dh_details) );
  497. $this->assertSame( 4, count($dh_details) );
  498. $this->assertSame( '0233', bin2hex($dh_details['p']) );
  499. $this->assertSame( '02', bin2hex($dh_details['g']) );
  500. $this->assertSame( '09', bin2hex($dh_details['priv_key']) );
  501. $this->assertSame( '0200', bin2hex($dh_details['pub_key']) );
  502. $dh = Zend_OpenId::createDhKey(
  503. pack('H*', '0233'),
  504. pack('H*', '02'));
  505. $dh_details = Zend_OpenId::getDhKeyDetails($dh);
  506. $this->assertTrue( is_array($dh_details) );
  507. $this->assertSame( 4, count($dh_details) );
  508. $this->assertSame( '0233', bin2hex($dh_details['p']) );
  509. $this->assertSame( '02', bin2hex($dh_details['g']) );
  510. $this->assertTrue( is_string($dh_details['priv_key']) );
  511. $this->assertTrue( strlen($dh_details['priv_key']) > 0 );
  512. $this->assertTrue( is_string($dh_details['pub_key']) );
  513. $this->assertTrue( strlen($dh_details['pub_key']) > 0 );
  514. } catch (Zend_OpenId_Exception $e) {
  515. $this->markTestSkipped($e->getMessage());
  516. }
  517. }
  518. /**
  519. * testing testComputeDhSecret
  520. *
  521. */
  522. public function testComputeDhSecret()
  523. {
  524. try {
  525. $alice = Zend_OpenId::createDhKey(
  526. pack('H*', '0233'),
  527. pack('H*', '05'),
  528. pack('H*', '09'));
  529. $alice_details = Zend_OpenId::getDhKeyDetails($alice);
  530. $this->assertSame( '4e', bin2hex($alice_details['pub_key']) );
  531. $bob = Zend_OpenId::createDhKey(
  532. pack('H*', '0233'),
  533. pack('H*', '05'),
  534. pack('H*', '0e'));
  535. $bob_details = Zend_OpenId::getDhKeyDetails($bob);
  536. $this->assertSame( '0216', bin2hex($bob_details['pub_key']) );
  537. $this->assertSame( '75',
  538. bin2hex(Zend_OpenId::computeDhSecret($alice_details['pub_key'], $bob)) );
  539. $this->assertSame( '75',
  540. bin2hex(Zend_OpenId::computeDhSecret($bob_details['pub_key'], $alice)) );
  541. } catch (Zend_OpenId_Exception $e) {
  542. $this->markTestSkipped($e->getMessage());
  543. }
  544. }
  545. /**
  546. * testing testBtwoc
  547. *
  548. */
  549. public function testBtwoc()
  550. {
  551. $this->assertSame( '00', bin2hex(Zend_OpenId::btwoc(pack('H*', '00'))) );
  552. $this->assertSame( '01', bin2hex(Zend_OpenId::btwoc(pack('H*', '01'))) );
  553. $this->assertSame( '7e', bin2hex(Zend_OpenId::btwoc(pack('H*', '7e'))) );
  554. $this->assertSame( '78', bin2hex(Zend_OpenId::btwoc(pack('H*', '78'))) );
  555. $this->assertSame( '0080', bin2hex(Zend_OpenId::btwoc(pack('H*', '80'))) );
  556. $this->assertSame( '0081', bin2hex(Zend_OpenId::btwoc(pack('H*', '81'))) );
  557. $this->assertSame( '00fe', bin2hex(Zend_OpenId::btwoc(pack('H*', 'fe'))) );
  558. $this->assertSame( '00ff', bin2hex(Zend_OpenId::btwoc(pack('H*', 'ff'))) );
  559. }
  560. /**
  561. * testing setSelfUrl
  562. *
  563. */
  564. public function testSetSelfUrl()
  565. {
  566. unset($_SERVER['SCRIPT_URI']);
  567. unset($_SERVER['HTTPS']);
  568. unset($_SERVER['HTTP_HOST']);
  569. unset($_SERVER['SERVER_NAME']);
  570. unset($_SERVER['SERVER_PORT']);
  571. unset($_SERVER['SCRIPT_URL']);
  572. unset($_SERVER['REDIRECT_URL']);
  573. unset($_SERVER['PHP_SELF']);
  574. unset($_SERVER['SCRIPT_NAME']);
  575. unset($_SERVER['PATH_INFO']);
  576. $_SERVER['SCRIPT_URI'] = "http://www.test.com/";
  577. $this->assertSame( 'http://www.test.com/', Zend_OpenId::selfUrl() );
  578. $this->assertSame( null, Zend_OpenId::setSelfUrl("http://localhost/test") );
  579. $this->assertSame( "http://localhost/test", Zend_OpenId::selfUrl() );
  580. $this->assertSame( "http://localhost/test", Zend_OpenId::setSelfUrl() );
  581. $this->assertSame( 'http://www.test.com/', Zend_OpenId::selfUrl() );
  582. $this->assertSame( null, Zend_OpenId::setSelfUrl() );
  583. $this->assertSame( 'http://www.test.com/', Zend_OpenId::selfUrl() );
  584. }
  585. }