PageRenderTime 26ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 1ms

/cakesocial.local/app/vendors/zend/tests/Zend/OpenId/ProviderTest.php

https://github.com/miamiruby/cakestuff
PHP | 1600 lines | 1308 code | 125 blank | 167 comment | 14 complexity | bb116c4ac1242c9a8f03fcb1e789d6d9 MD5 | raw file
Possible License(s): GPL-2.0, BSD-3-Clause, LGPL-2.0, MIT

Large files files are truncated, but you can click here to view the full file

  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: ProviderTest.php 8724 2008-03-10 11:04:53Z dmitry $
  20. */
  21. /**
  22. * Zend_OpenId
  23. */
  24. require_once 'Zend/OpenId/Provider.php';
  25. /**
  26. * PHPUnit test case
  27. */
  28. require_once 'PHPUnit/Framework.php';
  29. /**
  30. * Zend_OpenId_ResponseHelper
  31. */
  32. require_once 'Zend/OpenId/ResponseHelper.php';
  33. /**
  34. * @package Zend_OpenId
  35. * @subpackage UnitTests
  36. */
  37. class Zend_OpenId_ProviderTest extends PHPUnit_Framework_TestCase
  38. {
  39. const USER = "http://test_user.myopenid.com/";
  40. const PASSWORD = "01234567890abcdef";
  41. const HANDLE = "01234567890abcdef";
  42. private $_user;
  43. public function __construct()
  44. {
  45. $this->_user = new Zend_OpenId_Provider_User_Session();
  46. }
  47. /**
  48. * testing register
  49. *
  50. */
  51. public function testRegister()
  52. {
  53. $storage = new Zend_OpenId_Provider_Storage_File(dirname(__FILE__)."/_files/provider");
  54. $storage->delUser(self::USER);
  55. $provider = new Zend_OpenId_Provider(null, null, $this->_user, $storage);
  56. $this->assertFalse( $storage->checkUser(self::USER, self::PASSWORD) );
  57. // wrong ID
  58. $this->assertFalse( $provider->register("", self::PASSWORD) );
  59. // registration of new user
  60. $this->assertTrue( $provider->register(self::USER, self::PASSWORD) );
  61. // registration of existent user
  62. $this->assertFalse( $provider->register(self::USER, self::PASSWORD) );
  63. $this->assertTrue( $storage->checkUser(self::USER, md5(self::USER . self::PASSWORD)) );
  64. $storage->delUser(self::USER);
  65. }
  66. /**
  67. * testing hasUser
  68. *
  69. */
  70. public function testHasUser()
  71. {
  72. $storage = new Zend_OpenId_Provider_Storage_File(dirname(__FILE__)."/_files/provider");
  73. $storage->delUser(self::USER);
  74. $provider = new Zend_OpenId_Provider(null, null, $this->_user, $storage);
  75. // wrong ID
  76. $this->assertFalse( $provider->hasUser("") );
  77. $this->assertFalse( $provider->hasUser("http://:80/test") );
  78. // check for non existent
  79. $this->assertFalse( $provider->hasUser(self::USER) );
  80. // check for existent user
  81. $this->assertTrue( $storage->addUser(self::USER, self::PASSWORD) );
  82. $this->assertTrue( $provider->hasUser(self::USER) );
  83. $storage->delUser(self::USER);
  84. }
  85. /**
  86. * testing login
  87. *
  88. */
  89. public function testLogin()
  90. {
  91. $storage = new Zend_OpenId_Provider_Storage_File(dirname(__FILE__)."/_files/provider");
  92. $storage->delUser(self::USER);
  93. $this->_user->delLoggedInUser();
  94. $provider = new Zend_OpenId_Provider(null, null, $this->_user, $storage);
  95. // wrong ID
  96. $this->assertFalse( $provider->login("", self::PASSWORD) );
  97. $this->assertFalse( $this->_user->getLoggedInUser() );
  98. $this->assertFalse( $provider->login("http://:80/test", self::PASSWORD) );
  99. $this->assertFalse( $this->_user->getLoggedInUser() );
  100. // login as non existent user
  101. $this->assertFalse( $provider->login(self::USER, self::PASSWORD) );
  102. $this->assertFalse( $this->_user->getLoggedInUser() );
  103. // login as existent user with wrong password
  104. $this->assertTrue( $provider->register(self::USER, self::PASSWORD) );
  105. $this->assertFalse( $provider->login(self::USER, self::PASSWORD . "x") );
  106. $this->assertFalse( $this->_user->getLoggedInUser() );
  107. // login as existent user with proper password
  108. $this->assertTrue( $provider->login(self::USER, self::PASSWORD) );
  109. $this->assertSame( self::USER, $this->_user->getLoggedInUser() );
  110. $storage->delUser(self::USER);
  111. $this->_user->delLoggedInUser();
  112. }
  113. /**
  114. * testing logout
  115. *
  116. */
  117. public function testLogout()
  118. {
  119. $storage = new Zend_OpenId_Provider_Storage_File(dirname(__FILE__)."/_files/provider");
  120. $storage->delUser(self::USER);
  121. $this->_user->delLoggedInUser();
  122. $provider = new Zend_OpenId_Provider(null, null, $this->_user, $storage);
  123. $this->assertFalse( $this->_user->getLoggedInUser() );
  124. $this->assertTrue( $provider->register(self::USER, self::PASSWORD) );
  125. $this->assertFalse( $this->_user->getLoggedInUser() );
  126. $this->assertTrue( $provider->login(self::USER, self::PASSWORD) );
  127. $this->assertSame( self::USER, $this->_user->getLoggedInUser() );
  128. $this->assertTrue( $provider->logout() );
  129. $this->assertFalse( $this->_user->getLoggedInUser() );
  130. $storage->delUser(self::USER);
  131. $this->_user->delLoggedInUser();
  132. }
  133. /**
  134. * testing logout
  135. *
  136. */
  137. public function testLoggedInUser()
  138. {
  139. $storage = new Zend_OpenId_Provider_Storage_File(dirname(__FILE__)."/_files/provider");
  140. $storage->delUser(self::USER);
  141. $this->_user->delLoggedInUser();
  142. $provider = new Zend_OpenId_Provider(null, null, $this->_user, $storage);
  143. $this->assertFalse( $provider->getLoggedInUser() );
  144. $this->assertTrue( $provider->register(self::USER, self::PASSWORD) );
  145. $this->assertFalse( $provider->getLoggedInUser() );
  146. $this->assertTrue( $provider->login(self::USER, self::PASSWORD) );
  147. $this->assertSame( self::USER, $this->_user->getLoggedInUser() );
  148. $this->assertTrue( $provider->logout() );
  149. $this->assertFalse( $provider->getLoggedInUser() );
  150. $storage->delUser(self::USER);
  151. $this->_user->delLoggedInUser();
  152. }
  153. /**
  154. * testing getSiteRoot
  155. *
  156. */
  157. public function testGetSiteRoot()
  158. {
  159. $storage = new Zend_OpenId_Provider_Storage_File(dirname(__FILE__)."/_files/provider");
  160. $provider = new Zend_OpenId_Provider(null, null, $this->_user, $storage);
  161. $params = array(
  162. 'openid_realm' => "http://wrong/",
  163. 'openid_trust_root' => "http://root/",
  164. 'openid_return_to' => "http://wrong/",
  165. );
  166. $this->assertSame( "http://root/", $provider->getSiteRoot($params) );
  167. $params = array(
  168. 'openid_realm' => "http://wrong/",
  169. 'openid_return_to' => "http://root/",
  170. );
  171. $this->assertSame( "http://root/", $provider->getSiteRoot($params) );
  172. $params = array(
  173. 'openid_realm' => "http://wrong/",
  174. );
  175. $this->assertFalse( $provider->getSiteRoot($params) );
  176. $params = array(
  177. 'openid_ns' => Zend_OpenId::NS_2_0,
  178. 'openid_realm' => "http://root/",
  179. 'openid_trust_root' => "http://wrong/",
  180. 'openid_return_to' => "http://wrong/",
  181. );
  182. $this->assertSame( "http://root/", $provider->getSiteRoot($params) );
  183. $params = array(
  184. 'openid_ns' => Zend_OpenId::NS_2_0,
  185. 'openid_trust_root' => "http://wrong/",
  186. 'openid_return_to' => "http://root/",
  187. );
  188. $this->assertSame( "http://root/", $provider->getSiteRoot($params) );
  189. $params = array(
  190. 'openid_ns' => Zend_OpenId::NS_2_0,
  191. 'openid_return_to' => "http://root/",
  192. );
  193. $this->assertSame( "http://root/", $provider->getSiteRoot($params) );
  194. $params = array(
  195. 'openid_ns' => Zend_OpenId::NS_2_0,
  196. );
  197. $this->assertFalse( $provider->getSiteRoot($params) );
  198. $params = array(
  199. 'openid_trust_root' => "",
  200. );
  201. $this->assertFalse( $provider->getSiteRoot($params) );
  202. }
  203. /**
  204. * testing allowSite
  205. *
  206. */
  207. public function testAllowSite()
  208. {
  209. $storage = new Zend_OpenId_Provider_Storage_File(dirname(__FILE__)."/_files/provider");
  210. $storage->delUser(self::USER);
  211. $this->_user->delLoggedInUser();
  212. $provider = new Zend_OpenId_Provider(null, null, $this->_user, $storage);
  213. // not logged in
  214. $this->assertFalse( $provider->allowSite("http://www.test.com/") );
  215. // logged in
  216. $this->assertTrue( $provider->register(self::USER, self::PASSWORD) );
  217. $this->assertTrue( $provider->login(self::USER, self::PASSWORD) );
  218. $this->assertTrue( $provider->allowSite("http://www.test.com/") );
  219. $trusted = $storage->getTrustedSites(self::USER);
  220. $this->assertTrue( is_array($trusted) );
  221. $this->assertSame( 1, count($trusted) );
  222. reset($trusted);
  223. $this->assertSame( "http://www.test.com/", key($trusted) );
  224. $this->assertSame( true, current($trusted) );
  225. // duplicate
  226. $this->assertTrue( $provider->allowSite("http://www.test.com/") );
  227. $trusted = $storage->getTrustedSites(self::USER);
  228. $this->assertTrue( is_array($trusted) );
  229. $this->assertSame( 1, count($trusted) );
  230. reset($trusted);
  231. $this->assertSame( "http://www.test.com/", key($trusted) );
  232. $this->assertSame( true, current($trusted) );
  233. // extensions
  234. $sreg = new Zend_OpenId_Extension_Sreg(array("nickname"=>"test_id"));
  235. $this->assertTrue( $provider->allowSite("http://www.test.com/", $sreg) );
  236. $trusted = $storage->getTrustedSites(self::USER);
  237. $this->assertTrue( is_array($trusted) );
  238. $this->assertSame( 1, count($trusted) );
  239. reset($trusted);
  240. $this->assertSame( "http://www.test.com/", key($trusted) );
  241. $this->assertSame( array('Zend_OpenId_Extension_Sreg'=>array('nickname'=>'test_id')), current($trusted) );
  242. $this->_user->delLoggedInUser();
  243. $storage->delUser(self::USER);
  244. }
  245. /**
  246. * testing denySite
  247. *
  248. */
  249. public function testDenySite()
  250. {
  251. $storage = new Zend_OpenId_Provider_Storage_File(dirname(__FILE__)."/_files/provider");
  252. $storage->delUser(self::USER);
  253. $this->_user->delLoggedInUser();
  254. $provider = new Zend_OpenId_Provider(null, null, $this->_user, $storage);
  255. $sreg = new Zend_OpenId_Extension_Sreg(array("nickname"=>"test_id"));
  256. // not logged in
  257. $this->assertFalse( $provider->denySite("http://www.test.com/") );
  258. $this->assertTrue( $provider->register(self::USER, self::PASSWORD) );
  259. $this->assertTrue( $provider->login(self::USER, self::PASSWORD) );
  260. $this->assertTrue( $provider->allowSite("http://www.test1.com/") );
  261. $this->assertTrue( $provider->allowSite("http://www.test2.com/", $sreg) );
  262. $this->AssertSame( array(
  263. 'http://www.test1.com/' => true,
  264. 'http://www.test2.com/' => array(
  265. 'Zend_OpenId_Extension_Sreg' => array(
  266. 'nickname' => 'test_id'
  267. )
  268. )
  269. ),
  270. $storage->getTrustedSites(self::USER) );
  271. $this->assertTrue( $provider->denySite("http://www.test3.com/") );
  272. $this->AssertSame( array(
  273. 'http://www.test1.com/' => true,
  274. 'http://www.test2.com/' => array(
  275. 'Zend_OpenId_Extension_Sreg' => array(
  276. 'nickname' => 'test_id'
  277. )
  278. ),
  279. 'http://www.test3.com/' => false
  280. ),
  281. $storage->getTrustedSites(self::USER) );
  282. $this->assertTrue( $provider->denySite("http://www.test1.com/") );
  283. $this->AssertSame( array(
  284. 'http://www.test1.com/' => false,
  285. 'http://www.test2.com/' => array(
  286. 'Zend_OpenId_Extension_Sreg' => array(
  287. 'nickname' => 'test_id'
  288. )
  289. ),
  290. 'http://www.test3.com/' => false
  291. ),
  292. $storage->getTrustedSites(self::USER) );
  293. $this->assertTrue( $provider->denySite("http://www.test2.com/") );
  294. $this->AssertSame( array(
  295. 'http://www.test1.com/' => false,
  296. 'http://www.test2.com/' => false,
  297. 'http://www.test3.com/' => false
  298. ),
  299. $storage->getTrustedSites(self::USER) );
  300. $this->_user->delLoggedInUser();
  301. $storage->delUser(self::USER);
  302. }
  303. /**
  304. * testing delSite
  305. *
  306. */
  307. public function testDelSite()
  308. {
  309. $storage = new Zend_OpenId_Provider_Storage_File(dirname(__FILE__)."/_files/provider");
  310. $storage->delUser(self::USER);
  311. $this->_user->delLoggedInUser();
  312. $provider = new Zend_OpenId_Provider(null, null, $this->_user, $storage);
  313. $sreg = new Zend_OpenId_Extension_Sreg(array("nickname"=>"test_id"));
  314. // not logged in
  315. $this->assertFalse( $provider->delSite("http://www.test.com/") );
  316. $this->assertTrue( $provider->register(self::USER, self::PASSWORD) );
  317. $this->assertTrue( $provider->login(self::USER, self::PASSWORD) );
  318. $this->assertTrue( $provider->allowSite("http://www.test1.com/") );
  319. $this->assertTrue( $provider->allowSite("http://www.test2.com/", $sreg) );
  320. $this->AssertSame( array(
  321. 'http://www.test1.com/' => true,
  322. 'http://www.test2.com/' => array(
  323. 'Zend_OpenId_Extension_Sreg' => array(
  324. 'nickname' => 'test_id'
  325. )
  326. )
  327. ),
  328. $storage->getTrustedSites(self::USER) );
  329. $this->assertTrue( $provider->delSite("http://www.test3.com/") );
  330. $this->AssertSame( array(
  331. 'http://www.test1.com/' => true,
  332. 'http://www.test2.com/' => array(
  333. 'Zend_OpenId_Extension_Sreg' => array(
  334. 'nickname' => 'test_id'
  335. )
  336. )
  337. ),
  338. $storage->getTrustedSites(self::USER) );
  339. $this->assertTrue( $provider->delSite("http://www.test1.com/") );
  340. $this->AssertSame( array(
  341. 'http://www.test2.com/' => array(
  342. 'Zend_OpenId_Extension_Sreg' => array(
  343. 'nickname' => 'test_id'
  344. )
  345. )
  346. ),
  347. $storage->getTrustedSites(self::USER) );
  348. $this->assertTrue( $provider->delSite("http://www.test2.com/") );
  349. $this->AssertSame( array(
  350. ),
  351. $storage->getTrustedSites(self::USER) );
  352. $this->_user->delLoggedInUser();
  353. $storage->delUser(self::USER);
  354. }
  355. /**
  356. * testing getTrustedSites
  357. *
  358. */
  359. public function testGetTrustedSites()
  360. {
  361. $storage = new Zend_OpenId_Provider_Storage_File(dirname(__FILE__)."/_files/provider");
  362. $storage->delUser(self::USER);
  363. $this->_user->delLoggedInUser();
  364. $provider = new Zend_OpenId_Provider(null, null, $this->_user, $storage);
  365. $sreg = new Zend_OpenId_Extension_Sreg(array("nickname"=>"test_id"));
  366. $this->assertTrue( $provider->register(self::USER, self::PASSWORD) );
  367. $this->assertTrue( $provider->login(self::USER, self::PASSWORD) );
  368. $this->assertTrue( $provider->allowSite("http://www.test1.com/") );
  369. $this->assertTrue( $provider->allowSite("http://www.test2.com/", $sreg) );
  370. $this->AssertSame( array(
  371. 'http://www.test1.com/' => true,
  372. 'http://www.test2.com/' => array(
  373. 'Zend_OpenId_Extension_Sreg' => array(
  374. 'nickname' => 'test_id'
  375. )
  376. )
  377. ),
  378. $provider->getTrustedSites() );
  379. $this->_user->delLoggedInUser();
  380. $this->AssertFalse( $provider->getTrustedSites() );
  381. $storage->delUser(self::USER);
  382. }
  383. /**
  384. * testing genSecret
  385. *
  386. */
  387. public function testGenSecret()
  388. {
  389. $provider = new Zend_OpenId_ProviderHelper(null, null, $this->_user, new Zend_OpenId_Provider_Storage_File(dirname(__FILE__)."/_files/provider"));
  390. // SHA1
  391. $x = $provider->genSecret("sha1");
  392. $this->assertTrue( is_string($x) );
  393. $this->assertSame( 20, strlen($x) );
  394. // SHA256
  395. $x = $provider->genSecret("sha256");
  396. $this->assertTrue( is_string($x) );
  397. $this->assertSame( 32, strlen($x) );
  398. // invalid function
  399. $this->assertFalse( $provider->genSecret("md5") );
  400. }
  401. /**
  402. * testing _associate
  403. *
  404. */
  405. public function testAssociate()
  406. {
  407. try {
  408. $storage = new Zend_OpenId_Provider_Storage_File(dirname(__FILE__)."/_files/provider");
  409. $provider = new Zend_OpenId_ProviderHelper(null, null, $this->_user, $storage);
  410. // Wrong assoc_type
  411. $ret = $provider->handle(array('openid_mode'=>'associate'));
  412. $res = array();
  413. foreach (explode("\n", $ret) as $line) {
  414. if (!empty($line)) {
  415. list($key, $val) = explode(":", $line, 2);
  416. $res[$key] = $val;
  417. }
  418. }
  419. $this->assertSame( 'unsupported-type', $res['error-code'] );
  420. // Wrong assoc_type (OpenID 2.0)
  421. $ret = $provider->handle(array('openid_ns'=>Zend_OpenId::NS_2_0,
  422. 'openid_mode'=>'associate'));
  423. $res = array();
  424. foreach (explode("\n", $ret) as $line) {
  425. if (!empty($line)) {
  426. list($key, $val) = explode(":", $line, 2);
  427. $res[$key] = $val;
  428. }
  429. }
  430. $this->assertSame( Zend_OpenId::NS_2_0, $res['ns'] );
  431. $this->assertSame( 'unsupported-type', $res['error-code'] );
  432. // Wrong session_type
  433. $ret = $provider->handle(array('openid_mode'=>'associate',
  434. 'openid_assoc_type'=>'HMAC-SHA1',
  435. 'openid_session_type'=>'DH-SHA257'));
  436. $res = array();
  437. foreach (explode("\n", $ret) as $line) {
  438. if (!empty($line)) {
  439. list($key, $val) = explode(":", $line, 2);
  440. $res[$key] = $val;
  441. }
  442. }
  443. $this->assertSame( 'unsupported-type', $res['error-code'] );
  444. // Associaation without encryption
  445. $ret = $provider->handle(array('openid_assoc_type'=>'HMAC-SHA1',
  446. 'openid_mode'=>'associate'));
  447. $res = array();
  448. foreach (explode("\n", $ret) as $line) {
  449. if (!empty($line)) {
  450. list($key, $val) = explode(":", $line, 2);
  451. $res[$key] = $val;
  452. }
  453. }
  454. $this->assertSame( 'HMAC-SHA1', $res['assoc_type'] );
  455. $this->assertTrue( isset($res['mac_key']) );
  456. $this->assertSame( 20, strlen(base64_decode($res['mac_key'])) );
  457. $this->assertTrue( isset($res['assoc_handle']) );
  458. $this->assertSame( '3600', $res['expires_in'] );
  459. $this->assertFalse( isset($res['session_type']) );
  460. $this->assertTrue( $storage->getAssociation($res['assoc_handle'], $macFunc, $secret, $expires) );
  461. $this->assertSame( 'sha1', $macFunc );
  462. $this->assertSame( bin2hex(base64_decode($res['mac_key'])), bin2hex($secret) );
  463. // Associaation without encryption (OpenID 2.0)
  464. $ret = $provider->handle(array('openid_ns'=>Zend_OpenId::NS_2_0,
  465. 'openid_assoc_type'=>'HMAC-SHA256',
  466. 'openid_mode'=>'associate'));
  467. $res = array();
  468. foreach (explode("\n", $ret) as $line) {
  469. if (!empty($line)) {
  470. list($key, $val) = explode(":", $line, 2);
  471. $res[$key] = $val;
  472. }
  473. }
  474. $this->assertSame( Zend_OpenId::NS_2_0, $res['ns'] );
  475. $this->assertSame( 'HMAC-SHA256', $res['assoc_type'] );
  476. $this->assertTrue( isset($res['mac_key']) );
  477. $this->assertSame( 32, strlen(base64_decode($res['mac_key'])) );
  478. $this->assertTrue( isset($res['assoc_handle']) );
  479. $this->assertSame( '3600', $res['expires_in'] );
  480. $this->assertFalse( isset($res['session_type']) );
  481. $this->assertTrue( $storage->getAssociation($res['assoc_handle'], $macFunc, $secret, $expires) );
  482. $this->assertSame( 'sha256', $macFunc );
  483. $this->assertSame( bin2hex(base64_decode($res['mac_key'])), bin2hex($secret) );
  484. // Associaation without encryption (OpenID 2.0)
  485. $ret = $provider->handle(array('openid_ns'=>Zend_OpenId::NS_2_0,
  486. 'openid_assoc_type'=>'HMAC-SHA256',
  487. 'openid_mode'=>'associate',
  488. 'openid_session_type'=>'no-encryption'));
  489. $res = array();
  490. foreach (explode("\n", $ret) as $line) {
  491. if (!empty($line)) {
  492. list($key, $val) = explode(":", $line, 2);
  493. $res[$key] = $val;
  494. }
  495. }
  496. $this->assertSame( Zend_OpenId::NS_2_0, $res['ns'] );
  497. $this->assertSame( 'HMAC-SHA256', $res['assoc_type'] );
  498. $this->assertTrue( isset($res['mac_key']) );
  499. $this->assertSame( 32, strlen(base64_decode($res['mac_key'])) );
  500. $this->assertTrue( isset($res['assoc_handle']) );
  501. $this->assertSame( '3600', $res['expires_in'] );
  502. $this->assertSame( 'no-encryption', $res['session_type'] );
  503. $this->assertTrue( $storage->getAssociation($res['assoc_handle'], $macFunc, $secret, $expires) );
  504. $this->assertSame( 'sha256', $macFunc );
  505. $this->assertSame( bin2hex(base64_decode($res['mac_key'])), bin2hex($secret) );
  506. // Associaation with DH-SHA1 encryption
  507. $ret = $provider->handle(array('openid_assoc_type'=>'HMAC-SHA1',
  508. 'openid_mode'=>'associate',
  509. 'openid_session_type'=>'DH-SHA1',
  510. 'openid_dh_modulus'=>'ANz5OguIOXLsDhmYmsWizjEOHTdxfo2Vcbt2I3MYZuYe91ouJ4mLBX+YkcLiemOcPym2CBRYHNOyyjmG0mg3BVd9RcLn5S3IHHoXGHblzqdLFEi/368Ygo79JRnxTkXjgmY0rxlJ5bU1zIKaSDuKdiI+XUkKJX8Fvf8W8vsixYOr',
  511. 'openid_dh_gen'=>'Ag==',
  512. 'openid_dh_consumer_public'=>'RqexRm+Zn5s3sXxFBjI9WfCOBwBDDQBKPzX4fjMGl3YEJh5tx8SVo7awgwuqsliR+nvjmRh5kSFIGv8YSCsy88v1CcAfWUGfjehO9euxQcXOYJnNGbl6GQrE2FYe2RCvML4Yi8eYCYtCQi0wlDE7BJXGSVPXFzj/ru0lR/voPpk=',
  513. ));
  514. $res = array();
  515. foreach (explode("\n", $ret) as $line) {
  516. if (!empty($line)) {
  517. list($key, $val) = explode(":", $line, 2);
  518. $res[$key] = $val;
  519. }
  520. }
  521. $this->assertSame( 'HMAC-SHA1', $res['assoc_type'] );
  522. $this->assertSame( 'DH-SHA1', $res['session_type'] );
  523. $this->assertTrue( isset($res['dh_server_public']) );
  524. $this->assertTrue( isset($res['enc_mac_key']) );
  525. $this->assertSame( 20, strlen(base64_decode($res['enc_mac_key'])) );
  526. $this->assertTrue( isset($res['assoc_handle']) );
  527. $this->assertSame( '3600', $res['expires_in'] );
  528. $this->assertTrue( $storage->getAssociation($res['assoc_handle'], $macFunc, $secret, $expires) );
  529. $this->assertSame( 'sha1', $macFunc );
  530. // Associaation with DH-SHA256 encryption (OpenID 2.0)
  531. $ret = $provider->handle(array('openid_ns'=>Zend_OpenId::NS_2_0,
  532. 'openid_assoc_type'=>'HMAC-SHA256',
  533. 'openid_mode'=>'associate',
  534. 'openid_session_type'=>'DH-SHA256',
  535. 'openid_dh_modulus'=>'ANz5OguIOXLsDhmYmsWizjEOHTdxfo2Vcbt2I3MYZuYe91ouJ4mLBX+YkcLiemOcPym2CBRYHNOyyjmG0mg3BVd9RcLn5S3IHHoXGHblzqdLFEi/368Ygo79JRnxTkXjgmY0rxlJ5bU1zIKaSDuKdiI+XUkKJX8Fvf8W8vsixYOr',
  536. 'openid_dh_gen'=>'Ag==',
  537. 'openid_dh_consumer_public'=>'RqexRm+Zn5s3sXxFBjI9WfCOBwBDDQBKPzX4fjMGl3YEJh5tx8SVo7awgwuqsliR+nvjmRh5kSFIGv8YSCsy88v1CcAfWUGfjehO9euxQcXOYJnNGbl6GQrE2FYe2RCvML4Yi8eYCYtCQi0wlDE7BJXGSVPXFzj/ru0lR/voPpk=',
  538. ));
  539. $res = array();
  540. foreach (explode("\n", $ret) as $line) {
  541. if (!empty($line)) {
  542. list($key, $val) = explode(":", $line, 2);
  543. $res[$key] = $val;
  544. }
  545. }
  546. $this->assertSame( 'HMAC-SHA256', $res['assoc_type'] );
  547. $this->assertSame( 'DH-SHA256', $res['session_type'] );
  548. $this->assertTrue( isset($res['dh_server_public']) );
  549. $this->assertTrue( isset($res['enc_mac_key']) );
  550. $this->assertSame( 32, strlen(base64_decode($res['enc_mac_key'])) );
  551. $this->assertTrue( isset($res['assoc_handle']) );
  552. $this->assertSame( '3600', $res['expires_in'] );
  553. $this->assertTrue( $storage->getAssociation($res['assoc_handle'], $macFunc, $secret, $expires) );
  554. $this->assertSame( 'sha256', $macFunc );
  555. } catch (Zend_OpenId_Exception $e) {
  556. $this->markTestSkipped($e->getMessage());
  557. }
  558. }
  559. /**
  560. * testing _checkAuthentication
  561. *
  562. */
  563. public function testCheckAuthentication()
  564. {
  565. $storage = new Zend_OpenId_Provider_Storage_File(dirname(__FILE__)."/_files/provider");
  566. $provider = new Zend_OpenId_ProviderHelper(null, null, $this->_user, $storage);
  567. // Wrong arguments
  568. $ret = $provider->handle(array('openid_mode'=>'check_authentication'));
  569. $res = array();
  570. foreach (explode("\n", $ret) as $line) {
  571. if (!empty($line)) {
  572. list($key, $val) = explode(":", $line, 2);
  573. $res[$key] = $val;
  574. }
  575. }
  576. $this->assertSame( 'id_res', $res['openid.mode'] );
  577. $this->assertSame( 'false', $res['is_valid'] );
  578. // Wrong arguments (OpenID 2.0)
  579. $ret = $provider->handle(array('openid_ns'=>Zend_OpenId::NS_2_0,
  580. 'openid_mode'=>'check_authentication'));
  581. $res = array();
  582. foreach (explode("\n", $ret) as $line) {
  583. if (!empty($line)) {
  584. list($key, $val) = explode(":", $line, 2);
  585. $res[$key] = $val;
  586. }
  587. }
  588. $this->assertSame( Zend_OpenId::NS_2_0, $res['ns'] );
  589. $this->assertSame( 'id_res', $res['openid.mode'] );
  590. $this->assertSame( 'false', $res['is_valid'] );
  591. // Wrong session id
  592. $storage->delAssociation(self::HANDLE);
  593. $ret = $provider->handle(array('openid_mode'=>'check_authentication',
  594. 'openid_assoc_handle'=>self::HANDLE));
  595. $res = array();
  596. foreach (explode("\n", $ret) as $line) {
  597. if (!empty($line)) {
  598. list($key, $val) = explode(":", $line, 2);
  599. $res[$key] = $val;
  600. }
  601. }
  602. $this->assertSame( 'id_res', $res['openid.mode'] );
  603. $this->assertSame( 'false', $res['is_valid'] );
  604. // Proper session signed with HAMC-SHA256
  605. $storage->addAssociation(self::HANDLE, "sha1", pack("H*", '0102030405060708091011121314151617181920'), time() + 3660);
  606. $ret = $provider->handle(array('openid_mode'=>'check_authentication',
  607. 'openid_assoc_handle'=>self::HANDLE,
  608. 'openid_signed'=>'mode,assoc_handle,signed',
  609. 'openid_sig'=>'IgLZCOXmEPowYl6yyFZjYL4ZTtQ='));
  610. $res = array();
  611. foreach (explode("\n", $ret) as $line) {
  612. if (!empty($line)) {
  613. list($key, $val) = explode(":", $line, 2);
  614. $res[$key] = $val;
  615. }
  616. }
  617. $this->assertSame( 'id_res', $res['openid.mode'] );
  618. $this->assertSame( 'true', $res['is_valid'] );
  619. // Proper session signed with HAMC-SHA256
  620. $storage->delAssociation(self::HANDLE);
  621. $storage->addAssociation(self::HANDLE, "sha256", pack("H*", '0102030405060708091011121314151617181920212223242526272829303132'), time() + 3660);
  622. $ret = $provider->handle(array('openid_mode'=>'check_authentication',
  623. 'openid_assoc_handle'=>self::HANDLE,
  624. 'openid_signed'=>'mode,assoc_handle,signed',
  625. 'openid_sig'=>'xoJcXj30L1N7QRir7I2ovop1SaijXnAI97X/yH+kvck='));
  626. $res = array();
  627. foreach (explode("\n", $ret) as $line) {
  628. if (!empty($line)) {
  629. list($key, $val) = explode(":", $line, 2);
  630. $res[$key] = $val;
  631. }
  632. }
  633. $this->assertSame( 'id_res', $res['openid.mode'] );
  634. $this->assertSame( 'true', $res['is_valid'] );
  635. // Wrong signature
  636. $storage->delAssociation(self::HANDLE);
  637. $storage->addAssociation(self::HANDLE, "sha256", pack("H*", '0102030405060708091011121314151617181920212223242526272829303132'), time() + 3660);
  638. $ret = $provider->handle(array('openid_ns'=>Zend_OpenId::NS_2_0,
  639. 'openid_mode'=>'check_authentication',
  640. 'openid_assoc_handle'=>self::HANDLE,
  641. 'openid_signed'=>'ns,mode,assoc_handle,signed',
  642. 'openid_sig'=>'xoJcXj30L1N7QRir7I2ovop1SaijXnAI97X/yH+kvck='));
  643. $res = array();
  644. foreach (explode("\n", $ret) as $line) {
  645. if (!empty($line)) {
  646. list($key, $val) = explode(":", $line, 2);
  647. $res[$key] = $val;
  648. }
  649. }
  650. $this->assertSame( 'id_res', $res['openid.mode'] );
  651. $this->assertSame( 'false', $res['is_valid'] );
  652. $storage->delAssociation(self::HANDLE);
  653. }
  654. /**
  655. * testing respondToConsumer
  656. *
  657. */
  658. public function testRespondToConsumer()
  659. {
  660. $storage = new Zend_OpenId_Provider_Storage_File(dirname(__FILE__)."/_files/provider");
  661. $provider = new Zend_OpenId_ProviderHelper(null, null, $this->_user, $storage);
  662. // dumb mode
  663. $response = new Zend_OpenId_ResponseHelper(true);
  664. $storage->delAssociation(self::HANDLE);
  665. $this->assertTrue( $provider->respondToConsumer(array(
  666. 'openid_assoc_handle' => self::HANDLE,
  667. 'openid_return_to' => 'http://www.test.com/test.php'
  668. ), null, $response) );
  669. $headers = $response->getHeaders();
  670. $this->assertSame( 'Location', $headers[0]['name'] );
  671. $url = parse_url($headers[0]['value']);
  672. $this->assertSame( 'www.test.com', $url['host'] );
  673. $this->assertSame( '/test.php', $url['path'] );
  674. $ret = array();
  675. foreach (explode('&', $url['query']) as $line) {
  676. list($key,$val) = explode('=', $line, 2);
  677. $ret[$key] = urldecode($val);
  678. }
  679. $this->assertSame( 'id_res', $ret['openid.mode'] );
  680. $this->assertSame( 'http://www.test.com/test.php', $ret['openid.return_to'] );
  681. $this->assertTrue( isset($ret['openid.assoc_handle']) );
  682. $this->assertTrue( isset($ret['openid.response_nonce']) );
  683. $this->assertTrue( isset($ret['openid.signed']) );
  684. $this->assertTrue( isset($ret['openid.sig']) );
  685. $this->assertTrue( $storage->getAssociation($ret['openid.assoc_handle'], $macFunc, $secret, $expires) );
  686. $this->assertSame( 'sha1', $macFunc );
  687. // OpenID 2.0 with SHA256
  688. $_SERVER['SCRIPT_URI'] = "http://www.test.com/endpoint.php";
  689. $response = new Zend_OpenId_ResponseHelper(true);
  690. $storage->addAssociation(self::HANDLE, "sha256", pack("H*", '0102030405060708091011121314151617181920212223242526272829303132'), time() + 3660);
  691. $this->assertTrue( $provider->respondToConsumer(array(
  692. 'openid_ns' => Zend_OpenId::NS_2_0,
  693. 'openid_assoc_handle' => self::HANDLE,
  694. 'openid_return_to' => 'http://www.test.com/test.php'
  695. ), null, $response) );
  696. $headers = $response->getHeaders();
  697. $this->assertSame( 'Location', $headers[0]['name'] );
  698. $url = parse_url($headers[0]['value']);
  699. $this->assertSame( 'www.test.com', $url['host'] );
  700. $this->assertSame( '/test.php', $url['path'] );
  701. $ret = array();
  702. foreach (explode('&', $url['query']) as $line) {
  703. list($key,$val) = explode('=', $line, 2);
  704. $ret[$key] = urldecode($val);
  705. }
  706. $this->assertSame( 'id_res', $ret['openid.mode'] );
  707. $this->assertSame( 'http://www.test.com/test.php', $ret['openid.return_to'] );
  708. $this->assertSame( self::HANDLE, $ret['openid.assoc_handle'] );
  709. $this->assertTrue( isset($ret['openid.response_nonce']) );
  710. $this->assertTrue( isset($ret['openid.signed']) );
  711. $this->assertTrue( isset($ret['openid.sig']) );
  712. $this->assertSame( Zend_OpenId::NS_2_0, $ret['openid.ns'] );
  713. $this->assertSame( "http://www.test.com/endpoint.php", $ret['openid.op_endpoint'] );
  714. $this->assertTrue( $storage->getAssociation(self::HANDLE, $macFunc, $secret, $expires) );
  715. $this->assertSame( 'sha256', $macFunc );
  716. $storage->delAssociation(self::HANDLE);
  717. // OpenID 1.1 with SHA1
  718. $storage->addAssociation(self::HANDLE, "sha1", pack("H*", '0102030405060708091011121314151617181920'), time() + 3660);
  719. $response = new Zend_OpenId_ResponseHelper(true);
  720. $ret = $provider->respondToConsumer(array(
  721. 'openid_assoc_handle' => self::HANDLE,
  722. 'openid_return_to' => 'http://www.test.com/test.php',
  723. 'openid_claimed_id' => 'http://claimed_id/',
  724. 'openid_identity' => 'http://identity/',
  725. 'openid_unknown' => 'http://www.test.com/test.php',
  726. ), null, $response);
  727. $headers = $response->getHeaders();
  728. $this->assertSame( 'Location', $headers[0]['name'] );
  729. $url = parse_url($headers[0]['value']);
  730. $this->assertSame( 'www.test.com', $url['host'] );
  731. $this->assertSame( '/test.php', $url['path'] );
  732. $ret = array();
  733. foreach (explode('&', $url['query']) as $line) {
  734. list($key,$val) = explode('=', $line, 2);
  735. $ret[$key] = urldecode($val);
  736. }
  737. $this->assertSame( 'id_res', $ret['openid.mode'] );
  738. $this->assertSame( 'http://www.test.com/test.php', $ret['openid.return_to'] );
  739. $this->assertSame( self::HANDLE, $ret['openid.assoc_handle'] );
  740. $this->assertTrue( isset($ret['openid.response_nonce']) );
  741. $this->assertTrue( isset($ret['openid.signed']) );
  742. $this->assertTrue( isset($ret['openid.sig']) );
  743. $this->assertFalse( isset($ret['openid.ns']) );
  744. $this->assertFalse( isset($ret['openid.op_endpoint']) );
  745. $this->assertSame( 'http://claimed_id/', $ret['openid.claimed_id'] );
  746. $this->assertSame( 'http://identity/', $ret['openid.identity'] );
  747. $this->assertFalse( isset($ret['openid.unknown']) );
  748. $this->assertTrue( $storage->getAssociation(self::HANDLE, $macFunc, $secret, $expires) );
  749. $this->assertSame( 'sha1', $macFunc );
  750. $storage->delAssociation(self::HANDLE);
  751. // extensions
  752. $sreg = new Zend_OpenId_Extension_Sreg(array("nickname"=>"test_id"));
  753. $response = new Zend_OpenId_ResponseHelper(true);
  754. $this->assertTrue( $provider->respondToConsumer(array(
  755. 'openid_return_to' => 'http://www.test.com/test.php',
  756. ), $sreg, $response) );
  757. $headers = $response->getHeaders();
  758. $this->assertSame( 'Location', $headers[0]['name'] );
  759. $url = parse_url($headers[0]['value']);
  760. $this->assertSame( 'www.test.com', $url['host'] );
  761. $this->assertSame( '/test.php', $url['path'] );
  762. $ret = array();
  763. foreach (explode('&', $url['query']) as $line) {
  764. list($key,$val) = explode('=', $line, 2);
  765. $ret[$key] = urldecode($val);
  766. }
  767. $this->assertSame( 'test_id', $ret['openid.sreg.nickname'] );
  768. }
  769. /**
  770. * testing _checkId
  771. *
  772. */
  773. public function testCheckIdImmediate()
  774. {
  775. $_SERVER['SCRIPT_URI'] = "http://www.test.com/server.php";
  776. $storage = new Zend_OpenId_Provider_Storage_File(dirname(__FILE__)."/_files/provider");
  777. $provider = new Zend_OpenId_ProviderHelper(null, null, $this->_user, $storage);
  778. $provider->logout();
  779. // Wrong arguments (no openid.return_to and openid.trust_root)
  780. $response = new Zend_OpenId_ResponseHelper(true);
  781. $this->assertFalse( $provider->handle(array(
  782. 'openid_mode'=>'checkid_immediate'),
  783. null, $response) );
  784. // Unexistent user
  785. $storage->delUser(self::USER);
  786. $response = new Zend_OpenId_ResponseHelper(true);
  787. $this->assertTrue($provider->handle(array(
  788. 'openid_mode'=>'checkid_immediate',
  789. 'openid_identity'=>self::USER,
  790. 'openid_return_to'=>'http://www.test.com/test.php'),
  791. null, $response));
  792. $headers = $response->getHeaders();
  793. $this->assertSame( 'Location', $headers[0]['name'] );
  794. $this->assertSame( 'http://www.test.com/test.php?openid.mode=cancel', $headers[0]['value'] );
  795. // No openid_identity
  796. $response = new Zend_OpenId_ResponseHelper(true);
  797. $this->assertTrue($provider->handle(array(
  798. 'openid_mode'=>'checkid_immediate',
  799. 'openid_return_to'=>'http://www.test.com/test.php'),
  800. null, $response));
  801. $headers = $response->getHeaders();
  802. $this->assertSame( 'Location', $headers[0]['name'] );
  803. $url = parse_url($headers[0]['value']);
  804. $this->assertSame( 'www.test.com', $url['host'] );
  805. $this->assertSame( '/test.php', $url['path'] );
  806. $query = array();
  807. foreach (explode('&', $url['query']) as $line) {
  808. list($key,$val) = explode('=', $line, 2);
  809. $query[$key] = urldecode($val);
  810. }
  811. $this->assertSame( 'cancel', $query['openid.mode'] );
  812. $url2 = parse_url($query['openid.user_setup_url']);
  813. $this->assertSame( 'www.test.com', $url2['host'] );
  814. $this->assertSame( '/server.php', $url2['path'] );
  815. $query2 = array();
  816. foreach (explode('&', $url2['query']) as $line) {
  817. list($key,$val) = explode('=', $line, 2);
  818. $query2[$key] = urldecode($val);
  819. }
  820. $this->assertSame( 'login', $query2['openid.action'] );
  821. $this->assertSame( 'checkid_setup', $query2['openid.mode'] );
  822. $this->assertSame( 'http://www.test.com/test.php', $query2['openid.return_to'] );
  823. // Non logged in user
  824. $provider->register(self::USER, self::PASSWORD);
  825. $response = new Zend_OpenId_ResponseHelper(true);
  826. $this->assertTrue($provider->handle(array(
  827. 'openid_mode'=>'checkid_immediate',
  828. 'openid_identity'=>self::USER,
  829. 'openid_return_to'=>'http://www.test.com/test.php'),
  830. null, $response));
  831. $headers = $response->getHeaders();
  832. $this->assertSame( 'Location', $headers[0]['name'] );
  833. $url = parse_url($headers[0]['value']);
  834. $this->assertSame( 'www.test.com', $url['host'] );
  835. $this->assertSame( '/test.php', $url['path'] );
  836. $query = array();
  837. foreach (explode('&', $url['query']) as $line) {
  838. list($key,$val) = explode('=', $line, 2);
  839. $query[$key] = urldecode($val);
  840. }
  841. $this->assertSame( 'cancel', $query['openid.mode'] );
  842. $url2 = parse_url($query['openid.user_setup_url']);
  843. $this->assertSame( 'www.test.com', $url2['host'] );
  844. $this->assertSame( '/server.php', $url2['path'] );
  845. $query2 = array();
  846. foreach (explode('&', $url2['query']) as $line) {
  847. list($key,$val) = explode('=', $line, 2);
  848. $query2[$key] = urldecode($val);
  849. }
  850. $this->assertSame( 'login', $query2['openid.action'] );
  851. $this->assertSame( 'checkid_setup', $query2['openid.mode'] );
  852. $this->assertSame( 'http://www.test.com/test.php', $query2['openid.return_to'] );
  853. $this->assertSame( self::USER, $query2['openid.identity'] );
  854. // Non logged in user with SREG
  855. $provider->register(self::USER, self::PASSWORD);
  856. $response = new Zend_OpenId_ResponseHelper(true);
  857. $this->assertTrue($provider->handle(array(
  858. 'openid_mode'=>'checkid_immediate',
  859. 'openid_identity'=>self::USER,
  860. 'openid_return_to'=>'http://www.test.com/test.php',
  861. 'openid_ns_sreg'=>Zend_OpenId_Extension_Sreg::NAMESPACE_1_1,
  862. 'openid_sreg_required'=>'nickname'),
  863. null, $response));
  864. $headers = $response->getHeaders();
  865. $this->assertSame( 'Location', $headers[0]['name'] );
  866. $url = parse_url($headers[0]['value']);
  867. $this->assertSame( 'www.test.com', $url['host'] );
  868. $this->assertSame( '/test.php', $url['path'] );
  869. $query = array();
  870. foreach (explode('&', $url['query']) as $line) {
  871. list($key,$val) = explode('=', $line, 2);
  872. $query[$key] = urldecode($val);
  873. }
  874. $this->assertSame( 'cancel', $query['openid.mode'] );
  875. $url2 = parse_url($query['openid.user_setup_url']);
  876. $this->assertSame( 'www.test.com', $url2['host'] );
  877. $this->assertSame( '/server.php', $url2['path'] );
  878. $query2 = array();
  879. foreach (explode('&', $url2['query']) as $line) {
  880. list($key,$val) = explode('=', $line, 2);
  881. $query2[$key] = urldecode($val);
  882. }
  883. $this->assertSame( 'login', $query2['openid.action'] );
  884. $this->assertSame( 'checkid_setup', $query2['openid.mode'] );
  885. $this->assertSame( 'http://www.test.com/test.php', $query2['openid.return_to'] );
  886. $this->assertSame( self::USER, $query2['openid.identity'] );
  887. $this->assertSame( Zend_OpenId_Extension_Sreg::NAMESPACE_1_1, $query2['openid.ns.sreg'] );
  888. $this->assertSame( "nickname", $query2['openid.sreg.required'] );
  889. // Logged in user (unknown site)
  890. $this->assertTrue( $provider->login(self::USER, self::PASSWORD) );
  891. $response = new Zend_OpenId_ResponseHelper(true);
  892. $this->assertTrue($provider->handle(array(
  893. 'openid_mode'=>'checkid_immediate',
  894. 'openid_identity'=>self::USER,
  895. 'openid_return_to'=>'http://www.test.com/test.php'),
  896. null, $response));
  897. $headers = $response->getHeaders();
  898. $this->assertSame( 'Location', $headers[0]['name'] );
  899. $url = parse_url($headers[0]['value']);
  900. $this->assertSame( 'www.test.com', $url['host'] );
  901. $this->assertSame( '/test.php', $url['path'] );
  902. $query = array();
  903. foreach (explode('&', $url['query']) as $line) {
  904. list($key,$val) = explode('=', $line, 2);
  905. $query[$key] = urldecode($val);
  906. }
  907. $this->assertSame( 'cancel', $query['openid.mode'] );
  908. $url2 = parse_url($query['openid.user_setup_url']);
  909. $this->assertSame( 'www.test.com', $url2['host'] );
  910. $this->assertSame( '/server.php', $url2['path'] );
  911. $query2 = array();
  912. foreach (explode('&', $url2['query']) as $line) {
  913. list($key,$val) = explode('=', $line, 2);
  914. $query2[$key] = urldecode($val);
  915. }
  916. $this->assertSame( 'trust', $query2['openid.action'] );
  917. $this->assertSame( 'checkid_setup', $query2['openid.mode'] );
  918. $this->assertSame( 'http://www.test.com/test.php', $query2['openid.return_to'] );
  919. $this->assertSame( self::USER, $query2['openid.identity'] );
  920. // Logged in user (unknown site 2)
  921. $this->assertTrue( $provider->login(self::USER, self::PASSWORD) );
  922. $this->assertTrue( $provider->allowSite('http://www.test.com/test1.php') );
  923. $response = new Zend_OpenId_ResponseHelper(true);
  924. $this->assertTrue($provider->handle(array(
  925. 'openid_mode'=>'checkid_immediate',
  926. 'openid_identity'=>self::USER,
  927. 'openid_return_to'=>'http://www.test.com/test.php'),
  928. null, $response));
  929. $headers = $response->getHeaders();
  930. $this->assertSame( 'Location', $headers[0]['name'] );
  931. $url = parse_url($headers[0]['value']);
  932. $this->assertSame( 'www.test.com', $url['host'] );
  933. $this->assertSame( '/test.php', $url['path'] );
  934. $query = array();
  935. foreach (explode('&', $url['query']) as $line) {
  936. list($key,$val) = explode('=', $line, 2);
  937. $query[$key] = urldecode($val);
  938. }
  939. $this->assertSame( 'cancel', $query['openid.mode'] );
  940. $url2 = parse_url($query['openid.user_setup_url']);
  941. $this->assertSame( 'www.test.com', $url2['host'] );
  942. $this->assertSame( '/server.php', $url2['path'] );
  943. $query2 = array();
  944. foreach (explode('&', $url2['query']) as $line) {
  945. list($key,$val) = explode('=', $line, 2);
  946. $query2[$key] = urldecode($val);
  947. }
  948. $this->assertSame( 'trust', $query2['openid.action'] );
  949. $this->assertSame( 'checkid_setup', $query2['openid.mode'] );
  950. $this->assertSame( 'http://www.test.com/test.php', $query2['openid.return_to'] );
  951. $this->assertSame( self::USER, $query2['openid.identity'] );
  952. // Logged in user (unknown site + SREG)
  953. $response = new Zend_OpenId_ResponseHelper(true);
  954. $this->assertTrue( $provider->delSite('http://www.test.com/test1.php') );
  955. $this->assertTrue($provider->handle(array(
  956. 'openid_mode'=>'checkid_immediate',
  957. 'openid_identity'=>self::USER,
  958. 'openid_return_to'=>'http://www.test.com/test.php',
  959. 'openid_ns_sreg'=>Zend_OpenId_Extension_Sreg::NAMESPACE_1_1,
  960. 'openid_sreg_required'=>'nickname'),
  961. null, $response));
  962. $headers = $response->getHeaders();
  963. $this->assertSame( 'Location', $headers[0]['name'] );
  964. $url = parse_url($headers[0]['value']);
  965. $this->assertSame( 'www.test.com', $url['host'] );
  966. $this->assertSame( '/test.php', $url['path'] );
  967. $query = array();
  968. foreach (explode('&', $url['query']) as $line) {
  969. list($key,$val) = explode('=', $line, 2);
  970. $query[$key] = urldecode($val);
  971. }
  972. $this->assertSame( 'cancel', $query['openid.mode'] );
  973. $url2 = parse_url($query['openid.user_setup_url']);
  974. $this->assertSame( 'www.test.com', $url2['host'] );
  975. $this->assertSame( '/server.php', $url2['path'] );
  976. $query2 = array();
  977. foreach (explode('&', $url2['query']) as $line) {
  978. list($key,$val) = explode('=', $line, 2);
  979. $query2[$key] = urldecode($val);
  980. }
  981. $this->assertSame( 'trust', $query2['openid.action'] );
  982. $this->assertSame( 'checkid_setup', $query2['openid.mode'] );
  983. $this->assertSame( 'http://www.test.com/test.php', $query2['openid.return_to'] );
  984. $this->assertSame( self::USER, $query2['openid.identity'] );
  985. $this->assertSame( Zend_OpenId_Extension_Sreg::NAMESPACE_1_1, $query2['openid.ns.sreg'] );
  986. $this->assertSame( "nickname", $query2['openid.sreg.required'] );
  987. // Logged in user (untrusted site)
  988. $this->assertTrue( $provider->denySite('http://www.test.com') );
  989. $response = new Zend_OpenId_ResponseHelper(true);
  990. $this->assertTrue($provider->handle(array(
  991. 'openid_mode'=>'checkid_immediate',
  992. 'openid_identity'=>self::USER,
  993. 'openid_return_to'=>'http://www.test.com/test.php'),
  994. null, $response));
  995. $headers = $response->getHeaders();
  996. $this->assertSame( 'Location',

Large files files are truncated, but you can click here to view the full file