OpenIdTest.php 27 KB

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