1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-06-01 03:54:56 +02:00

[feature/oauth] More work on login

PHPBB3-11673
This commit is contained in:
Joseph Warner 2013-07-13 13:43:12 -04:00
parent 93f7ed4fb5
commit aa12f6afc5

View File

@ -60,6 +60,20 @@ class phpbb_auth_provider_oauth extends phpbb_auth_provider_base
*/
protected $driver;
/**
* Cached service once it has been created
*
* @var \OAuth\Common\Service\ServiceInterface|null
*/
protected $service;
/**
* Cached current uri object
*
* @var \OAuth\Common\Http\Uri\UriInterface|null
*/
protected $current_uri;
/**
* OAuth Authentication Constructor
*
@ -84,8 +98,8 @@ class phpbb_auth_provider_oauth extends phpbb_auth_provider_base
public function login($username, $password)
{
// Requst the name of the OAuth service
$service = $this->request->variable('oauth_service', '', false, phpbb_request_interface::POST);
if ($service === '')
$service_name = $this->request->variable('oauth_service', '', false, phpbb_request_interface::POST);
if ($service_name === '')
{
return array(
'status' => LOGIN_ERROR_EXTERNAL_AUTH,
@ -94,34 +108,6 @@ class phpbb_auth_provider_oauth extends phpbb_auth_provider_base
);
}
// Get the service credentials for the given service
$service_credentials = $this->get_credentials($service);
// Check that the service has settings
if ($service_credentials['key'] == false || $service_credentials['secret'] == false)
{
return array(
'status' => LOGIN_ERROR_EXTERNAL_AUTH,
'error_msg' => 'LOGIN_ERROR_EXTERNAL_AUTH_APACHE',
'user_row' => array('user_id' => ANONYMOUS),
);
}
$service_factory = new \OAuth\ServiceFactory();
$uri_factory = new \OAuth\Common\Http\Uri\UriFactory();
$current_uri = $uri_factory->createFromSuperGlobalArray($this->request->get_super_global(phpbb_request_interface::SERVER));
$current_uri->setQuery('');
// In-memory storage
$storage = new phpbb_auth_oauth_token_storage($this->driver);
// Setup the credentials for the requests
$credentials = new Credentials(
$service_credentials['key'],
$service_credentials['secret'],
$current_uri->getAbsoluteUri()
);
if ($this->request->is_set('code', phpbb_request_interface::GET))
{
// Second pass: request access token, authenticate with phpBB
@ -133,11 +119,70 @@ class phpbb_auth_provider_oauth extends phpbb_auth_provider_base
/**
*
*/
protected function get_service_credentials($service)
protected function get_service_credentials($service_name)
{
return array(
'key' => $this->config['auth_oauth_' . $service . '_key'],
'secret' => $this->config['auth_oauth_' . $service . '_secret'],
'key' => $this->config['auth_oauth_' . $service_name . '_key'],
'secret' => $this->config['auth_oauth_' . $service_name . '_secret'],
);
}
protected function get_current_uri()
{
if ($this->current_uri)
{
return $this->current_uri;
}
$uri_factory = new \OAuth\Common\Http\Uri\UriFactory();
$current_uri = $uri_factory->createFromSuperGlobalArray($this->request->get_super_global(phpbb_request_interface::SERVER));
$current_uri->setQuery('');
$this->current_uri = $current_uri;
return $current_uri;
}
/**
* Returns the cached service object or creates a new one
*
* @param string $service_name The name of the service
* @param array $scope The scope of the request against the api.
* @return \OAuth\Common\Service\ServiceInterface
*/
protected function get_service($service_name, array $scopes = array())
{
if ($this->service)
{
return $this->service;
}
// Get the service credentials for the given service
$service_credentials = $this->get_credentials($service_name);
// Check that the service has settings
if ($service_credentials['key'] == false || $service_credentials['secret'] == false)
{
return array(
'status' => LOGIN_ERROR_EXTERNAL_AUTH,
'error_msg' => 'LOGIN_ERROR_EXTERNAL_AUTH_APACHE',
'user_row' => array('user_id' => ANONYMOUS),
);
}
$storage = new phpbb_auth_oauth_token_storage($this->driver);
$current_uri = $this->get_current_uri();
// Setup the credentials for the requests
$credentials = new Credentials(
$service_credentials['key'],
$service_credentials['secret'],
$current_uri->getAbsoluteUri()
);
$service_factory = new \OAuth\ServiceFactory();
$this->service = $service_factory->createService($service_name, $credentials, $storage, $scopes);
return $this->service;
}
}