/** * Authenticate a user. * @param Zend_Controller_Request_Abstract $request The current request * @param Zend_Controller_Response_Abstract $response The current response * @return Array|Boolean User data, or FALSE */ public function authenticate(Zend_Controller_Request_Abstract $request, Zend_Controller_Response_Abstract $response) { if ($request->getPost('openid_identifier') || $request->getParam('openid_mode')) { $sreg = $this->getSreg(); $openIdAdapter = new Zend_Auth_Adapter_OpenId($request->getPost('openid_identifier'), null, null, null, $sreg); $result = $openIdAdapter->authenticate(); if ($result->isValid()) { return $this->_getUserData($result->getIdentity(), $sreg->getProperties()); } else { $errors = $result->getMessages(); array_walk($errors, array($this, '_addError')); } } $this->_addError('Insufficient data received'); return false; }
/** * Authenticates the given OpenId identity. * Defined by Zend_Auth_Adapter_Interface. * * @throws Zend_Auth_Adapter_Exception If answering the authentication * query is impossible * @return Zend_Auth_Result */ public function authenticate() { $result = parent::authenticate(); if ($result->isValid() && ($username = $this->extractUsername($result->getIdentity()))) { return new Zend_Auth_Result($result->getCode(), $username, $result->getMessages()); } return $result; }
function testSetCheckImmediate() { $expiresIn = time() + 600; $storage = new Zend_OpenId_Consumer_Storage_File(); $storage->delDiscoveryInfo(self::ID); $storage->addDiscoveryInfo(self::ID, self::REAL_ID, self::SERVER, 1.1, $expiresIn); $storage->delAssociation(self::SERVER); $storage->addAssociation(self::SERVER, self::HANDLE, self::MAC_FUNC, self::SECRET, $expiresIn); $response = new Zend_OpenId_ResponseHelper(true); $_SERVER['SCRIPT_URI'] = "http://www.zf-test.com/test.php"; $adapter = new Zend_Auth_Adapter_OpenId(self::ID); $adapter->setCheckImmediate(true); $this->assertSame($adapter, $adapter->setResponse($response)); $ret = $adapter->authenticate(); $this->assertTrue(is_null($ret)); $headers = $response->getHeaders(); $this->assertSame( '', $response->getBody() ); $this->assertTrue( is_array($headers) ); $this->assertSame( 1, count($headers) ); $this->assertTrue( is_array($headers[0]) ); $this->assertSame( 3, count($headers[0]) ); $this->assertSame( 'Location', $headers[0]['name'] ); $this->assertSame( true, $headers[0]['replace'] ); $url = $headers[0]['value']; $url = parse_url($url); $this->assertSame( "http", $url['scheme'] ); $this->assertSame( "www.myopenid.com", $url['host'] ); $this->assertSame( "/", $url['path'] ); $q = explode("&", $url['query']); $query = array(); foreach($q as $var) { if (list($key, $val) = explode("=", $var, 2)) { $query[$key] = $val; } } $this->assertTrue( is_array($query) ); $this->assertSame( 6, count($query) ); $this->assertSame( 'checkid_immediate', $query['openid.mode'] ); $this->assertSame( 'http%3A%2F%2Freal_id.myopenid.com%2F', $query['openid.identity'] ); $this->assertSame( 'http%3A%2F%2Fid.myopenid.com%2F', $query['openid.claimed_id'] ); $this->assertSame( self::HANDLE, $query['openid.assoc_handle'] ); $this->assertSame( 'http%3A%2F%2Fwww.zf-test.com%2Ftest.php', $query['openid.return_to'] ); $this->assertSame( 'http%3A%2F%2Fwww.zf-test.com', $query['openid.trust_root'] ); }
/** * Get Zend_Auth_Adapter_OpenId adapter * * @param string $openid_identifier * @return Zend_Auth_Adapter_OpenId */ protected function _getOpenIdAdapter($openid_identifier = null) { $adapter = new Zend_Auth_Adapter_OpenId($openid_identifier); $dir = APPLICATION_PATH . '/../tmp'; if (!file_exists($dir)) { if (!mkdir($dir)) { throw new Zend_Exception("Cannot create {$dir} to store tmp auth data."); } } $adapter->setStorage(new Zend_OpenId_Consumer_Storage_File($dir)); return $adapter; }
protected function authenticate() { $open_id_adapter = new Zend_Auth_Adapter_OpenId($this->body('openid_identifier')); $open_id_adapter->setResponse(new ZfControllerResponseAdapter()); try { $result = $this->zend_auth->authenticate($open_id_adapter); } catch (ZfThrowableResponse $response) { throw new k_SeeOther($response->getRedirect()); } $this->errors = array(); if ($result->isValid()) { $user = $this->selectUser($this->zend_auth->getIdentity()); if ($user) { $this->session()->set('identity', $user); throw new k_SeeOther($this->query('continue')); } $this->errors[] = "Auth OK, but no such user on this system."; } $this->session()->set('identity', null); $this->zend_auth->clearIdentity(); foreach ($result->getMessages() as $message) { $this->errors[] = htmlspecialchars($message); } }
/** * Get Zend_Auth_Adapter_OpenId adapter * * @param string $openid_identifier * @return Zend_Auth_Adapter_OpenId */ protected function _getOpenIdAdapter($openid_identifier = null) { require_once 'Zend/Auth/Adapter/OpenId.php'; require_once 'Zend/OpenId/Consumer/Storage/File.php'; $adapter = new Zend_Auth_Adapter_OpenId($openid_identifier); if (!file_exists($this->_config->tmpDirectory)) { if (!mkdir($this->_config->tmpDirectory)) { throw new Zend_Exception("Cannot create {$this->_config->tmpDirectory} to store tmp auth data."); } } $adapter->setStorage(new Zend_OpenId_Consumer_Storage_File($this->_config->tmpDirectory)); return $adapter; }
function testSetHttpClient() { $storage = new Zend_OpenId_Consumer_Storage_File(dirname(__FILE__) . "/_files"); $storage->delDiscoveryInfo(self::ID); $storage->delAssociation(self::SERVER); $adapter = new Zend_Auth_Adapter_OpenId(self::ID, $storage); $http = new Zend_Http_Client(null, array('maxredirects' => 4, 'timeout' => 15, 'useragent' => 'Zend_OpenId')); $test = new Zend_Http_Client_Adapter_Test(); $http->setAdapter($test); $adapter->SetHttpClient($http); $ret = $adapter->authenticate(); $this->assertSame("GET / HTTP/1.1\r\n" . "Host: id.myopenid.com\r\n" . "Connection: close\r\n" . "Accept-encoding: gzip, deflate\r\n" . "User-Agent: Zend_OpenId\r\n\r\n", $http->getLastRequest()); }