openstackid/app/strategies/OpenIdLoginStrategy.php

67 lines
2.4 KiB
PHP

<?php
namespace strategies;
use Auth;
use openid\OpenIdProtocol;
use openid\requests\OpenIdAuthenticationRequest;
use openid\responses\OpenIdNonImmediateNegativeAssertion;
use openid\services\IMementoOpenIdRequestService;
use openid\strategies\OpenIdResponseStrategyFactoryMethod;
use Redirect;
use services\IPHelper;
use services\IUserActionService;
use View;
class OpenIdLoginStrategy implements ILoginStrategy
{
private $memento_service;
private $user_action_service;
private $auth_service;
public function __construct(IMementoOpenIdRequestService $memento_service,
IUserActionService $user_action_service,
IAuthService $auth_service)
{
$this->memento_service = $memento_service;
$this->user_action_service = $user_action_service;
$this->auth_service = $auth_service;
}
public function getLogin()
{
if (Auth::guest()) {
$msg = $this->memento_service->getCurrentRequest();
$auth_request = new OpenIdAuthenticationRequest($msg);
$params = array('realm' => $auth_request->getRealm());
if (!$auth_request->isIdentitySelectByOP()) {
$params['claimed_id'] = $auth_request->getClaimedId();
$params['identity'] = $auth_request->getIdentity();
$params['identity_select'] = false;
} else {
$params['identity_select'] = true;
}
return View::make("login", $params);
} else {
return Redirect::action("UserController@getProfile");
}
}
public function postLogin()
{
//go to authentication flow again
$msg = $this->memento_service->getCurrentRequest();
$this->user_action_service->addUserAction($this->auth_service->getCurrentUser(), IPHelper::getUserIp(), IUserActionService::LoginAction, $msg->getParam(OpenIdProtocol::OpenIDProtocol_Realm));
return Redirect::action("OpenIdProviderController@op_endpoint");
}
public function cancelLogin()
{
$msg = $this->memento_service->getCurrentRequest();
$cancel_response = new OpenIdNonImmediateNegativeAssertion();
$cancel_response->setReturnTo($msg->getParam(OpenIdProtocol::OpenIDProtocol_ReturnTo));
$strategy = OpenIdResponseStrategyFactoryMethod::buildStrategy($cancel_response);
return $strategy->handle($cancel_response);
}
}