Example #1
0
 /**
  * testing handle
  *
  */
 public function testCheckIdSetup()
 {
     $this->expectOutputRegex('/.*/');
     // Hide stdout from the component when the test run
     $_SERVER['SCRIPT_URI'] = "http://www.test.com/server.php";
     $storage = new Provider\Storage\File(__DIR__ . "/_files/provider");
     $provider = new ProviderHelper(null, null, $this->_user, $storage);
     $provider->logout();
     // Wrong arguments (no openid.return_to and openid.trust_root)
     $response = new ResponseHelper(true);
     $this->assertFalse($provider->handle(array('openid_mode' => 'checkid_setup'), null, $response));
     // Unexistent user
     $storage->delUser(self::USER);
     $response = new ResponseHelper(true);
     $this->assertTrue($provider->handle(array('openid_mode' => 'checkid_setup', 'openid_identity' => self::USER, 'openid_return_to' => 'http://www.test.com/test.php'), null, $response));
     $headers = $response->headers();
     $this->assertTrue($headers->has('Location'));
     $this->assertSame('http://www.test.com/test.php?openid.mode=cancel', $headers->get('Location')->getFieldValue());
     // No openid_identity
     $response = new ResponseHelper(true);
     $this->assertTrue($provider->handle(array('openid_mode' => 'checkid_setup', 'openid_return_to' => 'http://www.test.com/test.php'), null, $response));
     $headers = $response->headers();
     $this->assertTrue($headers->has('Location'));
     $url = parse_url($headers->get('Location')->getFieldValue());
     $this->assertSame('www.test.com', $url['host']);
     $this->assertSame('/server.php', $url['path']);
     $query = array();
     foreach (explode('&', $url['query']) as $line) {
         list($key, $val) = explode('=', $line, 2);
         $query[$key] = urldecode($val);
     }
     $this->assertSame('login', $query['openid.action']);
     $this->assertSame('checkid_setup', $query['openid.mode']);
     $this->assertSame('http://www.test.com/test.php', $query['openid.return_to']);
     // Non logged in user
     $provider->register(self::USER, self::PASSWORD);
     $response = new ResponseHelper(true);
     $this->assertTrue($provider->handle(array('openid_mode' => 'checkid_setup', 'openid_identity' => self::USER, 'openid_return_to' => 'http://www.test.com/test.php'), null, $response));
     $headers = $response->headers();
     $this->assertTrue($headers->has('Location'));
     $url = parse_url($headers->get('Location')->getFieldValue());
     $this->assertSame('www.test.com', $url['host']);
     $this->assertSame('/server.php', $url['path']);
     $query = array();
     foreach (explode('&', $url['query']) as $line) {
         list($key, $val) = explode('=', $line, 2);
         $query[$key] = urldecode($val);
     }
     $this->assertSame('login', $query['openid.action']);
     $this->assertSame('checkid_setup', $query['openid.mode']);
     $this->assertSame('http://www.test.com/test.php', $query['openid.return_to']);
     $this->assertSame(self::USER, $query['openid.identity']);
     // Logged in user (unknown site)
     $this->assertTrue($provider->login(self::USER, self::PASSWORD));
     $response = new ResponseHelper(true);
     $this->assertTrue($provider->handle(array('openid_mode' => 'checkid_setup', 'openid_identity' => self::USER, 'openid_return_to' => 'http://www.test.com/test.php'), null, $response));
     $headers = $response->headers();
     $this->assertTrue($headers->has('Location'));
     $url = parse_url($headers->get('Location')->getFieldValue());
     $this->assertSame('www.test.com', $url['host']);
     $this->assertSame('/server.php', $url['path']);
     $query = array();
     foreach (explode('&', $url['query']) as $line) {
         list($key, $val) = explode('=', $line, 2);
         $query[$key] = urldecode($val);
     }
     $this->assertSame('trust', $query['openid.action']);
     $this->assertSame('checkid_setup', $query['openid.mode']);
     $this->assertSame(self::USER, $query['openid.identity']);
     $this->assertSame('http://www.test.com/test.php', $query['openid.return_to']);
     // Logged in user (untrusted site)
     $this->assertTrue($provider->denySite('http://www.test.com/'));
     $response = new ResponseHelper(true);
     $this->assertTrue($provider->handle(array('openid_mode' => 'checkid_setup', 'openid_identity' => self::USER, 'openid_return_to' => 'http://www.test.com/test.php'), null, $response));
     $headers = $response->headers();
     $this->assertTrue($headers->has('Location'));
     $this->assertSame('http://www.test.com/test.php?openid.mode=cancel', $headers->get('Location')->getFieldValue());
     // Logged in user (trusted site)
     $this->assertTrue($provider->allowSite('http://www.test.com/'));
     $response = new ResponseHelper(true);
     $this->assertTrue($provider->handle(array('openid_mode' => 'checkid_setup', 'openid_identity' => self::USER, 'openid_return_to' => 'http://www.test.com/test.php'), null, $response));
     $headers = $response->headers();
     $this->assertTrue($headers->has('Location'));
     $url = parse_url($headers->get('Location')->getFieldValue());
     $this->assertSame('www.test.com', $url['host']);
     $this->assertSame('/test.php', $url['path']);
     $query = array();
     foreach (explode('&', $url['query']) as $line) {
         list($key, $val) = explode('=', $line, 2);
         $query[$key] = urldecode($val);
     }
     $this->assertSame('id_res', $query['openid.mode']);
     $this->assertSame('http://www.test.com/test.php', $query['openid.return_to']);
     $this->assertSame(self::USER, $query['openid.identity']);
     $this->assertTrue(isset($query['openid.assoc_handle']));
     $this->assertTrue(isset($query['openid.response_nonce']));
     $this->assertTrue(isset($query['openid.signed']));
     $this->assertTrue(isset($query['openid.sig']));
     $this->assertSame(20, strlen(base64_decode($query['openid.sig'])));
     // Logged in user (trusted site without openid.return_to)
     $this->assertTrue($provider->allowSite('http://www.test.com/'));
     $response = new ResponseHelper(true);
     $this->assertTrue($provider->handle(array('openid_mode' => 'checkid_setup', 'openid_identity' => self::USER, 'openid_trust_root' => 'http://www.test.com/test.php'), null, $response));
     $headers = $response->headers();
     $this->assertEquals(0, count($headers));
     $this->assertSame('', $response->getBody());
     // Logged in user (trusted site) & OpenID 2.0 & established session
     $storage->delAssociation(self::HANDLE);
     $storage->addAssociation(self::HANDLE, "sha1", pack("H*", '0102030405060708091011121314151617181920'), time() + 3660);
     $this->assertTrue($provider->allowSite('http://www.test.com/'));
     $response = new ResponseHelper(true);
     $this->assertTrue($provider->handle(array('openid_ns' => OpenId::NS_2_0, 'openid_assoc_handle' => self::HANDLE, 'openid_mode' => 'checkid_setup', 'openid_identity' => self::USER, 'openid_return_to' => 'http://www.test.com/test.php'), null, $response));
     $headers = $response->headers();
     $this->assertTrue($headers->has('Location'));
     $url = parse_url($headers->get('Location')->getFieldValue());
     $this->assertSame('www.test.com', $url['host']);
     $this->assertSame('/test.php', $url['path']);
     $query = array();
     foreach (explode('&', $url['query']) as $line) {
         list($key, $val) = explode('=', $line, 2);
         $query[$key] = urldecode($val);
     }
     $this->assertSame(OpenId::NS_2_0, $query['openid.ns']);
     $this->assertSame("http://www.test.com/server.php", $query['openid.op_endpoint']);
     $this->assertSame('id_res', $query['openid.mode']);
     $this->assertSame('http://www.test.com/test.php', $query['openid.return_to']);
     $this->assertSame(self::USER, $query['openid.identity']);
     $this->assertSame(self::HANDLE, $query['openid.assoc_handle']);
     $this->assertTrue(isset($query['openid.response_nonce']));
     $this->assertTrue(isset($query['openid.signed']));
     $this->assertTrue(isset($query['openid.sig']));
     $this->assertSame(20, strlen(base64_decode($query['openid.sig'])));
     // Logged in user (trusted site) & invalid association handle
     $storage->delAssociation(self::HANDLE);
     $this->assertTrue($provider->allowSite('http://www.test.com/'));
     $response = new ResponseHelper(true);
     $this->assertTrue($provider->handle(array('openid_ns' => OpenId::NS_2_0, 'openid_assoc_handle' => self::HANDLE, 'openid_mode' => 'checkid_setup', 'openid_identity' => self::USER, 'openid_return_to' => 'http://www.test.com/test.php'), null, $response));
     $headers = $response->headers();
     $this->assertTrue($headers->has('Location'));
     $url = parse_url($headers->get('Location')->getFieldValue());
     $this->assertSame('www.test.com', $url['host']);
     $this->assertSame('/test.php', $url['path']);
     $query = array();
     foreach (explode('&', $url['query']) as $line) {
         list($key, $val) = explode('=', $line, 2);
         $query[$key] = urldecode($val);
     }
     $this->assertSame(OpenId::NS_2_0, $query['openid.ns']);
     $this->assertSame("http://www.test.com/server.php", $query['openid.op_endpoint']);
     $this->assertSame('id_res', $query['openid.mode']);
     $this->assertSame('http://www.test.com/test.php', $query['openid.return_to']);
     $this->assertSame(self::USER, $query['openid.identity']);
     $this->assertSame(self::HANDLE, $query['openid.invalidate_handle']);
     $this->assertTrue(isset($query['openid.assoc_handle']));
     $this->assertTrue(isset($query['openid.response_nonce']));
     $this->assertTrue(isset($query['openid.signed']));
     $this->assertTrue(isset($query['openid.sig']));
     $this->assertSame(32, strlen(base64_decode($query['openid.sig'])));
     // SREG success
     $sreg = new Extension\Sreg(array('nickname' => 'test', 'email' => '*****@*****.**'));
     $this->assertTrue($provider->allowSite('http://www.test.com/', $sreg));
     $sreg = new Extension\Sreg();
     $response = new ResponseHelper(true);
     $this->assertTrue($provider->handle(array('openid_ns' => OpenId::NS_2_0, 'openid_mode' => 'checkid_setup', 'openid_identity' => self::USER, 'openid_return_to' => 'http://www.test.com/test.php', 'openid_ns_sreg' => Extension\Sreg::NAMESPACE_1_1, 'openid_sreg_required' => 'nickname', 'openid_sreg_optional' => 'email'), $sreg, $response));
     $headers = $response->headers();
     $this->assertTrue($headers->has('Location'));
     $url = parse_url($headers->get('Location')->getFieldValue());
     $this->assertSame('www.test.com', $url['host']);
     $this->assertSame('/test.php', $url['path']);
     $query = array();
     foreach (explode('&', $url['query']) as $line) {
         list($key, $val) = explode('=', $line, 2);
         $query[$key] = urldecode($val);
     }
     $this->assertSame(OpenId::NS_2_0, $query['openid.ns']);
     $this->assertSame("http://www.test.com/server.php", $query['openid.op_endpoint']);
     $this->assertSame('id_res', $query['openid.mode']);
     $this->assertSame('http://www.test.com/test.php', $query['openid.return_to']);
     $this->assertSame(self::USER, $query['openid.identity']);
     $this->assertTrue(isset($query['openid.assoc_handle']));
     $this->assertTrue(isset($query['openid.response_nonce']));
     $this->assertTrue(isset($query['openid.signed']));
     $this->assertTrue(isset($query['openid.sig']));
     $this->assertSame(32, strlen(base64_decode($query['openid.sig'])));
     $this->assertSame(Extension\Sreg::NAMESPACE_1_1, $query['openid.ns.sreg']);
     $this->assertSame('test', $query['openid.sreg.nickname']);
     $this->assertSame('*****@*****.**', $query['openid.sreg.email']);
     // SREG failed
     $sreg = new Extension\Sreg(array('nickname' => 'test'));
     $this->assertTrue($provider->allowSite('http://www.test.com/', $sreg));
     $sreg = new Extension\Sreg();
     $response = new ResponseHelper(true);
     $this->assertTrue($provider->handle(array('openid_mode' => 'checkid_setup', 'openid_identity' => self::USER, 'openid_return_to' => 'http://www.test.com/test.php', 'openid_sreg_required' => 'nickname,email'), $sreg, $response));
     $headers = $response->headers();
     $this->assertTrue($headers->has('Location'));
     $url = parse_url($headers->get('Location')->getFieldValue());
     $this->assertSame('www.test.com', $url['host']);
     $this->assertSame('/server.php', $url['path']);
     $query = array();
     foreach (explode('&', $url['query']) as $line) {
         list($key, $val) = explode('=', $line, 2);
         $query[$key] = urldecode($val);
     }
     $this->assertSame('trust', $query['openid.action']);
     $this->assertSame('checkid_setup', $query['openid.mode']);
     $this->assertSame(self::USER, $query['openid.identity']);
     $this->assertSame('http://www.test.com/test.php', $query['openid.return_to']);
     $this->assertSame('nickname,email', $query['openid.sreg.required']);
     $provider->logout();
     $storage->delUser(self::USER);
 }
Example #2
0
 /**
  * testing addSite
  *
  */
 public function testAddSite()
 {
     $storage = new Storage\File(__DIR__ . "/_files");
     $storage->delUser(self::USER);
     $this->assertTrue($storage->addUser(self::USER, self::PASSWORD));
     $this->assertTrue($storage->addSite(self::USER, self::SITE1, true));
     $trusted = $storage->getTrustedSites(self::USER);
     $this->assertTrue(is_array($trusted));
     $this->assertSame(1, count($trusted));
     reset($trusted);
     $this->assertSame(self::SITE1, key($trusted));
     $this->assertSame(true, current($trusted));
     $this->assertTrue($storage->delUser(self::USER));
     $this->assertFalse($storage->addSite(self::USER, self::SITE1, true));
     $this->assertTrue($storage->addUser(self::USER, self::PASSWORD));
     $trusted = $storage->getTrustedSites(self::USER);
     $this->assertTrue(is_array($trusted));
     $this->assertSame(0, count($trusted));
     $this->assertTrue($storage->addSite(self::USER, self::SITE1, self::SITE1));
     $this->assertTrue($storage->addSite(self::USER, self::SITE2, self::SITE2));
     $this->assertTrue($storage->addSite(self::USER, self::SITE1, self::USER));
     $trusted = $storage->getTrustedSites(self::USER);
     $this->assertTrue(is_array($trusted));
     $this->assertSame(2, count($trusted));
     $this->assertSame(self::USER, $trusted[self::SITE1]);
     $this->assertSame(self::SITE2, $trusted[self::SITE2]);
     $this->assertTrue($storage->addSite(self::USER, self::SITE2, null));
     $trusted = $storage->getTrustedSites(self::USER);
     $this->assertTrue(is_array($trusted));
     $this->assertSame(1, count($trusted));
     $this->assertSame(self::USER, $trusted[self::SITE1]);
     $this->assertTrue($storage->addSite(self::USER, self::SITE1, null));
     $trusted = $storage->getTrustedSites(self::USER);
     $this->assertTrue(is_array($trusted));
     $this->assertSame(0, count($trusted));
     $this->assertTrue($storage->delUser(self::USER));
     $storage->delUser(self::USER);
     $this->assertFalse($storage->getTrustedSites(self::USER));
 }