OpenIdTest.php 27 KB

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