openstackid/app/libs/openid/requests/OpenIdAuthenticationRequest...

95 lines
3.6 KiB
PHP

<?php
/**
* Created by JetBrains PhpStorm.
* User: smarcet
* Date: 10/15/13
* Time: 12:18 PM
* To change this template use File | Settings | File Templates.
*/
namespace openid\requests;
use openid\requests\OpenIdRequest;
use openid\OpenIdMessage;
use openid\OpenIdProtocol;
use openid\helpers\OpenIdUriHelper;
class OpenIdAuthenticationRequest extends OpenIdRequest {
public function __construct(OpenIdMessage $message){
parent::__construct($message);
}
public static function IsOpenIdAuthenticationRequest(OpenIdMessage $message){
$mode = $message->getMode();
if($mode==OpenIdProtocol::ImmediateMode || $mode==OpenIdProtocol::SetupMode) return true;
return false;
}
public function getClaimedId(){
return isset($this->message[OpenIdProtocol::param(OpenIdProtocol::OpenIDProtocol_ClaimedId,"_")])?$this->message[OpenIdProtocol::param(OpenIdProtocol::OpenIDProtocol_ClaimedId,"_")]:null;
}
public function getIdentity(){
return isset($this->message[OpenIdProtocol::param(OpenIdProtocol::OpenIDProtocol_Identity,"_")])?$this->message[OpenIdProtocol::param(OpenIdProtocol::OpenIDProtocol_Identity,"_")]:null;
}
public function getAssocHandle(){
return isset($this->message[OpenIdProtocol::param(OpenIdProtocol::OpenIDProtocol_AssocHandle,"_")])?$this->message[OpenIdProtocol::param(OpenIdProtocol::OpenIDProtocol_AssocHandle,"_")]:null;
}
public function getReturnTo(){
$return_to = isset($this->message[OpenIdProtocol::param(OpenIdProtocol::OpenIDProtocol_ReturnTo,"_")])?$this->message[OpenIdProtocol::param(OpenIdProtocol::OpenIDProtocol_ReturnTo,"_")]:null;
return (OpenIdUriHelper::checkReturnTo($return_to))?$return_to:"";
}
public function getRealm(){
return isset($this->message[OpenIdProtocol::param(OpenIdProtocol::OpenIDProtocol_Realm,"_")])?$this->message[OpenIdProtocol::param(OpenIdProtocol::OpenIDProtocol_Realm,"_")]:null;
}
public function getTrustedRoot() {
if (isset($this->message[OpenIdProtocol::param(OpenIdProtocol::OpenIDProtocol_Realm,"_")])) {
$root = $this->message[OpenIdProtocol::param(OpenIdProtocol::OpenIDProtocol_Realm,"_")];
} else if (isset($this[OpenIdProtocol::param(OpenIdProtocol::OpenIDProtocol_ReturnTo,"_")])) {
$root = $this->message[OpenIdProtocol::param(OpenIdProtocol::OpenIDProtocol_ReturnTo,"_")];
} else {
return null;
}
if (OpenIdUriHelper::normalizeUrl($root) && !empty($root)) {
return $root;
}
return null;
}
/**
* @param $claimed_id
* @param $identity
* @return bool
*/
private function isValidIdentifier($claimed_id,$identity){
if($claimed_id==$identity && $identity==OpenIdProtocol::IdentifierSelectType && $claimed_id==OpenIdProtocol::IdentifierSelectType)
return true;
if($claimed_id==$identity){
//todo: check valid user?
return true;
}
return false;
}
public function IsValid(){
$return_to = $this->getReturnTo();
$claimed_id = $this->getClaimedId();
$identity = $this->getIdentity();
$mode = $this->getMode();
$realm = $this->getRealm();
return !empty($return_to)
&& !empty($realm)
&& OpenIdUriHelper::checkRealm($realm,$return_to)
&& !empty($claimed_id)
&& !empty($identity)
&& $this->isValidIdentifier($claimed_id,$identity)
&& !empty($mode) && ($mode == OpenIdProtocol::ImmediateMode || $mode == OpenIdProtocol::SetupMode);
}
}