Upgrade Zend Framework to version 1.12.8
This commit is contained in:
parent
7545fdb588
commit
90cd2f7c85
@ -1,261 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Auth
|
||||
* @subpackage Zend_Auth_Adapter
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: InfoCard.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* @see Zend_Auth_Adapter_Interface
|
||||
*/
|
||||
require_once 'Zend/Auth/Adapter/Interface.php';
|
||||
|
||||
/**
|
||||
* @see Zend_Auth_Result
|
||||
*/
|
||||
require_once 'Zend/Auth/Result.php';
|
||||
|
||||
/**
|
||||
* @see Zend_InfoCard
|
||||
*/
|
||||
require_once 'Zend/InfoCard.php';
|
||||
|
||||
/**
|
||||
* A Zend_Auth Authentication Adapter allowing the use of Information Cards as an
|
||||
* authentication mechanism
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Auth
|
||||
* @subpackage Zend_Auth_Adapter
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Auth_Adapter_InfoCard implements Zend_Auth_Adapter_Interface
|
||||
{
|
||||
/**
|
||||
* The XML Token being authenticated
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_xmlToken;
|
||||
|
||||
/**
|
||||
* The instance of Zend_InfoCard
|
||||
*
|
||||
* @var Zend_InfoCard
|
||||
*/
|
||||
protected $_infoCard;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param string $strXmlDocument The XML Token provided by the client
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($strXmlDocument)
|
||||
{
|
||||
$this->_xmlToken = $strXmlDocument;
|
||||
$this->_infoCard = new Zend_InfoCard();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the InfoCard component Adapter to use
|
||||
*
|
||||
* @param Zend_InfoCard_Adapter_Interface $a
|
||||
* @return Zend_Auth_Adapter_InfoCard Provides a fluent interface
|
||||
*/
|
||||
public function setAdapter(Zend_InfoCard_Adapter_Interface $a)
|
||||
{
|
||||
$this->_infoCard->setAdapter($a);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the InfoCard component adapter being used
|
||||
*
|
||||
* @return Zend_InfoCard_Adapter_Interface
|
||||
*/
|
||||
public function getAdapter()
|
||||
{
|
||||
return $this->_infoCard->getAdapter();
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the InfoCard public key cipher object being used
|
||||
*
|
||||
* @return Zend_InfoCard_Cipher_PKI_Interface
|
||||
*/
|
||||
public function getPKCipherObject()
|
||||
{
|
||||
return $this->_infoCard->getPKCipherObject();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the InfoCard public key cipher object to use
|
||||
*
|
||||
* @param Zend_InfoCard_Cipher_PKI_Interface $cipherObj
|
||||
* @return Zend_Auth_Adapter_InfoCard Provides a fluent interface
|
||||
*/
|
||||
public function setPKICipherObject(Zend_InfoCard_Cipher_PKI_Interface $cipherObj)
|
||||
{
|
||||
$this->_infoCard->setPKICipherObject($cipherObj);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the Symmetric cipher object being used
|
||||
*
|
||||
* @return Zend_InfoCard_Cipher_Symmetric_Interface
|
||||
*/
|
||||
public function getSymCipherObject()
|
||||
{
|
||||
return $this->_infoCard->getSymCipherObject();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the InfoCard symmetric cipher object to use
|
||||
*
|
||||
* @param Zend_InfoCard_Cipher_Symmetric_Interface $cipherObj
|
||||
* @return Zend_Auth_Adapter_InfoCard Provides a fluent interface
|
||||
*/
|
||||
public function setSymCipherObject(Zend_InfoCard_Cipher_Symmetric_Interface $cipherObj)
|
||||
{
|
||||
$this->_infoCard->setSymCipherObject($cipherObj);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a Certificate Pair by Key ID from the search list
|
||||
*
|
||||
* @param string $key_id The Certificate Key ID returned from adding the certificate pair
|
||||
* @throws Zend_InfoCard_Exception
|
||||
* @return Zend_Auth_Adapter_InfoCard Provides a fluent interface
|
||||
*/
|
||||
public function removeCertificatePair($key_id)
|
||||
{
|
||||
$this->_infoCard->removeCertificatePair($key_id);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a Certificate Pair to the list of certificates searched by the component
|
||||
*
|
||||
* @param string $private_key_file The path to the private key file for the pair
|
||||
* @param string $public_key_file The path to the certificate / public key for the pair
|
||||
* @param string $type (optional) The URI for the type of key pair this is (default RSA with OAEP padding)
|
||||
* @param string $password (optional) The password for the private key file if necessary
|
||||
* @throws Zend_InfoCard_Exception
|
||||
* @return string A key ID representing this key pair in the component
|
||||
*/
|
||||
public function addCertificatePair($private_key_file, $public_key_file, $type = Zend_InfoCard_Cipher::ENC_RSA_OAEP_MGF1P, $password = null)
|
||||
{
|
||||
return $this->_infoCard->addCertificatePair($private_key_file, $public_key_file, $type, $password);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a Certificate Pair from a key ID
|
||||
*
|
||||
* @param string $key_id The Key ID of the certificate pair in the component
|
||||
* @throws Zend_InfoCard_Exception
|
||||
* @return array An array containing the path to the private/public key files,
|
||||
* the type URI and the password if provided
|
||||
*/
|
||||
public function getCertificatePair($key_id)
|
||||
{
|
||||
return $this->_infoCard->getCertificatePair($key_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the XML Token to be processed
|
||||
*
|
||||
* @param string $strXmlToken The XML token to process
|
||||
* @return Zend_Auth_Adapter_InfoCard Provides a fluent interface
|
||||
*/
|
||||
public function setXmlToken($strXmlToken)
|
||||
{
|
||||
$this->_xmlToken = $strXmlToken;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the XML Token being processed
|
||||
*
|
||||
* @return string The XML token to be processed
|
||||
*/
|
||||
public function getXmlToken()
|
||||
{
|
||||
return $this->_xmlToken;
|
||||
}
|
||||
|
||||
/**
|
||||
* Authenticates the XML token
|
||||
*
|
||||
* @return Zend_Auth_Result The result of the authentication
|
||||
*/
|
||||
public function authenticate()
|
||||
{
|
||||
try {
|
||||
$claims = $this->_infoCard->process($this->getXmlToken());
|
||||
} catch(Exception $e) {
|
||||
return new Zend_Auth_Result(Zend_Auth_Result::FAILURE , null, array('Exception Thrown',
|
||||
$e->getMessage(),
|
||||
$e->getTraceAsString(),
|
||||
serialize($e)));
|
||||
}
|
||||
|
||||
if(!$claims->isValid()) {
|
||||
switch($claims->getCode()) {
|
||||
case Zend_infoCard_Claims::RESULT_PROCESSING_FAILURE:
|
||||
return new Zend_Auth_Result(
|
||||
Zend_Auth_Result::FAILURE,
|
||||
$claims,
|
||||
array(
|
||||
'Processing Failure',
|
||||
$claims->getErrorMsg()
|
||||
)
|
||||
);
|
||||
break;
|
||||
case Zend_InfoCard_Claims::RESULT_VALIDATION_FAILURE:
|
||||
return new Zend_Auth_Result(
|
||||
Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID,
|
||||
$claims,
|
||||
array(
|
||||
'Validation Failure',
|
||||
$claims->getErrorMsg()
|
||||
)
|
||||
);
|
||||
break;
|
||||
default:
|
||||
return new Zend_Auth_Result(
|
||||
Zend_Auth_Result::FAILURE,
|
||||
$claims,
|
||||
array(
|
||||
'Unknown Failure',
|
||||
$claims->getErrorMsg()
|
||||
)
|
||||
);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return new Zend_Auth_Result(
|
||||
Zend_Auth_Result::SUCCESS,
|
||||
$claims
|
||||
);
|
||||
}
|
||||
}
|
@ -1,399 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Cloud
|
||||
* @subpackage StorageService
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
|
||||
require_once 'Zend/Cloud/StorageService/Adapter.php';
|
||||
require_once 'Zend/Cloud/StorageService/Exception.php';
|
||||
require_once 'Zend/Service/Nirvanix.php';
|
||||
|
||||
/**
|
||||
* Adapter for Nirvanix cloud storage
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Cloud
|
||||
* @subpackage StorageService
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Cloud_StorageService_Adapter_Nirvanix
|
||||
implements Zend_Cloud_StorageService_Adapter
|
||||
{
|
||||
const USERNAME = 'auth_username';
|
||||
const PASSWORD = 'auth_password';
|
||||
const APP_KEY = 'auth_accesskey';
|
||||
const REMOTE_DIRECTORY = 'remote_directory';
|
||||
|
||||
/**
|
||||
* The Nirvanix adapter
|
||||
* @var Zend_Service_Nirvanix
|
||||
*/
|
||||
protected $_nirvanix;
|
||||
protected $_imfNs;
|
||||
protected $_metadataNs;
|
||||
protected $_remoteDirectory;
|
||||
private $maxPageSize = 500;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param array|Zend_Config $options
|
||||
* @return void
|
||||
*/
|
||||
function __construct($options = array())
|
||||
{
|
||||
if ($options instanceof Zend_Config) {
|
||||
$options = $options->toArray();
|
||||
}
|
||||
|
||||
if (!is_array($options)) {
|
||||
throw new Zend_Cloud_StorageService_Exception('Invalid options provided');
|
||||
}
|
||||
|
||||
$auth = array(
|
||||
'username' => $options[self::USERNAME],
|
||||
'password' => $options[self::PASSWORD],
|
||||
'appKey' => $options[self::APP_KEY],
|
||||
);
|
||||
$nirvanix_options = array();
|
||||
if (isset($options[self::HTTP_ADAPTER])) {
|
||||
$httpc = new Zend_Http_Client();
|
||||
$httpc->setAdapter($options[self::HTTP_ADAPTER]);
|
||||
$nirvanix_options['httpClient'] = $httpc;
|
||||
}
|
||||
try {
|
||||
$this->_nirvanix = new Zend_Service_Nirvanix($auth, $nirvanix_options);
|
||||
$this->_remoteDirectory = $options[self::REMOTE_DIRECTORY];
|
||||
$this->_imfNs = $this->_nirvanix->getService('IMFS');
|
||||
$this->_metadataNs = $this->_nirvanix->getService('Metadata');
|
||||
} catch (Zend_Service_Nirvanix_Exception $e) {
|
||||
throw new Zend_Cloud_StorageService_Exception('Error on create: '.$e->getMessage(), $e->getCode(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an item from the storage service.
|
||||
*
|
||||
* @param string $path
|
||||
* @param array $options
|
||||
* @return mixed
|
||||
*/
|
||||
public function fetchItem($path, $options = null)
|
||||
{
|
||||
$path = $this->_getFullPath($path);
|
||||
try {
|
||||
$item = $this->_imfNs->getContents($path);
|
||||
} catch (Zend_Service_Nirvanix_Exception $e) {
|
||||
throw new Zend_Cloud_StorageService_Exception('Error on fetch: '.$e->getMessage(), $e->getCode(), $e);
|
||||
}
|
||||
return $item;
|
||||
}
|
||||
|
||||
/**
|
||||
* Store an item in the storage service.
|
||||
* WARNING: This operation overwrites any item that is located at
|
||||
* $destinationPath.
|
||||
* @param string $destinationPath
|
||||
* @param mixed $data
|
||||
* @param array $options
|
||||
* @return void
|
||||
*/
|
||||
public function storeItem($destinationPath, $data, $options = null)
|
||||
{
|
||||
try {
|
||||
$path = $this->_getFullPath($destinationPath);
|
||||
$this->_imfNs->putContents($path, $data);
|
||||
} catch (Zend_Service_Nirvanix_Exception $e) {
|
||||
throw new Zend_Cloud_StorageService_Exception('Error on store: '.$e->getMessage(), $e->getCode(), $e);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete an item in the storage service.
|
||||
*
|
||||
* @param string $path
|
||||
* @param array $options
|
||||
* @return void
|
||||
*/
|
||||
public function deleteItem($path, $options = null)
|
||||
{
|
||||
try {
|
||||
$path = $this->_getFullPath($path);
|
||||
$this->_imfNs->unlink($path);
|
||||
} catch(Zend_Service_Nirvanix_Exception $e) {
|
||||
// if (trim(strtoupper($e->getMessage())) != 'INVALID PATH') {
|
||||
// // TODO Differentiate among errors in the Nirvanix adapter
|
||||
throw new Zend_Cloud_StorageService_Exception('Error on delete: '.$e->getMessage(), $e->getCode(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Copy an item in the storage service to a given path.
|
||||
* WARNING: This operation is *very* expensive for services that do not
|
||||
* support copying an item natively.
|
||||
*
|
||||
* @param string $sourcePath
|
||||
* @param string $destination path
|
||||
* @param array $options
|
||||
* @return void
|
||||
*/
|
||||
public function copyItem($sourcePath, $destinationPath, $options = null)
|
||||
{
|
||||
try {
|
||||
$sourcePath = $this->_getFullPath($sourcePath);
|
||||
$destinationPath = $this->_getFullPath($destinationPath);
|
||||
$this->_imfNs->CopyFiles(array('srcFilePath' => $sourcePath,
|
||||
'destFolderPath' => $destinationPath));
|
||||
} catch (Zend_Service_Nirvanix_Exception $e) {
|
||||
throw new Zend_Cloud_StorageService_Exception('Error on copy: '.$e->getMessage(), $e->getCode(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Move an item in the storage service to a given path.
|
||||
* WARNING: This operation is *very* expensive for services that do not
|
||||
* support moving an item natively.
|
||||
*
|
||||
* @param string $sourcePath
|
||||
* @param string $destination path
|
||||
* @param array $options
|
||||
* @return void
|
||||
*/
|
||||
public function moveItem($sourcePath, $destinationPath, $options = null)
|
||||
{
|
||||
try {
|
||||
$sourcePath = $this->_getFullPath($sourcePath);
|
||||
$destinationPath = $this->_getFullPath($destinationPath);
|
||||
$this->_imfNs->RenameFile(array('filePath' => $sourcePath,
|
||||
'newFileName' => $destinationPath));
|
||||
// $this->_imfNs->MoveFiles(array('srcFilePath' => $sourcePath,
|
||||
// 'destFolderPath' => $destinationPath));
|
||||
} catch (Zend_Service_Nirvanix_Exception $e) {
|
||||
throw new Zend_Cloud_StorageService_Exception('Error on move: '.$e->getMessage(), $e->getCode(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Rename an item in the storage service to a given name.
|
||||
*
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $name
|
||||
* @param array $options
|
||||
* @return void
|
||||
*/
|
||||
public function renameItem($path, $name, $options = null)
|
||||
{
|
||||
require_once 'Zend/Cloud/OperationNotAvailableException.php';
|
||||
throw new Zend_Cloud_OperationNotAvailableException('Renaming not implemented');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a key/value array of metadata for the given path.
|
||||
*
|
||||
* @param string $path
|
||||
* @param array $options
|
||||
* @return array An associative array of key/value pairs specifying the metadata for this object.
|
||||
* If no metadata exists, an empty array is returned.
|
||||
*/
|
||||
public function fetchMetadata($path, $options = null)
|
||||
{
|
||||
$path = $this->_getFullPath($path);
|
||||
try {
|
||||
$metadataNode = $this->_metadataNs->getMetadata(array('path' => $path));
|
||||
} catch (Zend_Service_Nirvanix_Exception $e) {
|
||||
throw new Zend_Cloud_StorageService_Exception('Error on fetching metadata: '.$e->getMessage(), $e->getCode(), $e);
|
||||
}
|
||||
|
||||
$metadata = array();
|
||||
$length = count($metadataNode->Metadata);
|
||||
|
||||
// Need to special case this as Nirvanix returns an array if there is
|
||||
// more than one, but doesn't return an array if there is only one.
|
||||
if ($length == 1)
|
||||
{
|
||||
$metadata[(string)$metadataNode->Metadata->Type->value] = (string)$metadataNode->Metadata->Value;
|
||||
}
|
||||
else if ($length > 1)
|
||||
{
|
||||
for ($i=0; $i<$length; $i++)
|
||||
{
|
||||
$metadata[(string)$metadataNode->Metadata[$i]->Type] = (string)$metadataNode->Metadata[$i]->Value;
|
||||
}
|
||||
}
|
||||
return $metadata;
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a key/value array of metadata at the given path.
|
||||
* WARNING: This operation overwrites any metadata that is located at
|
||||
* $destinationPath.
|
||||
*
|
||||
* @param string $destinationPath
|
||||
* @param array $metadata associative array specifying the key/value pairs for the metadata.
|
||||
* @param array $options
|
||||
* @return void
|
||||
*/
|
||||
public function storeMetadata($destinationPath, $metadata, $options = null)
|
||||
{
|
||||
$destinationPath = $this->_getFullPath($destinationPath);
|
||||
if ($metadata != null) {
|
||||
try {
|
||||
foreach ($metadata AS $key=>$value) {
|
||||
$metadataString = $key . ":" . $value;
|
||||
$this->_metadataNs->SetMetadata(array(
|
||||
'path' => $destinationPath,
|
||||
'metadata' => $metadataString,
|
||||
));
|
||||
}
|
||||
} catch (Zend_Service_Nirvanix_Exception $e) {
|
||||
throw new Zend_Cloud_StorageService_Exception('Error on storing metadata: '.$e->getMessage(), $e->getCode(), $e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a key/value array of metadata at the given path.
|
||||
*
|
||||
* @param string $path
|
||||
* @param array $metadata - An associative array specifying the key/value pairs for the metadata
|
||||
* to be deleted. If null, all metadata associated with the object will
|
||||
* be deleted.
|
||||
* @param array $options
|
||||
* @return void
|
||||
*/
|
||||
public function deleteMetadata($path, $metadata = null, $options = null)
|
||||
{
|
||||
$path = $this->_getFullPath($path);
|
||||
try {
|
||||
if ($metadata == null) {
|
||||
$this->_metadataNs->DeleteAllMetadata(array('path' => $path));
|
||||
} else {
|
||||
foreach ($metadata AS $key=>$value) {
|
||||
$this->_metadataNs->DeleteMetadata(array(
|
||||
'path' => $path,
|
||||
'metadata' => $key,
|
||||
));
|
||||
}
|
||||
}
|
||||
} catch (Zend_Service_Nirvanix_Exception $e) {
|
||||
throw new Zend_Cloud_StorageService_Exception('Error on deleting metadata: '.$e->getMessage(), $e->getCode(), $e);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Recursively traverse all the folders and build an array that contains
|
||||
* the path names for each folder.
|
||||
*
|
||||
* @param string $path folder path to get the list of folders from.
|
||||
* @param array& $resultArray reference to the array that contains the path names
|
||||
* for each folder.
|
||||
*/
|
||||
private function getAllFolders($path, &$resultArray)
|
||||
{
|
||||
$response = $this->_imfNs->ListFolder(array(
|
||||
'folderPath' => $path,
|
||||
'pageNumber' => 1,
|
||||
'pageSize' => $this->maxPageSize,
|
||||
));
|
||||
$numFolders = $response->ListFolder->TotalFolderCount;
|
||||
if ($numFolders == 0) {
|
||||
return;
|
||||
} else {
|
||||
//Need to special case this as Nirvanix returns an array if there is
|
||||
//more than one, but doesn't return an array if there is only one.
|
||||
if ($numFolders == 1) {
|
||||
$folderPath = $response->ListFolder->Folder->Path;
|
||||
array_push($resultArray, $folderPath);
|
||||
$this->getAllFolders('/' . $folderPath, $resultArray);
|
||||
} else {
|
||||
foreach ($response->ListFolder->Folder as $arrayElem) {
|
||||
$folderPath = $arrayElem->Path;
|
||||
array_push($resultArray, $folderPath);
|
||||
$this->getAllFolders('/' . $folderPath, $resultArray);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return an array of the items contained in the given path. The items
|
||||
* returned are the files or objects that in the specified path.
|
||||
*
|
||||
* @param string $path
|
||||
* @param array $options
|
||||
* @return array
|
||||
*/
|
||||
public function listItems($path, $options = null)
|
||||
{
|
||||
$path = $this->_getFullPath($path);
|
||||
$resultArray = array();
|
||||
|
||||
if (!isset($path)) {
|
||||
return false;
|
||||
} else {
|
||||
try {
|
||||
$response = $this->_imfNs->ListFolder(array(
|
||||
'folderPath' => $path,
|
||||
'pageNumber' => 1,
|
||||
'pageSize' => $this->maxPageSize,
|
||||
));
|
||||
} catch (Zend_Service_Nirvanix_Exception $e) {
|
||||
throw new Zend_Cloud_StorageService_Exception('Error on list: '.$e->getMessage(), $e->getCode(), $e);
|
||||
}
|
||||
|
||||
$numFiles = $response->ListFolder->TotalFileCount;
|
||||
|
||||
//Add the file names to the array
|
||||
if ($numFiles != 0) {
|
||||
//Need to special case this as Nirvanix returns an array if there is
|
||||
//more than one, but doesn't return an array if there is only one.
|
||||
if ($numFiles == 1) {
|
||||
$resultArray[] = (string)$response->ListFolder->File->Name;
|
||||
}
|
||||
else {
|
||||
foreach ($response->ListFolder->File as $arrayElem) {
|
||||
$resultArray[] = (string) $arrayElem->Name;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $resultArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get full path to an object
|
||||
*
|
||||
* @param string $path
|
||||
* @return string
|
||||
*/
|
||||
private function _getFullPath($path)
|
||||
{
|
||||
return $this->_remoteDirectory . $path;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the concrete client.
|
||||
* @return Zend_Service_Nirvanix
|
||||
*/
|
||||
public function getClient()
|
||||
{
|
||||
return $this->_nirvanix;
|
||||
}
|
||||
}
|
@ -1,497 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: InfoCard.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_EncryptedData
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/EncryptedData.php';
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_Assertion
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/Assertion.php';
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Cipher
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Cipher.php';
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_Security
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/Security.php';
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Adapter_Interface
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Adapter/Interface.php';
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Claims
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Claims.php';
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard
|
||||
{
|
||||
/**
|
||||
* URI for XML Digital Signature SHA1 Digests
|
||||
*/
|
||||
const DIGEST_SHA1 = 'http://www.w3.org/2000/09/xmldsig#sha1';
|
||||
|
||||
/**
|
||||
* An array of certificate pair files and optional passwords for them to search
|
||||
* when trying to determine which certificate was used to encrypt the transient key
|
||||
*
|
||||
* @var Array
|
||||
*/
|
||||
protected $_keyPairs;
|
||||
|
||||
/**
|
||||
* The instance to use to decrypt public-key encrypted data
|
||||
*
|
||||
* @var Zend_InfoCard_Cipher_Pki_Interface
|
||||
*/
|
||||
protected $_pkiCipherObj;
|
||||
|
||||
/**
|
||||
* The instance to use to decrypt symmetric encrypted data
|
||||
*
|
||||
* @var Zend_InfoCard_Cipher_Symmetric_Interface
|
||||
*/
|
||||
protected $_symCipherObj;
|
||||
|
||||
/**
|
||||
* The InfoCard Adapter to use for callbacks into the application using the component
|
||||
* such as when storing assertions, etc.
|
||||
*
|
||||
* @var Zend_InfoCard_Adapter_Interface
|
||||
*/
|
||||
protected $_adapter;
|
||||
|
||||
|
||||
/**
|
||||
* InfoCard Constructor
|
||||
*
|
||||
* @throws Zend_InfoCard_Exception
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->_keyPairs = array();
|
||||
|
||||
if(!extension_loaded('mcrypt')) {
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
throw new Zend_InfoCard_Exception("Use of the Zend_InfoCard component requires the mcrypt extension to be enabled in PHP");
|
||||
}
|
||||
|
||||
if(!extension_loaded('openssl')) {
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
throw new Zend_InfoCard_Exception("Use of the Zend_InfoCard component requires the openssl extension to be enabled in PHP");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the adapter uesd for callbacks into the application using the component, used
|
||||
* when doing things such as storing / retrieving assertions, etc.
|
||||
*
|
||||
* @param Zend_InfoCard_Adapter_Interface $a The Adapter instance
|
||||
* @return Zend_InfoCard The instnace
|
||||
*/
|
||||
public function setAdapter(Zend_InfoCard_Adapter_Interface $a)
|
||||
{
|
||||
$this->_adapter = $a;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the adapter used for callbacks into the application using the component.
|
||||
* If no adapter was set then an instance of Zend_InfoCard_Adapter_Default is used
|
||||
*
|
||||
* @return Zend_InfoCard_Adapter_Interface The Adapter instance
|
||||
*/
|
||||
public function getAdapter()
|
||||
{
|
||||
if($this->_adapter === null) {
|
||||
require_once 'Zend/InfoCard/Adapter/Default.php';
|
||||
$this->setAdapter(new Zend_InfoCard_Adapter_Default());
|
||||
}
|
||||
|
||||
return $this->_adapter;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the Public Key Cipher object used in this instance
|
||||
*
|
||||
* @return Zend_InfoCard_Cipher_Pki_Interface
|
||||
*/
|
||||
public function getPkiCipherObject()
|
||||
{
|
||||
return $this->_pkiCipherObj;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the Public Key Cipher Object used in this instance
|
||||
*
|
||||
* @param Zend_InfoCard_Cipher_Pki_Interface $cipherObj
|
||||
* @return Zend_InfoCard
|
||||
*/
|
||||
public function setPkiCipherObject(Zend_InfoCard_Cipher_Pki_Interface $cipherObj)
|
||||
{
|
||||
$this->_pkiCipherObj = $cipherObj;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Symmetric Cipher Object used in this instance
|
||||
*
|
||||
* @return Zend_InfoCard_Cipher_Symmetric_Interface
|
||||
*/
|
||||
public function getSymCipherObject()
|
||||
{
|
||||
return $this->_symCipherObj;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the Symmetric Cipher Object used in this instance
|
||||
*
|
||||
* @param Zend_InfoCard_Cipher_Symmetric_Interface $cipherObj
|
||||
* @return Zend_InfoCard
|
||||
*/
|
||||
public function setSymCipherObject($cipherObj)
|
||||
{
|
||||
$this->_symCipherObj = $cipherObj;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a Certificate Pair by Key ID from the search list
|
||||
*
|
||||
* @throws Zend_InfoCard_Exception
|
||||
* @param string $key_id The Certificate Key ID returned from adding the certificate pair
|
||||
* @return Zend_InfoCard
|
||||
*/
|
||||
public function removeCertificatePair($key_id)
|
||||
{
|
||||
|
||||
if(!key_exists($key_id, $this->_keyPairs)) {
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
throw new Zend_InfoCard_Exception("Attempted to remove unknown key id: $key_id");
|
||||
}
|
||||
|
||||
unset($this->_keyPairs[$key_id]);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a Certificate Pair to the list of certificates searched by the component
|
||||
*
|
||||
* @throws Zend_InfoCard_Exception
|
||||
* @param string $private_key_file The path to the private key file for the pair
|
||||
* @param string $public_key_file The path to the certificate / public key for the pair
|
||||
* @param string $type (optional) The URI for the type of key pair this is (default RSA with OAEP padding)
|
||||
* @param string $password (optional) The password for the private key file if necessary
|
||||
* @return string A key ID representing this key pair in the component
|
||||
*/
|
||||
public function addCertificatePair($private_key_file, $public_key_file, $type = Zend_InfoCard_Cipher::ENC_RSA_OAEP_MGF1P, $password = null)
|
||||
{
|
||||
if(!file_exists($private_key_file) ||
|
||||
!file_exists($public_key_file)) {
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
throw new Zend_InfoCard_Exception("Could not locate the public and private certificate pair files: $private_key_file, $public_key_file");
|
||||
}
|
||||
|
||||
if(!is_readable($private_key_file) ||
|
||||
!is_readable($public_key_file)) {
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
throw new Zend_InfoCard_Exception("Could not read the public and private certificate pair files (check permissions): $private_key_file, $public_key_file");
|
||||
}
|
||||
|
||||
$key_id = md5($private_key_file.$public_key_file);
|
||||
|
||||
if(key_exists($key_id, $this->_keyPairs)) {
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
throw new Zend_InfoCard_Exception("Attempted to add previously existing certificate pair: $private_key_file, $public_key_file");
|
||||
}
|
||||
|
||||
switch($type) {
|
||||
case Zend_InfoCard_Cipher::ENC_RSA:
|
||||
case Zend_InfoCard_Cipher::ENC_RSA_OAEP_MGF1P:
|
||||
$this->_keyPairs[$key_id] = array('private' => $private_key_file,
|
||||
'public' => $public_key_file,
|
||||
'type_uri' => $type);
|
||||
|
||||
if($password !== null) {
|
||||
$this->_keyPairs[$key_id]['password'] = $password;
|
||||
} else {
|
||||
$this->_keyPairs[$key_id]['password'] = null;
|
||||
}
|
||||
|
||||
return $key_id;
|
||||
break;
|
||||
default:
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
throw new Zend_InfoCard_Exception("Invalid Certificate Pair Type specified: $type");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a Certificate Pair from a key ID
|
||||
*
|
||||
* @throws Zend_InfoCard_Exception
|
||||
* @param string $key_id The Key ID of the certificate pair in the component
|
||||
* @return array An array containing the path to the private/public key files,
|
||||
* the type URI and the password if provided
|
||||
*/
|
||||
public function getCertificatePair($key_id)
|
||||
{
|
||||
if(key_exists($key_id, $this->_keyPairs)) {
|
||||
return $this->_keyPairs[$key_id];
|
||||
}
|
||||
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
throw new Zend_InfoCard_Exception("Invalid Certificate Pair ID provided: $key_id");
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the digest of a given public key / certificate using the provided digest
|
||||
* method
|
||||
*
|
||||
* @throws Zend_InfoCard_Exception
|
||||
* @param string $key_id The certificate key id in the component
|
||||
* @param string $digestMethod The URI of the digest method to use (default SHA1)
|
||||
* @return string The digest value in binary format
|
||||
*/
|
||||
protected function _getPublicKeyDigest($key_id, $digestMethod = self::DIGEST_SHA1)
|
||||
{
|
||||
$certificatePair = $this->getCertificatePair($key_id);
|
||||
|
||||
$temp = file($certificatePair['public']);
|
||||
unset($temp[count($temp)-1]);
|
||||
unset($temp[0]);
|
||||
$certificateData = base64_decode(implode("\n", $temp));
|
||||
|
||||
switch($digestMethod) {
|
||||
case self::DIGEST_SHA1:
|
||||
$digest_retval = sha1($certificateData, true);
|
||||
break;
|
||||
default:
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
throw new Zend_InfoCard_Exception("Invalid Digest Type Provided: $digestMethod");
|
||||
}
|
||||
|
||||
return $digest_retval;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find a certificate pair based on a digest of its public key / certificate file
|
||||
*
|
||||
* @param string $digest The digest value of the public key wanted in binary form
|
||||
* @param string $digestMethod The URI of the digest method used to calculate the digest
|
||||
* @return mixed The Key ID of the matching certificate pair or false if not found
|
||||
*/
|
||||
protected function _findCertifiatePairByDigest($digest, $digestMethod = self::DIGEST_SHA1)
|
||||
{
|
||||
|
||||
foreach($this->_keyPairs as $key_id => $certificate_data) {
|
||||
|
||||
$cert_digest = $this->_getPublicKeyDigest($key_id, $digestMethod);
|
||||
|
||||
if($cert_digest == $digest) {
|
||||
return $key_id;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Extracts the Signed Token from an EncryptedData block
|
||||
*
|
||||
* @throws Zend_InfoCard_Exception
|
||||
* @param string $strXmlToken The EncryptedData XML block
|
||||
* @return string The XML of the Signed Token inside of the EncryptedData block
|
||||
*/
|
||||
protected function _extractSignedToken($strXmlToken)
|
||||
{
|
||||
$encryptedData = Zend_InfoCard_Xml_EncryptedData::getInstance($strXmlToken);
|
||||
|
||||
// Determine the Encryption Method used to encrypt the token
|
||||
|
||||
switch($encryptedData->getEncryptionMethod()) {
|
||||
case Zend_InfoCard_Cipher::ENC_AES128CBC:
|
||||
case Zend_InfoCard_Cipher::ENC_AES256CBC:
|
||||
break;
|
||||
default:
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
throw new Zend_InfoCard_Exception("Unknown Encryption Method used in the secure token");
|
||||
}
|
||||
|
||||
// Figure out the Key we are using to decrypt the token
|
||||
|
||||
$keyinfo = $encryptedData->getKeyInfo();
|
||||
|
||||
if(!($keyinfo instanceof Zend_InfoCard_Xml_KeyInfo_XmlDSig)) {
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
throw new Zend_InfoCard_Exception("Expected a XML digital signature KeyInfo, but was not found");
|
||||
}
|
||||
|
||||
|
||||
$encryptedKey = $keyinfo->getEncryptedKey();
|
||||
|
||||
switch($encryptedKey->getEncryptionMethod()) {
|
||||
case Zend_InfoCard_Cipher::ENC_RSA:
|
||||
case Zend_InfoCard_Cipher::ENC_RSA_OAEP_MGF1P:
|
||||
break;
|
||||
default:
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
throw new Zend_InfoCard_Exception("Unknown Key Encryption Method used in secure token");
|
||||
}
|
||||
|
||||
$securityTokenRef = $encryptedKey->getKeyInfo()->getSecurityTokenReference();
|
||||
|
||||
$key_id = $this->_findCertifiatePairByDigest($securityTokenRef->getKeyReference());
|
||||
|
||||
if(!$key_id) {
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
throw new Zend_InfoCard_Exception("Unable to find key pair used to encrypt symmetric InfoCard Key");
|
||||
}
|
||||
|
||||
$certificate_pair = $this->getCertificatePair($key_id);
|
||||
|
||||
// Santity Check
|
||||
|
||||
if($certificate_pair['type_uri'] != $encryptedKey->getEncryptionMethod()) {
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
throw new Zend_InfoCard_Exception("Certificate Pair which matches digest is not of same algorithm type as document, check addCertificate()");
|
||||
}
|
||||
|
||||
$PKcipher = Zend_InfoCard_Cipher::getInstanceByURI($encryptedKey->getEncryptionMethod());
|
||||
|
||||
$base64DecodeSupportsStrictParam = version_compare(PHP_VERSION, '5.2.0', '>=');
|
||||
|
||||
if ($base64DecodeSupportsStrictParam) {
|
||||
$keyCipherValueBase64Decoded = base64_decode($encryptedKey->getCipherValue(), true);
|
||||
} else {
|
||||
$keyCipherValueBase64Decoded = base64_decode($encryptedKey->getCipherValue());
|
||||
}
|
||||
|
||||
$symmetricKey = $PKcipher->decrypt(
|
||||
$keyCipherValueBase64Decoded,
|
||||
file_get_contents($certificate_pair['private']),
|
||||
$certificate_pair['password']
|
||||
);
|
||||
|
||||
$symCipher = Zend_InfoCard_Cipher::getInstanceByURI($encryptedData->getEncryptionMethod());
|
||||
|
||||
if ($base64DecodeSupportsStrictParam) {
|
||||
$dataCipherValueBase64Decoded = base64_decode($encryptedData->getCipherValue(), true);
|
||||
} else {
|
||||
$dataCipherValueBase64Decoded = base64_decode($encryptedData->getCipherValue());
|
||||
}
|
||||
|
||||
$signedToken = $symCipher->decrypt($dataCipherValueBase64Decoded, $symmetricKey);
|
||||
|
||||
return $signedToken;
|
||||
}
|
||||
|
||||
/**
|
||||
* Process an input Infomation Card EncryptedData block sent from the client,
|
||||
* validate it, and return the claims contained within it on success or an error message on error
|
||||
*
|
||||
* @param string $strXmlToken The XML token sent to the server from the client
|
||||
* @return Zend_Infocard_Claims The Claims object containing the claims, or any errors which occurred
|
||||
*/
|
||||
public function process($strXmlToken)
|
||||
{
|
||||
|
||||
$retval = new Zend_InfoCard_Claims();
|
||||
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
try {
|
||||
$signedAssertionsXml = $this->_extractSignedToken($strXmlToken);
|
||||
} catch(Zend_InfoCard_Exception $e) {
|
||||
$retval->setError('Failed to extract assertion document');
|
||||
$retval->setCode(Zend_InfoCard_Claims::RESULT_PROCESSING_FAILURE);
|
||||
return $retval;
|
||||
}
|
||||
|
||||
try {
|
||||
$assertions = Zend_InfoCard_Xml_Assertion::getInstance($signedAssertionsXml);
|
||||
} catch(Zend_InfoCard_Exception $e) {
|
||||
$retval->setError('Failure processing assertion document');
|
||||
$retval->setCode(Zend_InfoCard_Claims::RESULT_PROCESSING_FAILURE);
|
||||
return $retval;
|
||||
}
|
||||
|
||||
if(!($assertions instanceof Zend_InfoCard_Xml_Assertion_Interface)) {
|
||||
throw new Zend_InfoCard_Exception("Invalid Assertion Object returned");
|
||||
}
|
||||
|
||||
if(!($reference_id = Zend_InfoCard_Xml_Security::validateXMLSignature($assertions->asXML()))) {
|
||||
$retval->setError("Failure Validating the Signature of the assertion document");
|
||||
$retval->setCode(Zend_InfoCard_Claims::RESULT_VALIDATION_FAILURE);
|
||||
return $retval;
|
||||
}
|
||||
|
||||
// The reference id should be locally scoped as far as I know
|
||||
if($reference_id[0] == '#') {
|
||||
$reference_id = substr($reference_id, 1);
|
||||
} else {
|
||||
$retval->setError("Reference of document signature does not reference the local document");
|
||||
$retval->setCode(Zend_InfoCard_Claims::RESULT_VALIDATION_FAILURE);
|
||||
return $retval;
|
||||
}
|
||||
|
||||
// Make sure the signature is in reference to the same document as the assertions
|
||||
if($reference_id != $assertions->getAssertionID()) {
|
||||
$retval->setError("Reference of document signature does not reference the local document");
|
||||
$retval->setCode(Zend_InfoCard_Claims::RESULT_VALIDATION_FAILURE);
|
||||
}
|
||||
|
||||
// Validate we haven't seen this before and the conditions are acceptable
|
||||
$conditions = $this->getAdapter()->retrieveAssertion($assertions->getAssertionURI(), $assertions->getAssertionID());
|
||||
|
||||
if($conditions === false) {
|
||||
$conditions = $assertions->getConditions();
|
||||
}
|
||||
|
||||
|
||||
if(is_array($condition_error = $assertions->validateConditions($conditions))) {
|
||||
$retval->setError("Conditions of assertion document are not met: {$condition_error[1]} ({$condition_error[0]})");
|
||||
$retval->setCode(Zend_InfoCard_Claims::RESULT_VALIDATION_FAILURE);
|
||||
}
|
||||
|
||||
$attributes = $assertions->getAttributes();
|
||||
|
||||
$retval->setClaims($attributes);
|
||||
|
||||
if($retval->getCode() == 0) {
|
||||
$retval->setCode(Zend_InfoCard_Claims::RESULT_SUCCESS);
|
||||
}
|
||||
|
||||
return $retval;
|
||||
}
|
||||
}
|
@ -1,79 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Adapter
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Default.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Adapter_Interface
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Adapter/Interface.php';
|
||||
|
||||
/**
|
||||
* The default InfoCard component Adapter which serves as a pass-thru placeholder
|
||||
* for developers. Initially developed to provide a callback mechanism to store and retrieve
|
||||
* assertions as part of the validation process it can be used anytime callback facilities
|
||||
* are necessary
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Adapter
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard_Adapter_Default implements Zend_InfoCard_Adapter_Interface
|
||||
{
|
||||
/**
|
||||
* Store the assertion (pass-thru does nothing)
|
||||
*
|
||||
* @param string $assertionURI The assertion type URI
|
||||
* @param string $assertionID The specific assertion ID
|
||||
* @param array $conditions An array of claims to store associated with the assertion
|
||||
* @return bool Always returns true (would return false on store failure)
|
||||
*/
|
||||
public function storeAssertion($assertionURI, $assertionID, $conditions)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve an assertion (pass-thru does nothing)
|
||||
*
|
||||
* @param string $assertionURI The assertion type URI
|
||||
* @param string $assertionID The assertion ID to retrieve
|
||||
* @return mixed False if the assertion ID was not found for that URI, or an array of
|
||||
* conditions associated with that assertion if found (always returns false)
|
||||
*/
|
||||
public function retrieveAssertion($assertionURI, $assertionID)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove an assertion (pass-thru does nothing)
|
||||
*
|
||||
* @param string $assertionURI The assertion type URI
|
||||
* @param string $assertionID The assertion ID to remove
|
||||
* @return bool Always returns true (false on removal failure)
|
||||
*/
|
||||
public function removeAssertion($assertionURI, $assertionID)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Adapter
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Exception.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* @see Zend_InfoCard_Exception
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Adapter
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard_Adapter_Exception extends Zend_InfoCard_Exception
|
||||
{
|
||||
}
|
@ -1,64 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Adapter
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* The interface required by all Zend_InfoCard Adapter classes to implement. It represents
|
||||
* a series of callback methods used by the component during processing of an information card
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Adapter
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
interface Zend_InfoCard_Adapter_Interface
|
||||
{
|
||||
/**
|
||||
* Store the assertion's claims in persistent storage
|
||||
*
|
||||
* @param string $assertionURI The assertion type URI
|
||||
* @param string $assertionID The specific assertion ID
|
||||
* @param array $conditions An array of claims to store associated with the assertion
|
||||
* @return bool True on success, false on failure
|
||||
*/
|
||||
public function storeAssertion($assertionURI, $assertionID, $conditions);
|
||||
|
||||
/**
|
||||
* Retrieve the claims of a given assertion from persistent storage
|
||||
*
|
||||
* @param string $assertionURI The assertion type URI
|
||||
* @param string $assertionID The assertion ID to retrieve
|
||||
* @return mixed False if the assertion ID was not found for that URI, or an array of
|
||||
* conditions associated with that assertion if found in the same format
|
||||
* provided
|
||||
*/
|
||||
public function retrieveAssertion($assertionURI, $assertionID);
|
||||
|
||||
/**
|
||||
* Remove the claims of a given assertion from persistent storage
|
||||
*
|
||||
* @param string $asserionURI The assertion type URI
|
||||
* @param string $assertionID The assertion ID to remove
|
||||
* @return bool True on success, false on failure
|
||||
*/
|
||||
public function removeAssertion($asserionURI, $assertionID);
|
||||
}
|
@ -1,99 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Cipher.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Provides an abstraction for encryption ciphers used in an Information Card
|
||||
* implementation
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard_Cipher
|
||||
{
|
||||
/**
|
||||
* AES 256 Encryption with CBC
|
||||
*/
|
||||
const ENC_AES256CBC = 'http://www.w3.org/2001/04/xmlenc#aes256-cbc';
|
||||
|
||||
/**
|
||||
* AES 128 Encryption with CBC
|
||||
*/
|
||||
const ENC_AES128CBC = 'http://www.w3.org/2001/04/xmlenc#aes128-cbc';
|
||||
|
||||
/**
|
||||
* RSA Public Key Encryption with OAEP Padding
|
||||
*/
|
||||
const ENC_RSA_OAEP_MGF1P = 'http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p';
|
||||
|
||||
/**
|
||||
* RSA Public Key Encryption with no padding
|
||||
*/
|
||||
const ENC_RSA = 'http://www.w3.org/2001/04/xmlenc#rsa-1_5';
|
||||
|
||||
/**
|
||||
* Constructor (disabled)
|
||||
*
|
||||
* @return void
|
||||
* @codeCoverageIgnoreStart
|
||||
*/
|
||||
protected function __construct()
|
||||
{
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
/**
|
||||
* Returns an instance of a cipher object supported based on the URI provided
|
||||
*
|
||||
* @throws Zend_InfoCard_Cipher_Exception
|
||||
* @param string $uri The URI of the encryption method wantde
|
||||
* @return mixed an Instance of Zend_InfoCard_Cipher_Symmetric_Interface or Zend_InfoCard_Cipher_Pki_Interface
|
||||
* depending on URI
|
||||
*/
|
||||
static public function getInstanceByURI($uri)
|
||||
{
|
||||
switch($uri) {
|
||||
case self::ENC_AES256CBC:
|
||||
include_once 'Zend/InfoCard/Cipher/Symmetric/Adapter/Aes256cbc.php';
|
||||
return new Zend_InfoCard_Cipher_Symmetric_Adapter_Aes256cbc();
|
||||
|
||||
case self::ENC_AES128CBC:
|
||||
include_once 'Zend/InfoCard/Cipher/Symmetric/Adapter/Aes128cbc.php';
|
||||
return new Zend_InfoCard_Cipher_Symmetric_Adapter_Aes128cbc();
|
||||
|
||||
case self::ENC_RSA_OAEP_MGF1P:
|
||||
include_once 'Zend/InfoCard/Cipher/Pki/Adapter/Rsa.php';
|
||||
return new Zend_InfoCard_Cipher_Pki_Adapter_Rsa(Zend_InfoCard_Cipher_Pki_Adapter_Rsa::OAEP_PADDING);
|
||||
break;
|
||||
|
||||
case self::ENC_RSA:
|
||||
include_once 'Zend/InfoCard/Cipher/Pki/Adapter/Rsa.php';
|
||||
return new Zend_InfoCard_Cipher_Pki_Adapter_Rsa(Zend_InfoCard_Cipher_Pki_Adapter_Rsa::NO_PADDING);
|
||||
break;
|
||||
|
||||
default:
|
||||
require_once 'Zend/InfoCard/Cipher/Exception.php';
|
||||
throw new Zend_InfoCard_Cipher_Exception("Unknown Cipher URI");
|
||||
}
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Exception.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Exception
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard_Cipher_Exception extends Zend_InfoCard_Exception
|
||||
{
|
||||
}
|
@ -1,88 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Abstract.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Cipher_Pki_Interface
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Cipher/Pki/Interface.php';
|
||||
|
||||
/**
|
||||
* An abstract class for public-key ciphers
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
abstract class Zend_InfoCard_Cipher_Pki_Adapter_Abstract implements Zend_InfoCard_Cipher_Pki_Interface
|
||||
{
|
||||
/**
|
||||
* OAEP Padding public key encryption
|
||||
*/
|
||||
const OAEP_PADDING = 1;
|
||||
|
||||
/**
|
||||
* No padding public key encryption
|
||||
*/
|
||||
const NO_PADDING = 2;
|
||||
|
||||
/**
|
||||
* The type of padding to use
|
||||
*
|
||||
* @var integer one of the padding constants in this class
|
||||
*/
|
||||
protected $_padding;
|
||||
|
||||
/**
|
||||
* Set the padding of the public key encryption
|
||||
*
|
||||
* @throws Zend_InfoCard_Cipher_Exception
|
||||
* @param integer $padding One of the constnats in this class
|
||||
* @return Zend_InfoCard_Pki_Adapter_Abstract
|
||||
*/
|
||||
public function setPadding($padding)
|
||||
{
|
||||
switch($padding) {
|
||||
case self::OAEP_PADDING:
|
||||
case self::NO_PADDING:
|
||||
$this->_padding = $padding;
|
||||
break;
|
||||
default:
|
||||
require_once 'Zend/InfoCard/Cipher/Exception.php';
|
||||
throw new Zend_InfoCard_Cipher_Exception("Invalid Padding Type Provided");
|
||||
break;
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retruns the public-key padding used
|
||||
*
|
||||
* @return integer One of the padding constants in this class
|
||||
*/
|
||||
public function getPadding()
|
||||
{
|
||||
return $this->_padding;
|
||||
}
|
||||
}
|
@ -1,120 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Rsa.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Cipher_Pki_Adapter_Abstract
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Cipher/Pki/Adapter/Abstract.php';
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Cipher_Pki_Rsa_Interface
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Cipher/Pki/Rsa/Interface.php';
|
||||
|
||||
/**
|
||||
* RSA Public Key Encryption Cipher Object for the InfoCard component. Relies on OpenSSL
|
||||
* to implement the RSA algorithm
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard_Cipher_Pki_Adapter_Rsa
|
||||
extends Zend_InfoCard_Cipher_Pki_Adapter_Abstract
|
||||
implements Zend_InfoCard_Cipher_Pki_Rsa_Interface
|
||||
{
|
||||
|
||||
/**
|
||||
* Object Constructor
|
||||
*
|
||||
* @param integer $padding The type of Padding to use
|
||||
*/
|
||||
public function __construct($padding = Zend_InfoCard_Cipher_Pki_Adapter_Abstract::NO_PADDING)
|
||||
{
|
||||
// Can't test this..
|
||||
// @codeCoverageIgnoreStart
|
||||
if(!extension_loaded('openssl')) {
|
||||
require_once 'Zend/InfoCard/Cipher/Exception.php';
|
||||
throw new Zend_InfoCard_Cipher_Exception("Use of this PKI RSA Adapter requires the openssl extension loaded");
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
|
||||
$this->setPadding($padding);
|
||||
}
|
||||
|
||||
/**
|
||||
* Decrypts RSA encrypted data using the given private key
|
||||
*
|
||||
* @throws Zend_InfoCard_Cipher_Exception
|
||||
* @param string $encryptedData The encrypted data in binary format
|
||||
* @param string $privateKey The private key in binary format
|
||||
* @param string $password The private key passphrase
|
||||
* @param integer $padding The padding to use during decryption (of not provided object value will be used)
|
||||
* @return string The decrypted data
|
||||
*/
|
||||
public function decrypt($encryptedData, $privateKey, $password = null, $padding = null)
|
||||
{
|
||||
$private_key = openssl_pkey_get_private(array($privateKey, $password));
|
||||
|
||||
if(!$private_key) {
|
||||
require_once 'Zend/InfoCard/Cipher/Exception.php';
|
||||
throw new Zend_InfoCard_Cipher_Exception("Failed to load private key");
|
||||
}
|
||||
|
||||
if($padding !== null) {
|
||||
try {
|
||||
$this->setPadding($padding);
|
||||
} catch(Exception $e) {
|
||||
openssl_free_key($private_key);
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
switch($this->getPadding()) {
|
||||
case self::NO_PADDING:
|
||||
$openssl_padding = OPENSSL_NO_PADDING;
|
||||
break;
|
||||
case self::OAEP_PADDING:
|
||||
$openssl_padding = OPENSSL_PKCS1_OAEP_PADDING;
|
||||
break;
|
||||
}
|
||||
|
||||
$result = openssl_private_decrypt($encryptedData, $decryptedData, $private_key, $openssl_padding);
|
||||
|
||||
openssl_free_key($private_key);
|
||||
|
||||
if(!$result) {
|
||||
require_once 'Zend/InfoCard/Cipher/Exception.php';
|
||||
throw new Zend_InfoCard_Cipher_Exception("Unable to Decrypt Value using provided private key");
|
||||
}
|
||||
|
||||
if($this->getPadding() == self::NO_PADDING) {
|
||||
$decryptedData = substr($decryptedData, 2);
|
||||
$start = strpos($decryptedData, 0) + 1;
|
||||
$decryptedData = substr($decryptedData, $start);
|
||||
}
|
||||
|
||||
return $decryptedData;
|
||||
}
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Empty Interface represents a Pki cipher object
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
interface Zend_InfoCard_Cipher_Pki_Interface
|
||||
{
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Cipher_PKI_Adapter_Abstract
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Cipher/Pki/Adapter/Abstract.php';
|
||||
|
||||
/**
|
||||
* The interface which defines the RSA Public-key encryption object
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
interface Zend_InfoCard_Cipher_Pki_Rsa_Interface
|
||||
{
|
||||
/**
|
||||
* Decrypts RSA encrypted data using the given private key
|
||||
*
|
||||
* @throws Zend_InfoCard_Cipher_Exception
|
||||
* @param string $encryptedData The encrypted data in binary format
|
||||
* @param string $privateKey The private key in binary format
|
||||
* @param string $password The private key passphrase
|
||||
* @param integer $padding The padding to use during decryption (of not provided object value will be used)
|
||||
* @return string The decrypted data
|
||||
*/
|
||||
public function decrypt($encryptedData, $privateKey, $password = null, $padding = Zend_InfoCard_Cipher_Pki_Adapter_Abstract::NO_PADDING);
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Abstract.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Cipher_Symmetric_Interface
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Cipher/Symmetric/Interface.php';
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
abstract class Zend_InfoCard_Cipher_Symmetric_Adapter_Abstract
|
||||
implements Zend_InfoCard_Cipher_Symmetric_Interface
|
||||
{
|
||||
}
|
@ -1,40 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Aes128cbc.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Cipher_Symmetric_Adapter_Aes256cbc
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Cipher/Symmetric/Adapter/Aes256cbc.php';
|
||||
|
||||
/**
|
||||
* Implements AES128 with CBC encryption implemented using the mCrypt extension
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard_Cipher_Symmetric_Adapter_Aes128cbc
|
||||
extends Zend_InfoCard_Cipher_Symmetric_Adapter_Aes256cbc
|
||||
{
|
||||
}
|
@ -1,111 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Aes256cbc.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Cipher_Symmetric_Adapter_Abstract
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Cipher/Symmetric/Adapter/Abstract.php';
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Cipher_Symmetric_Aes256cbc_Interface
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Cipher/Symmetric/Aes256cbc/Interface.php';
|
||||
|
||||
/**
|
||||
* Implements AES256 with CBC encryption implemented using the mCrypt extension
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard_Cipher_Symmetric_Adapter_Aes256cbc
|
||||
extends Zend_InfoCard_Cipher_Symmetric_Adapter_Abstract
|
||||
implements Zend_InfoCard_Cipher_Symmetric_Aes256cbc_Interface
|
||||
{
|
||||
/**
|
||||
* The MCRYPT Cipher constant for this encryption
|
||||
*/
|
||||
const MCRYPT_CIPHER = MCRYPT_RIJNDAEL_128;
|
||||
|
||||
/**
|
||||
* The MCRYPT Mode constant for this encryption
|
||||
*/
|
||||
const MCRYPT_MODE = MCRYPT_MODE_CBC;
|
||||
|
||||
/**
|
||||
* The default length of the IV to use
|
||||
*/
|
||||
const IV_LENGTH = 16;
|
||||
|
||||
/**
|
||||
* The object constructor
|
||||
*
|
||||
* @throws Zend_InfoCard_Cipher_Exception
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
// Can't test for this
|
||||
// @codeCoverageIgnoreStart
|
||||
if(!extension_loaded('mcrypt')) {
|
||||
require_once 'Zend/InfoCard/Cipher/Exception.php';
|
||||
throw new Zend_InfoCard_Cipher_Exception("Use of the AES256CBC Cipher requires the mcrypt extension");
|
||||
}
|
||||
// @codeCoveregIgnoreEnd
|
||||
}
|
||||
|
||||
/**
|
||||
* Decrypts data using the AES Algorithm using the mCrypt extension
|
||||
*
|
||||
* @throws Zend_InfoCard_Cipher_Exception
|
||||
* @param string $encryptedData The encrypted data in binary format
|
||||
* @param string $decryptionKey The decryption key
|
||||
* @param integer $iv_length The IV length to use
|
||||
* @return string the decrypted data with any terminating nulls removed
|
||||
*/
|
||||
public function decrypt($encryptedData, $decryptionKey, $iv_length = null)
|
||||
{
|
||||
|
||||
$iv_length = ($iv_length === null) ? self::IV_LENGTH : $iv_length;
|
||||
|
||||
$mcrypt_iv = null;
|
||||
|
||||
if($iv_length > 0) {
|
||||
$mcrypt_iv = substr($encryptedData, 0, $iv_length);
|
||||
$encryptedData = substr($encryptedData, $iv_length);
|
||||
}
|
||||
|
||||
$decrypted = mcrypt_decrypt(self::MCRYPT_CIPHER, $decryptionKey, $encryptedData, self::MCRYPT_MODE, $mcrypt_iv);
|
||||
|
||||
if(!$decrypted) {
|
||||
require_once 'Zend/InfoCard/Cipher/Exception.php';
|
||||
throw new Zend_InfoCard_Cipher_Exception("Failed to decrypt data using AES256CBC Algorithm");
|
||||
}
|
||||
|
||||
$decryptedLength = strlen($decrypted);
|
||||
$paddingLength = substr($decrypted, $decryptedLength -1, 1);
|
||||
$decrypted = substr($decrypted, 0, $decryptedLength - ord($paddingLength));
|
||||
|
||||
return rtrim($decrypted, "\0");
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Cipher_Symmetric_Aes256cbc_Interface
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Cipher/Symmetric/Aes256cbc/Interface.php';
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
interface Zend_InfoCard_Cipher_Symmetric_Aes128cbc_Interface
|
||||
extends Zend_InfoCard_Cipher_Symmetric_Aes256cbc_Interface
|
||||
{
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
interface Zend_InfoCard_Cipher_Symmetric_Aes256cbc_Interface
|
||||
{
|
||||
public function decrypt($encryptedData, $decryptionKey, $iv_length = null);
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Cipher
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
interface Zend_InfoCard_Cipher_Symmetric_Interface
|
||||
{
|
||||
}
|
@ -1,307 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Claims.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Result value of the InfoCard component, contains any error messages and claims
|
||||
* from the processing of an information card.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard_Claims
|
||||
{
|
||||
/**
|
||||
* Successful validation and extraion of claims
|
||||
*/
|
||||
const RESULT_SUCCESS = 1;
|
||||
|
||||
/**
|
||||
* Indicates there was an error processing the XML document
|
||||
*/
|
||||
const RESULT_PROCESSING_FAILURE = 2;
|
||||
|
||||
/**
|
||||
* Indicates that the signature values within the XML document failed verification
|
||||
*/
|
||||
const RESULT_VALIDATION_FAILURE = 3;
|
||||
|
||||
/**
|
||||
* The default namespace to assume in these claims
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_defaultNamespace = null;
|
||||
|
||||
/**
|
||||
* A boolean indicating if the claims should be consider "valid" or not based on processing
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
protected $_isValid = true;
|
||||
|
||||
/**
|
||||
* The error message if any
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $_error = "";
|
||||
|
||||
/**
|
||||
* An array of claims taken from the information card
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $_claims;
|
||||
|
||||
/**
|
||||
* The result code of processing the information card as defined by the constants of this class
|
||||
*
|
||||
* @var integer
|
||||
*/
|
||||
protected $_code;
|
||||
|
||||
/**
|
||||
* Override for the safeguard which ensures that you don't use claims which failed validation.
|
||||
* Used in situations when there was a validation error you'd like to ignore
|
||||
*
|
||||
* @return Zend_InfoCard_Claims
|
||||
*/
|
||||
public function forceValid()
|
||||
{
|
||||
trigger_error("Forcing Claims to be valid although it is a security risk", E_USER_WARNING);
|
||||
$this->_isValid = true;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the PPI (Private Personal Identifier) associated with the information card
|
||||
*
|
||||
* @return string the private personal identifier
|
||||
*/
|
||||
public function getCardID()
|
||||
{
|
||||
return $this->getClaim('http://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier');
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the default namespace used in this information card. If a default namespace was not
|
||||
* set, it figures out which one to consider 'default' by taking the first namespace sorted by use-count
|
||||
* in claims
|
||||
*
|
||||
* @throws Zend_InfoCard_Exception
|
||||
* @return string The default namespace
|
||||
*/
|
||||
public function getDefaultNamespace()
|
||||
{
|
||||
if($this->_defaultNamespace === null) {
|
||||
$namespaces = array();
|
||||
$leader = '';
|
||||
foreach($this->_claims as $claim) {
|
||||
if(!isset($namespaces[$claim['namespace']])) {
|
||||
$namespaces[$claim['namespace']] = 1;
|
||||
} else {
|
||||
$namespaces[$claim['namespace']]++;
|
||||
}
|
||||
|
||||
if(empty($leader) || ($namespaces[$claim['namespace']] > $leader)) {
|
||||
$leader = $claim['namespace'];
|
||||
}
|
||||
}
|
||||
|
||||
if(empty($leader)) {
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
throw new Zend_InfoCard_Exception("Failed to determine default namespace");
|
||||
}
|
||||
|
||||
$this->setDefaultNamespace($leader);
|
||||
}
|
||||
|
||||
return $this->_defaultNamespace;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the default namespace, overriding any existing default
|
||||
*
|
||||
* @throws Zend_InfoCard_Exception
|
||||
* @param string $namespace The default namespace to use
|
||||
* @return Zend_InfoCard_Claims
|
||||
*/
|
||||
public function setDefaultNamespace($namespace)
|
||||
{
|
||||
|
||||
foreach($this->_claims as $claim) {
|
||||
if($namespace == $claim['namespace']) {
|
||||
$this->_defaultNamespace = $namespace;
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
throw new Zend_InfoCard_Exception("At least one claim must exist in specified namespace to make it the default namespace");
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates if this claim object contains validated claims or not
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isValid()
|
||||
{
|
||||
return $this->_isValid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the error message contained within the claims object
|
||||
*
|
||||
* @param string $error The error message
|
||||
* @return Zend_InfoCard_Claims
|
||||
*/
|
||||
public function setError($error)
|
||||
{
|
||||
$this->_error = $error;
|
||||
$this->_isValid = false;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the error message contained within the claims object
|
||||
*
|
||||
* @return string The error message
|
||||
*/
|
||||
public function getErrorMsg()
|
||||
{
|
||||
return $this->_error;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the claims for the claims object. Can only be set once and is done
|
||||
* by the component itself. Internal use only.
|
||||
*
|
||||
* @throws Zend_InfoCard_Exception
|
||||
* @param array $claims
|
||||
* @return Zend_InfoCard_Claims
|
||||
*/
|
||||
public function setClaims(Array $claims)
|
||||
{
|
||||
if($this->_claims !== null) {
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
throw new Zend_InfoCard_Exception("Claim objects are read-only");
|
||||
}
|
||||
|
||||
$this->_claims = $claims;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the result code of the claims object.
|
||||
*
|
||||
* @throws Zend_InfoCard_Exception
|
||||
* @param int $code The result code
|
||||
* @return Zend_InfoCard_Claims
|
||||
*/
|
||||
public function setCode($code)
|
||||
{
|
||||
switch($code) {
|
||||
case self::RESULT_PROCESSING_FAILURE:
|
||||
case self::RESULT_SUCCESS:
|
||||
case self::RESULT_VALIDATION_FAILURE:
|
||||
$this->_code = $code;
|
||||
return $this;
|
||||
}
|
||||
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
throw new Zend_InfoCard_Exception("Attempted to set unknown error code");
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the result code of the claims object
|
||||
*
|
||||
* @return integer The result code
|
||||
*/
|
||||
public function getCode()
|
||||
{
|
||||
return $this->_code;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a claim by providing its complete claim URI
|
||||
*
|
||||
* @param string $claimURI The complete claim URI to retrieve
|
||||
* @return mixed The claim matching that specific URI or null if not found
|
||||
*/
|
||||
public function getClaim($claimURI)
|
||||
{
|
||||
if($this->claimExists($claimURI)) {
|
||||
return $this->_claims[$claimURI]['value'];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates if a specific claim URI exists or not within the object
|
||||
*
|
||||
* @param string $claimURI The complete claim URI to check
|
||||
* @return bool true if the claim exists, false if not found
|
||||
*/
|
||||
public function claimExists($claimURI)
|
||||
{
|
||||
return isset($this->_claims[$claimURI]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Magic helper function
|
||||
* @throws Zend_InfoCard_Exception
|
||||
*/
|
||||
public function __unset($k)
|
||||
{
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
throw new Zend_InfoCard_Exception("Claim objects are read-only");
|
||||
}
|
||||
|
||||
/**
|
||||
* Magic helper function
|
||||
*/
|
||||
public function __isset($k)
|
||||
{
|
||||
return $this->claimExists("{$this->getDefaultNamespace()}/$k");
|
||||
}
|
||||
|
||||
/**
|
||||
* Magic helper function
|
||||
*/
|
||||
public function __get($k)
|
||||
{
|
||||
return $this->getClaim("{$this->getDefaultNamespace()}/$k");
|
||||
}
|
||||
|
||||
/**
|
||||
* Magic helper function
|
||||
* @throws Zend_InfoCard_Exception
|
||||
*/
|
||||
public function __set($k, $v)
|
||||
{
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
throw new Zend_InfoCard_Exception("Claim objects are read-only");
|
||||
}
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Exception.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
if (class_exists("Zend_Exception")) {
|
||||
abstract class Zend_InfoCard_Exception_Abstract extends Zend_Exception
|
||||
{
|
||||
}
|
||||
} else {
|
||||
abstract class Zend_InfoCard_Exception_Abstract extends Exception
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Base Exception class for the InfoCard component
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard_Exception extends Zend_InfoCard_Exception_Abstract
|
||||
{
|
||||
}
|
@ -1,88 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Assertion.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_Assertion_Interface
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/Assertion/Interface.php';
|
||||
|
||||
/**
|
||||
* Factory object to retrieve an Assertion object based on the type of XML document provided
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
final class Zend_InfoCard_Xml_Assertion
|
||||
{
|
||||
/**
|
||||
* The namespace for a SAML-formatted Assertion document
|
||||
*/
|
||||
const TYPE_SAML = 'urn:oasis:names:tc:SAML:1.0:assertion';
|
||||
|
||||
/**
|
||||
* Constructor (disabled)
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function __construct()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an instance of a InfoCard Assertion object based on the XML data provided
|
||||
*
|
||||
* @throws Zend_InfoCard_Xml_Exception
|
||||
* @param string $xmlData The XML-Formatted Assertion
|
||||
* @return Zend_InfoCard_Xml_Assertion_Interface
|
||||
* @throws Zend_InfoCard_Xml_Exception
|
||||
*/
|
||||
static public function getInstance($xmlData)
|
||||
{
|
||||
|
||||
if($xmlData instanceof Zend_InfoCard_Xml_Element) {
|
||||
$strXmlData = $xmlData->asXML();
|
||||
} else if (is_string($xmlData)) {
|
||||
$strXmlData = $xmlData;
|
||||
} else {
|
||||
require_once 'Zend/InfoCard/Xml/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Exception("Invalid Data provided to create instance");
|
||||
}
|
||||
|
||||
$sxe = simplexml_load_string($strXmlData);
|
||||
|
||||
$namespaces = $sxe->getDocNameSpaces();
|
||||
|
||||
foreach($namespaces as $namespace) {
|
||||
switch($namespace) {
|
||||
case self::TYPE_SAML:
|
||||
include_once 'Zend/InfoCard/Xml/Assertion/Saml.php';
|
||||
return simplexml_load_string($strXmlData, 'Zend_InfoCard_Xml_Assertion_Saml', null);
|
||||
}
|
||||
}
|
||||
|
||||
require_once 'Zend/InfoCard/Xml/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Exception("Unable to determine Assertion type by Namespace");
|
||||
}
|
||||
}
|
@ -1,69 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* The Interface required by any InfoCard Assertion Object implemented within the component
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
interface Zend_InfoCard_Xml_Assertion_Interface
|
||||
{
|
||||
/**
|
||||
* Get the Assertion ID of the assertion
|
||||
*
|
||||
* @return string The Assertion ID
|
||||
*/
|
||||
public function getAssertionID();
|
||||
|
||||
/**
|
||||
* Return an array of attributes (claims) contained within the assertion
|
||||
*
|
||||
* @return array An array of attributes / claims within the assertion
|
||||
*/
|
||||
public function getAttributes();
|
||||
|
||||
/**
|
||||
* Get the Assertion URI for this type of Assertion
|
||||
*
|
||||
* @return string the Assertion URI
|
||||
*/
|
||||
public function getAssertionURI();
|
||||
|
||||
/**
|
||||
* Return an array of conditions which the assertions are predicated on
|
||||
*
|
||||
* @return array an array of conditions
|
||||
*/
|
||||
public function getConditions();
|
||||
|
||||
/**
|
||||
* Validate the conditions array returned from the getConditions() call
|
||||
*
|
||||
* @param array $conditions An array of condtions for the assertion taken from getConditions()
|
||||
* @return mixed Boolean true on success, an array of condition, error message on failure
|
||||
*/
|
||||
public function validateConditions(Array $conditions);
|
||||
}
|
@ -1,284 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Saml.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_Element
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/Element.php';
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_Assertion_Interface
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/Assertion/Interface.php';
|
||||
|
||||
/**
|
||||
* A Xml Assertion Document in SAML Token format
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard_Xml_Assertion_Saml
|
||||
extends Zend_InfoCard_Xml_Element
|
||||
implements Zend_InfoCard_Xml_Assertion_Interface
|
||||
{
|
||||
|
||||
/**
|
||||
* Audience Restriction Condition
|
||||
*/
|
||||
const CONDITION_AUDIENCE = 'AudienceRestrictionCondition';
|
||||
|
||||
/**
|
||||
* The URI for a 'bearer' confirmation
|
||||
*/
|
||||
const CONFIRMATION_BEARER = 'urn:oasis:names:tc:SAML:1.0:cm:bearer';
|
||||
|
||||
/**
|
||||
* The amount of time in seconds to buffer when checking conditions to ensure
|
||||
* that differences between client/server clocks don't interfer too much
|
||||
*/
|
||||
const CONDITION_TIME_ADJ = 3600; // +- 5 minutes
|
||||
|
||||
protected function _getServerName() {
|
||||
return $_SERVER['SERVER_NAME'];
|
||||
}
|
||||
|
||||
protected function _getServerPort() {
|
||||
return $_SERVER['SERVER_PORT'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate the conditions array returned from the getConditions() call
|
||||
*
|
||||
* @param array $conditions An array of condtions for the assertion taken from getConditions()
|
||||
* @return mixed Boolean true on success, an array of condition, error message on failure
|
||||
*/
|
||||
public function validateConditions(Array $conditions)
|
||||
{
|
||||
|
||||
$currentTime = time();
|
||||
|
||||
if(!empty($conditions)) {
|
||||
|
||||
foreach($conditions as $condition => $conditionValue) {
|
||||
switch(strtolower($condition)) {
|
||||
case 'audiencerestrictioncondition':
|
||||
|
||||
$serverName = $this->_getServerName();
|
||||
$serverPort = $this->_getServerPort();
|
||||
|
||||
$self_aliases[] = $serverName;
|
||||
$self_aliases[] = "{{$serverName}:{$serverPort}";
|
||||
|
||||
$found = false;
|
||||
if(is_array($conditionValue)) {
|
||||
foreach($conditionValue as $audience) {
|
||||
|
||||
list(,,$audience) = explode('/', $audience);
|
||||
if(in_array($audience, $self_aliases)) {
|
||||
$found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!$found) {
|
||||
return array($condition, 'Could not find self in allowed audience list');
|
||||
}
|
||||
|
||||
break;
|
||||
case 'notbefore':
|
||||
$notbeforetime = strtotime($conditionValue);
|
||||
|
||||
if($currentTime < $notbeforetime) {
|
||||
if($currentTime + self::CONDITION_TIME_ADJ < $notbeforetime) {
|
||||
return array($condition, 'Current time is before specified window');
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
case 'notonorafter':
|
||||
$notonoraftertime = strtotime($conditionValue);
|
||||
|
||||
if($currentTime >= $notonoraftertime) {
|
||||
if($currentTime - self::CONDITION_TIME_ADJ >= $notonoraftertime) {
|
||||
return array($condition, 'Current time is after specified window');
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Assertion URI for this type of Assertion
|
||||
*
|
||||
* @return string the Assertion URI
|
||||
*/
|
||||
public function getAssertionURI()
|
||||
{
|
||||
return Zend_InfoCard_Xml_Assertion::TYPE_SAML;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Major Version of the SAML Assertion
|
||||
*
|
||||
* @return integer The major version number
|
||||
*/
|
||||
public function getMajorVersion()
|
||||
{
|
||||
return (int)(string)$this['MajorVersion'];
|
||||
}
|
||||
|
||||
/**
|
||||
* The Minor Version of the SAML Assertion
|
||||
*
|
||||
* @return integer The minor version number
|
||||
*/
|
||||
public function getMinorVersion()
|
||||
{
|
||||
return (int)(string)$this['MinorVersion'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Assertion ID of the assertion
|
||||
*
|
||||
* @return string The Assertion ID
|
||||
*/
|
||||
public function getAssertionID()
|
||||
{
|
||||
return (string)$this['AssertionID'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Issuer URI of the assertion
|
||||
*
|
||||
* @return string the URI of the assertion Issuer
|
||||
*/
|
||||
public function getIssuer()
|
||||
{
|
||||
return (string)$this['Issuer'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Timestamp of when the assertion was issued
|
||||
*
|
||||
* @return integer a UNIX timestamp representing when the assertion was issued
|
||||
*/
|
||||
public function getIssuedTimestamp()
|
||||
{
|
||||
return strtotime((string)$this['IssueInstant']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return an array of conditions which the assertions are predicated on
|
||||
*
|
||||
* @throws Zend_InfoCard_Xml_Exception
|
||||
* @return array an array of conditions
|
||||
*/
|
||||
public function getConditions()
|
||||
{
|
||||
|
||||
list($conditions) = $this->xpath("//saml:Conditions");
|
||||
|
||||
if(!($conditions instanceof Zend_InfoCard_Xml_Element)) {
|
||||
throw new Zend_InfoCard_Xml_Exception("Unable to find the saml:Conditions block");
|
||||
}
|
||||
|
||||
$retval = array();
|
||||
|
||||
foreach($conditions->children('urn:oasis:names:tc:SAML:1.0:assertion') as $key => $value) {
|
||||
switch($key) {
|
||||
case self::CONDITION_AUDIENCE:
|
||||
foreach($value->children('urn:oasis:names:tc:SAML:1.0:assertion') as $audience_key => $audience_value) {
|
||||
if($audience_key == 'Audience') {
|
||||
$retval[$key][] = (string)$audience_value;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$retval['NotBefore'] = (string)$conditions['NotBefore'];
|
||||
$retval['NotOnOrAfter'] = (string)$conditions['NotOnOrAfter'];
|
||||
|
||||
return $retval;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get they KeyInfo element for the Subject KeyInfo block
|
||||
*
|
||||
* @todo Not Yet Implemented
|
||||
* @ignore
|
||||
*/
|
||||
public function getSubjectKeyInfo()
|
||||
{
|
||||
/**
|
||||
* @todo Not sure if this is part of the scope for now..
|
||||
*/
|
||||
|
||||
if($this->getConfirmationMethod() == self::CONFIRMATION_BEARER) {
|
||||
throw new Zend_InfoCard_Xml_Exception("Cannot get Subject Key Info when Confirmation Method was Bearer");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the Confirmation Method URI used in the Assertion
|
||||
*
|
||||
* @return string The confirmation method URI
|
||||
*/
|
||||
public function getConfirmationMethod()
|
||||
{
|
||||
list($confirmation) = $this->xPath("//saml:ConfirmationMethod");
|
||||
return (string)$confirmation;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return an array of attributes (claims) contained within the assertion
|
||||
*
|
||||
* @return array An array of attributes / claims within the assertion
|
||||
*/
|
||||
public function getAttributes()
|
||||
{
|
||||
$attributes = $this->xPath('//saml:Attribute');
|
||||
|
||||
$retval = array();
|
||||
foreach($attributes as $key => $value) {
|
||||
|
||||
$retkey = (string)$value['AttributeNamespace'].'/'.(string)$value['AttributeName'];
|
||||
|
||||
$retval[$retkey]['name'] = (string)$value['AttributeName'];
|
||||
$retval[$retkey]['namespace'] = (string)$value['AttributeNamespace'];
|
||||
|
||||
list($aValue) = $value->children('urn:oasis:names:tc:SAML:1.0:assertion');
|
||||
$retval[$retkey]['value'] = (string)$aValue;
|
||||
}
|
||||
|
||||
return $retval;
|
||||
}
|
||||
}
|
@ -1,107 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Element.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_Element_Interface
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/Element/Interface.php';
|
||||
|
||||
/**
|
||||
* An abstract class representing a an XML data block
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
abstract class Zend_InfoCard_Xml_Element
|
||||
extends SimpleXMLElement
|
||||
implements Zend_InfoCard_Xml_Element_Interface
|
||||
{
|
||||
/**
|
||||
* Convert the object to a string by displaying its XML content
|
||||
*
|
||||
* @return string an XML representation of the object
|
||||
*/
|
||||
public function __toString()
|
||||
{
|
||||
return $this->asXML();
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts an XML Element object into a DOM object
|
||||
*
|
||||
* @throws Zend_InfoCard_Xml_Exception
|
||||
* @param Zend_InfoCard_Xml_Element $e The object to convert
|
||||
* @return DOMElement A DOMElement representation of the same object
|
||||
*/
|
||||
static public function convertToDOM(Zend_InfoCard_Xml_Element $e)
|
||||
{
|
||||
$dom = dom_import_simplexml($e);
|
||||
|
||||
if(!($dom instanceof DOMElement)) {
|
||||
// Zend_InfoCard_Xml_Element exntes SimpleXMLElement, so this should *never* fail
|
||||
// @codeCoverageIgnoreStart
|
||||
require_once 'Zend/InfoCard/Xml/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Exception("Failed to convert between SimpleXML and DOM");
|
||||
// @codeCoverageIgnoreEnd
|
||||
}
|
||||
|
||||
return $dom;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a DOMElement object into the specific class
|
||||
*
|
||||
* @throws Zend_InfoCard_Xml_Exception
|
||||
* @param DOMElement $e The DOMElement object to convert
|
||||
* @param string $classname The name of the class to convert it to (must inhert from Zend_InfoCard_Xml_Element)
|
||||
* @return Zend_InfoCard_Xml_Element a Xml Element object from the DOM element
|
||||
*/
|
||||
static public function convertToObject(DOMElement $e, $classname)
|
||||
{
|
||||
if (!class_exists($classname)) {
|
||||
require_once 'Zend/Loader.php';
|
||||
Zend_Loader::loadClass($classname);
|
||||
}
|
||||
|
||||
$reflection = new ReflectionClass($classname);
|
||||
|
||||
if(!$reflection->isSubclassOf('Zend_InfoCard_Xml_Element')) {
|
||||
require_once 'Zend/InfoCard/Xml/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Exception("DOM element must be converted to an instance of Zend_InfoCard_Xml_Element");
|
||||
}
|
||||
|
||||
$sxe = simplexml_import_dom($e, $classname);
|
||||
|
||||
if(!($sxe instanceof Zend_InfoCard_Xml_Element)) {
|
||||
// Since we just checked to see if this was a subclass of Zend_infoCard_Xml_Element this shoudl never fail
|
||||
// @codeCoverageIgnoreStart
|
||||
require_once 'Zend/InfoCard/Xml/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Exception("Failed to convert between DOM and SimpleXML");
|
||||
// @codeCoverageIgnoreEnd
|
||||
}
|
||||
|
||||
return $sxe;
|
||||
}
|
||||
}
|
@ -1,44 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* The Interface used to represent an XML Data Type
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
interface Zend_InfoCard_Xml_Element_Interface
|
||||
{
|
||||
/**
|
||||
* Return the data within the object as an XML document
|
||||
*/
|
||||
public function asXML();
|
||||
|
||||
/**
|
||||
* Magic function which allows us to treat the object as a string to return XML
|
||||
* (same as the asXML() method)
|
||||
*/
|
||||
public function __toString();
|
||||
}
|
@ -1,75 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: EncryptedData.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* A factory class for producing Zend_InfoCard_Xml_EncryptedData objects based on
|
||||
* the type of XML document provided
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
final class Zend_InfoCard_Xml_EncryptedData
|
||||
{
|
||||
/**
|
||||
* Constructor (disabled)
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function __construct()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an instance of the class
|
||||
*
|
||||
* @param string $xmlData The XML EncryptedData String
|
||||
* @return Zend_InfoCard_Xml_EncryptedData_Abstract
|
||||
* @throws Zend_InfoCard_Xml_Exception
|
||||
*/
|
||||
static public function getInstance($xmlData)
|
||||
{
|
||||
|
||||
if($xmlData instanceof Zend_InfoCard_Xml_Element) {
|
||||
$strXmlData = $xmlData->asXML();
|
||||
} else if (is_string($xmlData)) {
|
||||
$strXmlData = $xmlData;
|
||||
} else {
|
||||
require_once 'Zend/InfoCard/Xml/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Exception("Invalid Data provided to create instance");
|
||||
}
|
||||
|
||||
$sxe = simplexml_load_string($strXmlData);
|
||||
|
||||
switch($sxe['Type']) {
|
||||
case 'http://www.w3.org/2001/04/xmlenc#Element':
|
||||
include_once 'Zend/InfoCard/Xml/EncryptedData/XmlEnc.php';
|
||||
return simplexml_load_string($strXmlData, 'Zend_InfoCard_Xml_EncryptedData_XmlEnc');
|
||||
default:
|
||||
require_once 'Zend/InfoCard/Xml/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Exception("Unknown EncryptedData type found");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,92 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Abstract.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_Element
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/Element.php';
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_KeyInfo
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/KeyInfo.php';
|
||||
|
||||
/**
|
||||
* An abstract class representing a generic EncryptedData XML block. This class is extended
|
||||
* into a specific type of EncryptedData XML block (i.e. XmlEnc) as necessary
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
abstract class Zend_InfoCard_Xml_EncryptedData_Abstract extends Zend_InfoCard_Xml_Element
|
||||
{
|
||||
|
||||
/**
|
||||
* Returns the KeyInfo Block
|
||||
*
|
||||
* @return Zend_InfoCard_Xml_KeyInfo_Abstract
|
||||
*/
|
||||
public function getKeyInfo()
|
||||
{
|
||||
return Zend_InfoCard_Xml_KeyInfo::getInstance($this->KeyInfo[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the Encryption method used to encrypt the assertion document
|
||||
* (the symmetric cipher)
|
||||
*
|
||||
* @throws Zend_InfoCard_Xml_Exception
|
||||
* @return string The URI of the Symmetric Encryption Method used
|
||||
*/
|
||||
public function getEncryptionMethod()
|
||||
{
|
||||
|
||||
/**
|
||||
* @todo This is pretty hacky unless we can always be confident that the first
|
||||
* EncryptionMethod block is the correct one (the AES or compariable symetric algorithm)..
|
||||
* the second is the PK method if provided.
|
||||
*/
|
||||
list($encryption_method) = $this->xpath("//enc:EncryptionMethod");
|
||||
|
||||
if(!($encryption_method instanceof Zend_InfoCard_Xml_Element)) {
|
||||
throw new Zend_InfoCard_Xml_Exception("Unable to find the enc:EncryptionMethod symmetric encryption block");
|
||||
}
|
||||
|
||||
$dom = self::convertToDOM($encryption_method);
|
||||
|
||||
if(!$dom->hasAttribute('Algorithm')) {
|
||||
throw new Zend_InfoCard_Xml_Exception("Unable to determine the encryption algorithm in the Symmetric enc:EncryptionMethod XML block");
|
||||
}
|
||||
|
||||
return $dom->getAttribute('Algorithm');
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of the encrypted block
|
||||
*
|
||||
* @return string the value of the encrypted CipherValue block
|
||||
*/
|
||||
abstract function getCipherValue();
|
||||
}
|
@ -1,64 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: XmlEnc.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_EncryptedData/Abstract.php
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/EncryptedData/Abstract.php';
|
||||
|
||||
/**
|
||||
* An XmlEnc formatted EncryptedData XML block
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard_Xml_EncryptedData_XmlEnc extends Zend_InfoCard_Xml_EncryptedData_Abstract
|
||||
{
|
||||
|
||||
/**
|
||||
* Returns the Encrypted CipherValue block from the EncryptedData XML document
|
||||
*
|
||||
* @throws Zend_InfoCard_Xml_Exception
|
||||
* @return string The value of the CipherValue block base64 encoded
|
||||
*/
|
||||
public function getCipherValue()
|
||||
{
|
||||
$this->registerXPathNamespace('enc', 'http://www.w3.org/2001/04/xmlenc#');
|
||||
|
||||
list(,$cipherdata) = $this->xpath("//enc:CipherData");
|
||||
|
||||
if(!($cipherdata instanceof Zend_InfoCard_Xml_Element)) {
|
||||
throw new Zend_InfoCard_Xml_Exception("Unable to find the enc:CipherData block");
|
||||
}
|
||||
$cipherdata->registerXPathNamespace('enc', 'http://www.w3.org/2001/04/xmlenc#');
|
||||
list(,$ciphervalue) = $cipherdata->xpath("//enc:CipherValue");
|
||||
|
||||
if(!($ciphervalue instanceof Zend_InfoCard_Xml_Element)) {
|
||||
throw new Zend_InfoCard_Xml_Exception("Unable to fidn the enc:CipherValue block");
|
||||
}
|
||||
|
||||
return (string)$ciphervalue;
|
||||
}
|
||||
}
|
@ -1,174 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: EncryptedKey.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_Element
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/Element.php';
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_EncryptedKey
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/EncryptedKey.php';
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_KeyInfo_Interface
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/KeyInfo/Interface.php';
|
||||
|
||||
/**
|
||||
* An object representing an Xml EncryptedKEy block
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard_Xml_EncryptedKey
|
||||
extends Zend_InfoCard_Xml_Element
|
||||
implements Zend_InfoCard_Xml_KeyInfo_Interface
|
||||
{
|
||||
/**
|
||||
* Return an instance of the object based on input XML Data
|
||||
*
|
||||
* @throws Zend_InfoCard_Xml_Exception
|
||||
* @param string $xmlData The EncryptedKey XML Block
|
||||
* @return Zend_InfoCard_Xml_EncryptedKey
|
||||
*/
|
||||
static public function getInstance($xmlData)
|
||||
{
|
||||
if($xmlData instanceof Zend_InfoCard_Xml_Element) {
|
||||
$strXmlData = $xmlData->asXML();
|
||||
} else if (is_string($xmlData)) {
|
||||
$strXmlData = $xmlData;
|
||||
} else {
|
||||
throw new Zend_InfoCard_Xml_Exception("Invalid Data provided to create instance");
|
||||
}
|
||||
|
||||
$sxe = simplexml_load_string($strXmlData);
|
||||
|
||||
if($sxe->getName() != "EncryptedKey") {
|
||||
throw new Zend_InfoCard_Xml_Exception("Invalid XML Block provided for EncryptedKey");
|
||||
}
|
||||
|
||||
return simplexml_load_string($strXmlData, "Zend_InfoCard_Xml_EncryptedKey");
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Encyption Method Algorithm URI of the block
|
||||
*
|
||||
* @throws Zend_InfoCard_Xml_Exception
|
||||
* @return string the Encryption method algorithm URI
|
||||
*/
|
||||
public function getEncryptionMethod()
|
||||
{
|
||||
|
||||
$this->registerXPathNamespace('e', 'http://www.w3.org/2001/04/xmlenc#');
|
||||
list($encryption_method) = $this->xpath("//e:EncryptionMethod");
|
||||
|
||||
if(!($encryption_method instanceof Zend_InfoCard_Xml_Element)) {
|
||||
throw new Zend_InfoCard_Xml_Exception("Unable to find the e:EncryptionMethod KeyInfo encryption block");
|
||||
}
|
||||
|
||||
$dom = self::convertToDOM($encryption_method);
|
||||
|
||||
if(!$dom->hasAttribute('Algorithm')) {
|
||||
throw new Zend_InfoCard_Xml_Exception("Unable to determine the encryption algorithm in the Symmetric enc:EncryptionMethod XML block");
|
||||
}
|
||||
|
||||
return $dom->getAttribute('Algorithm');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Digest Method Algorithm URI used
|
||||
*
|
||||
* @throws Zend_InfoCard_Xml_Exception
|
||||
* @return string the Digest Method Algorithm URI
|
||||
*/
|
||||
public function getDigestMethod()
|
||||
{
|
||||
$this->registerXPathNamespace('e', 'http://www.w3.org/2001/04/xmlenc#');
|
||||
list($encryption_method) = $this->xpath("//e:EncryptionMethod");
|
||||
|
||||
if(!($encryption_method instanceof Zend_InfoCard_Xml_Element)) {
|
||||
throw new Zend_InfoCard_Xml_Exception("Unable to find the e:EncryptionMethod KeyInfo encryption block");
|
||||
}
|
||||
|
||||
if(!($encryption_method->DigestMethod instanceof Zend_InfoCard_Xml_Element)) {
|
||||
throw new Zend_InfoCard_Xml_Exception("Unable to find the DigestMethod block");
|
||||
}
|
||||
|
||||
$dom = self::convertToDOM($encryption_method->DigestMethod);
|
||||
|
||||
if(!$dom->hasAttribute('Algorithm')) {
|
||||
throw new Zend_InfoCard_Xml_Exception("Unable to determine the digest algorithm for the symmetric Keyinfo");
|
||||
}
|
||||
|
||||
return $dom->getAttribute('Algorithm');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the KeyInfo block object
|
||||
*
|
||||
* @throws Zend_InfoCard_Xml_Exception
|
||||
* @return Zend_InfoCard_Xml_KeyInfo_Abstract
|
||||
*/
|
||||
public function getKeyInfo()
|
||||
{
|
||||
|
||||
if(isset($this->KeyInfo)) {
|
||||
return Zend_InfoCard_Xml_KeyInfo::getInstance($this->KeyInfo);
|
||||
}
|
||||
|
||||
throw new Zend_InfoCard_Xml_Exception("Unable to locate a KeyInfo block");
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the encrypted value of the block in base64 format
|
||||
*
|
||||
* @throws Zend_InfoCard_Xml_Exception
|
||||
* @return string The Value of the CipherValue block in base64 format
|
||||
*/
|
||||
public function getCipherValue()
|
||||
{
|
||||
|
||||
$this->registerXPathNamespace('e', 'http://www.w3.org/2001/04/xmlenc#');
|
||||
|
||||
list($cipherdata) = $this->xpath("//e:CipherData");
|
||||
|
||||
if(!($cipherdata instanceof Zend_InfoCard_Xml_Element)) {
|
||||
throw new Zend_InfoCard_Xml_Exception("Unable to find the e:CipherData block");
|
||||
}
|
||||
|
||||
$cipherdata->registerXPathNameSpace('enc', 'http://www.w3.org/2001/04/xmlenc#');
|
||||
list($ciphervalue) = $cipherdata->xpath("//enc:CipherValue");
|
||||
|
||||
if(!($ciphervalue instanceof Zend_InfoCard_Xml_Element)) {
|
||||
throw new Zend_InfoCard_Xml_Exception("Unable to fidn the enc:CipherValue block");
|
||||
}
|
||||
|
||||
return (string)$ciphervalue;
|
||||
}
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Exception.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Exception
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Exception.php';
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard_Xml_Exception extends Zend_InfoCard_Exception
|
||||
{
|
||||
}
|
@ -1,90 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: KeyInfo.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_Element
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/Element.php';
|
||||
|
||||
/**
|
||||
* Factory class to return a XML KeyInfo block based on input XML
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard_Xml_KeyInfo
|
||||
{
|
||||
/**
|
||||
* Constructor (disabled)
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function __construct()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an instance of KeyInfo object based on the input KeyInfo XML block
|
||||
*
|
||||
* @param string $xmlData The KeyInfo XML Block
|
||||
* @return Zend_InfoCard_Xml_KeyInfo_Abstract
|
||||
* @throws Zend_InfoCard_Xml_Exception
|
||||
*/
|
||||
static public function getInstance($xmlData)
|
||||
{
|
||||
|
||||
if($xmlData instanceof Zend_InfoCard_Xml_Element) {
|
||||
$strXmlData = $xmlData->asXML();
|
||||
} else if (is_string($xmlData)) {
|
||||
$strXmlData = $xmlData;
|
||||
} else {
|
||||
throw new Zend_InfoCard_Xml_Exception("Invalid Data provided to create instance");
|
||||
}
|
||||
|
||||
$sxe = simplexml_load_string($strXmlData);
|
||||
|
||||
$namespaces = $sxe->getDocNameSpaces();
|
||||
|
||||
if(!empty($namespaces)) {
|
||||
foreach($sxe->getDocNameSpaces() as $namespace) {
|
||||
switch($namespace) {
|
||||
case 'http://www.w3.org/2000/09/xmldsig#':
|
||||
include_once 'Zend/InfoCard/Xml/KeyInfo/XmlDSig.php';
|
||||
return simplexml_load_string($strXmlData, 'Zend_InfoCard_Xml_KeyInfo_XmlDSig');
|
||||
default:
|
||||
|
||||
throw new Zend_InfoCard_Xml_Exception("Unknown KeyInfo Namespace provided");
|
||||
// We are ignoring these lines, as XDebug reports each as a "non executed" line
|
||||
// which breaks my coverage %
|
||||
// @codeCoverageIgnoreStart
|
||||
}
|
||||
}
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
|
||||
include_once 'Zend/InfoCard/Xml/KeyInfo/Default.php';
|
||||
return simplexml_load_string($strXmlData, 'Zend_InfoCard_Xml_KeyInfo_Default');
|
||||
}
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Abstract.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_Element
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/Element.php';
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
abstract class Zend_InfoCard_Xml_KeyInfo_Abstract extends Zend_InfoCard_Xml_Element
|
||||
{
|
||||
}
|
@ -1,64 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Default.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_KeyInfo_Abstract
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/KeyInfo/Abstract.php';
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_SecurityTokenReference
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/SecurityTokenReference.php';
|
||||
|
||||
/**
|
||||
* An object representation of a XML <KeyInfo> block which doesn't provide a namespace
|
||||
* In this context, it is assumed to mean that it is the type of KeyInfo block which
|
||||
* contains the SecurityTokenReference
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard_Xml_KeyInfo_Default extends Zend_InfoCard_Xml_KeyInfo_Abstract
|
||||
{
|
||||
/**
|
||||
* Returns the object representation of the SecurityTokenReference block
|
||||
*
|
||||
* @throws Zend_InfoCard_Xml_Exception
|
||||
* @return Zend_InfoCard_Xml_SecurityTokenReference
|
||||
*/
|
||||
public function getSecurityTokenReference()
|
||||
{
|
||||
$this->registerXPathNamespace('o', 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd');
|
||||
|
||||
list($sectokenref) = $this->xpath('//o:SecurityTokenReference');
|
||||
|
||||
if(!($sectokenref instanceof Zend_InfoCard_Xml_Element)) {
|
||||
throw new Zend_InfoCard_Xml_Exception('Could not locate the Security Token Reference');
|
||||
}
|
||||
|
||||
return Zend_InfoCard_Xml_SecurityTokenReference::getInstance($sectokenref);
|
||||
}
|
||||
}
|
@ -1,38 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
interface Zend_InfoCard_Xml_KeyInfo_Interface
|
||||
{
|
||||
/**
|
||||
* Return an object representing a KeyInfo data type
|
||||
*
|
||||
* @return Zend_InfoCard_Xml_KeyInfo
|
||||
*/
|
||||
public function getKeyInfo();
|
||||
}
|
@ -1,76 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: XmlDSig.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_KeyInfo_Abstract
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/KeyInfo/Abstract.php';
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_EncryptedKey
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/EncryptedKey.php';
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_KeyInfo_Interface
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/KeyInfo/Interface.php';
|
||||
|
||||
/**
|
||||
* Represents a Xml Digital Signature XML Data Block
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard_Xml_KeyInfo_XmlDSig
|
||||
extends Zend_InfoCard_Xml_KeyInfo_Abstract
|
||||
implements Zend_InfoCard_Xml_KeyInfo_Interface
|
||||
{
|
||||
/**
|
||||
* Returns an instance of the EncryptedKey Data Block
|
||||
*
|
||||
* @throws Zend_InfoCard_Xml_Exception
|
||||
* @return Zend_InfoCard_Xml_EncryptedKey
|
||||
*/
|
||||
public function getEncryptedKey()
|
||||
{
|
||||
$this->registerXPathNamespace('e', 'http://www.w3.org/2001/04/xmlenc#');
|
||||
list($encryptedkey) = $this->xpath('//e:EncryptedKey');
|
||||
|
||||
if(!($encryptedkey instanceof Zend_InfoCard_Xml_Element)) {
|
||||
throw new Zend_InfoCard_Xml_Exception("Failed to retrieve encrypted key");
|
||||
}
|
||||
|
||||
return Zend_InfoCard_Xml_EncryptedKey::getInstance($encryptedkey);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the KeyInfo Block within the encrypted key
|
||||
*
|
||||
* @return Zend_InfoCard_Xml_KeyInfo_Default
|
||||
*/
|
||||
public function getKeyInfo()
|
||||
{
|
||||
return $this->getEncryptedKey()->getKeyInfo();
|
||||
}
|
||||
}
|
@ -1,327 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml_Security
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Security.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_Security_Transform
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/Security/Transform.php';
|
||||
|
||||
/**
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml_Security
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard_Xml_Security
|
||||
{
|
||||
/**
|
||||
* ASN.1 type INTEGER class
|
||||
*/
|
||||
const ASN_TYPE_INTEGER = 0x02;
|
||||
|
||||
/**
|
||||
* ASN.1 type BIT STRING class
|
||||
*/
|
||||
const ASN_TYPE_BITSTRING = 0x03;
|
||||
|
||||
/**
|
||||
* ASN.1 type SEQUENCE class
|
||||
*/
|
||||
const ASN_TYPE_SEQUENCE = 0x30;
|
||||
|
||||
/**
|
||||
* The URI for Canonical Method C14N Exclusive
|
||||
*/
|
||||
const CANONICAL_METHOD_C14N_EXC = 'http://www.w3.org/2001/10/xml-exc-c14n#';
|
||||
|
||||
/**
|
||||
* The URI for Signature Method SHA1
|
||||
*/
|
||||
const SIGNATURE_METHOD_SHA1 = 'http://www.w3.org/2000/09/xmldsig#rsa-sha1';
|
||||
|
||||
/**
|
||||
* The URI for Digest Method SHA1
|
||||
*/
|
||||
const DIGEST_METHOD_SHA1 = 'http://www.w3.org/2000/09/xmldsig#sha1';
|
||||
|
||||
/**
|
||||
* The Identifier for RSA Keys
|
||||
*/
|
||||
const RSA_KEY_IDENTIFIER = '300D06092A864886F70D0101010500';
|
||||
|
||||
/**
|
||||
* Constructor (disabled)
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function __construct()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates the signature of a provided XML block
|
||||
*
|
||||
* @param string $strXMLInput An XML block containing a Signature
|
||||
* @return bool True if the signature validated, false otherwise
|
||||
* @throws Zend_InfoCard_Xml_Security_Exception
|
||||
*/
|
||||
static public function validateXMLSignature($strXMLInput)
|
||||
{
|
||||
if(!extension_loaded('openssl')) {
|
||||
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Security_Exception("You must have the openssl extension installed to use this class");
|
||||
}
|
||||
|
||||
$sxe = simplexml_load_string($strXMLInput);
|
||||
|
||||
if(!isset($sxe->Signature)) {
|
||||
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Security_Exception("Could not identify XML Signature element");
|
||||
}
|
||||
|
||||
if(!isset($sxe->Signature->SignedInfo)) {
|
||||
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Security_Exception("Signature is missing a SignedInfo block");
|
||||
}
|
||||
|
||||
if(!isset($sxe->Signature->SignatureValue)) {
|
||||
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Security_Exception("Signature is missing a SignatureValue block");
|
||||
}
|
||||
|
||||
if(!isset($sxe->Signature->KeyInfo)) {
|
||||
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Security_Exception("Signature is missing a KeyInfo block");
|
||||
}
|
||||
|
||||
if(!isset($sxe->Signature->KeyInfo->KeyValue)) {
|
||||
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Security_Exception("Signature is missing a KeyValue block");
|
||||
}
|
||||
|
||||
switch((string)$sxe->Signature->SignedInfo->CanonicalizationMethod['Algorithm']) {
|
||||
case self::CANONICAL_METHOD_C14N_EXC:
|
||||
$cMethod = (string)$sxe->Signature->SignedInfo->CanonicalizationMethod['Algorithm'];
|
||||
break;
|
||||
default:
|
||||
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Security_Exception("Unknown or unsupported CanonicalizationMethod Requested");
|
||||
break;
|
||||
}
|
||||
|
||||
switch((string)$sxe->Signature->SignedInfo->SignatureMethod['Algorithm']) {
|
||||
case self::SIGNATURE_METHOD_SHA1:
|
||||
$sMethod = (string)$sxe->Signature->SignedInfo->SignatureMethod['Algorithm'];
|
||||
break;
|
||||
default:
|
||||
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Security_Exception("Unknown or unsupported SignatureMethod Requested");
|
||||
break;
|
||||
}
|
||||
|
||||
switch((string)$sxe->Signature->SignedInfo->Reference->DigestMethod['Algorithm']) {
|
||||
case self::DIGEST_METHOD_SHA1:
|
||||
$dMethod = (string)$sxe->Signature->SignedInfo->Reference->DigestMethod['Algorithm'];
|
||||
break;
|
||||
default:
|
||||
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Security_Exception("Unknown or unsupported DigestMethod Requested");
|
||||
break;
|
||||
}
|
||||
|
||||
$base64DecodeSupportsStrictParam = version_compare(PHP_VERSION, '5.2.0', '>=');
|
||||
|
||||
if ($base64DecodeSupportsStrictParam) {
|
||||
$dValue = base64_decode((string)$sxe->Signature->SignedInfo->Reference->DigestValue, true);
|
||||
} else {
|
||||
$dValue = base64_decode((string)$sxe->Signature->SignedInfo->Reference->DigestValue);
|
||||
}
|
||||
|
||||
if ($base64DecodeSupportsStrictParam) {
|
||||
$signatureValue = base64_decode((string)$sxe->Signature->SignatureValue, true);
|
||||
} else {
|
||||
$signatureValue = base64_decode((string)$sxe->Signature->SignatureValue);
|
||||
}
|
||||
|
||||
$transformer = new Zend_InfoCard_Xml_Security_Transform();
|
||||
|
||||
foreach($sxe->Signature->SignedInfo->Reference->Transforms->children() as $transform) {
|
||||
$transformer->addTransform((string)$transform['Algorithm']);
|
||||
}
|
||||
|
||||
$transformed_xml = $transformer->applyTransforms($strXMLInput);
|
||||
|
||||
$transformed_xml_binhash = pack("H*", sha1($transformed_xml));
|
||||
|
||||
if(!self::_secureStringCompare($transformed_xml_binhash, $dValue)) {
|
||||
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Security_Exception("Locally Transformed XML does not match XML Document. Cannot Verify Signature");
|
||||
}
|
||||
|
||||
$public_key = null;
|
||||
|
||||
switch(true) {
|
||||
case isset($sxe->Signature->KeyInfo->KeyValue->X509Certificate):
|
||||
|
||||
$certificate = (string)$sxe->Signature->KeyInfo->KeyValue->X509Certificate;
|
||||
|
||||
|
||||
$pem = "-----BEGIN CERTIFICATE-----\n" .
|
||||
wordwrap($certificate, 64, "\n", true) .
|
||||
"\n-----END CERTIFICATE-----";
|
||||
|
||||
$public_key = openssl_pkey_get_public($pem);
|
||||
|
||||
if(!$public_key) {
|
||||
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Security_Exception("Unable to extract and prcoess X509 Certificate from KeyValue");
|
||||
}
|
||||
|
||||
break;
|
||||
case isset($sxe->Signature->KeyInfo->KeyValue->RSAKeyValue):
|
||||
|
||||
if(!isset($sxe->Signature->KeyInfo->KeyValue->RSAKeyValue->Modulus) ||
|
||||
!isset($sxe->Signature->KeyInfo->KeyValue->RSAKeyValue->Exponent)) {
|
||||
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Security_Exception("RSA Key Value not in Modulus/Exponent form");
|
||||
}
|
||||
|
||||
$modulus = base64_decode((string)$sxe->Signature->KeyInfo->KeyValue->RSAKeyValue->Modulus);
|
||||
$exponent = base64_decode((string)$sxe->Signature->KeyInfo->KeyValue->RSAKeyValue->Exponent);
|
||||
|
||||
$pem_public_key = self::_getPublicKeyFromModExp($modulus, $exponent);
|
||||
|
||||
$public_key = openssl_pkey_get_public ($pem_public_key);
|
||||
|
||||
break;
|
||||
default:
|
||||
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Security_Exception("Unable to determine or unsupported representation of the KeyValue block");
|
||||
}
|
||||
|
||||
$transformer = new Zend_InfoCard_Xml_Security_Transform();
|
||||
$transformer->addTransform((string)$sxe->Signature->SignedInfo->CanonicalizationMethod['Algorithm']);
|
||||
|
||||
// The way we are doing our XML processing requires that we specifically add this
|
||||
// (even though it's in the <Signature> parent-block).. otherwise, our canonical form
|
||||
// fails signature verification
|
||||
$sxe->Signature->SignedInfo->addAttribute('xmlns', 'http://www.w3.org/2000/09/xmldsig#');
|
||||
|
||||
$canonical_signedinfo = $transformer->applyTransforms($sxe->Signature->SignedInfo->asXML());
|
||||
|
||||
if(@openssl_verify($canonical_signedinfo, $signatureValue, $public_key)) {
|
||||
return (string)$sxe->Signature->SignedInfo->Reference['URI'];
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transform an RSA Key in Modulus/Exponent format into a PEM encoding and
|
||||
* return an openssl resource for it
|
||||
*
|
||||
* @param string $modulus The RSA Modulus in binary format
|
||||
* @param string $exponent The RSA exponent in binary format
|
||||
* @return string The PEM encoded version of the key
|
||||
*/
|
||||
static protected function _getPublicKeyFromModExp($modulus, $exponent)
|
||||
{
|
||||
$modulusInteger = self::_encodeValue($modulus, self::ASN_TYPE_INTEGER);
|
||||
$exponentInteger = self::_encodeValue($exponent, self::ASN_TYPE_INTEGER);
|
||||
$modExpSequence = self::_encodeValue($modulusInteger . $exponentInteger, self::ASN_TYPE_SEQUENCE);
|
||||
$modExpBitString = self::_encodeValue($modExpSequence, self::ASN_TYPE_BITSTRING);
|
||||
|
||||
$binRsaKeyIdentifier = pack( "H*", self::RSA_KEY_IDENTIFIER );
|
||||
|
||||
$publicKeySequence = self::_encodeValue($binRsaKeyIdentifier . $modExpBitString, self::ASN_TYPE_SEQUENCE);
|
||||
|
||||
$publicKeyInfoBase64 = base64_encode( $publicKeySequence );
|
||||
|
||||
$publicKeyString = "-----BEGIN PUBLIC KEY-----\n";
|
||||
$publicKeyString .= wordwrap($publicKeyInfoBase64, 64, "\n", true);
|
||||
$publicKeyString .= "\n-----END PUBLIC KEY-----\n";
|
||||
|
||||
return $publicKeyString;
|
||||
}
|
||||
|
||||
/**
|
||||
* Encode a limited set of data types into ASN.1 encoding format
|
||||
* which is used in X.509 certificates
|
||||
*
|
||||
* @param string $data The data to encode
|
||||
* @param const $type The encoding format constant
|
||||
* @return string The encoded value
|
||||
* @throws Zend_InfoCard_Xml_Security_Exception
|
||||
*/
|
||||
static protected function _encodeValue($data, $type)
|
||||
{
|
||||
// Null pad some data when we get it (integer values > 128 and bitstrings)
|
||||
if( (($type == self::ASN_TYPE_INTEGER) && (ord($data) > 0x7f)) ||
|
||||
($type == self::ASN_TYPE_BITSTRING)) {
|
||||
$data = "\0$data";
|
||||
}
|
||||
|
||||
$len = strlen($data);
|
||||
|
||||
// encode the value based on length of the string
|
||||
// I'm fairly confident that this is by no means a complete implementation
|
||||
// but it is enough for our purposes
|
||||
switch(true) {
|
||||
case ($len < 128):
|
||||
return sprintf("%c%c%s", $type, $len, $data);
|
||||
case ($len < 0x0100):
|
||||
return sprintf("%c%c%c%s", $type, 0x81, $len, $data);
|
||||
case ($len < 0x010000):
|
||||
return sprintf("%c%c%c%c%s", $type, 0x82, $len / 0x0100, $len % 0x0100, $data);
|
||||
default:
|
||||
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Security_Exception("Could not encode value");
|
||||
}
|
||||
|
||||
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Security_Exception("Invalid code path");
|
||||
}
|
||||
|
||||
/**
|
||||
* Securely compare two strings for equality while avoided C level memcmp()
|
||||
* optimisations capable of leaking timing information useful to an attacker
|
||||
* attempting to iteratively guess the unknown string (e.g. password) being
|
||||
* compared against.
|
||||
*
|
||||
* @param string $a
|
||||
* @param string $b
|
||||
* @return bool
|
||||
*/
|
||||
static protected function _secureStringCompare($a, $b)
|
||||
{
|
||||
if (strlen($a) !== strlen($b)) {
|
||||
return false;
|
||||
}
|
||||
$result = 0;
|
||||
for ($i = 0; $i < strlen($a); $i++) {
|
||||
$result |= ord($a[$i]) ^ ord($b[$i]);
|
||||
}
|
||||
return $result == 0;
|
||||
}
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml_Security
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Exception.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_Exception
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/Exception.php';
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml_Security
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard_Xml_Security_Exception extends Zend_InfoCard_Xml_Exception
|
||||
{
|
||||
}
|
@ -1,116 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml_Security
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Transform.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* A class to create a transform rule set based on XML URIs and then apply those rules
|
||||
* in the correct order to a given XML input
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml_Security
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard_Xml_Security_Transform
|
||||
{
|
||||
/**
|
||||
* A list of transforms to apply
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $_transformList = array();
|
||||
|
||||
/**
|
||||
* Returns the name of the transform class based on a given URI
|
||||
*
|
||||
* @throws Zend_InfoCard_Xml_Security_Exception
|
||||
* @param string $uri The transform URI
|
||||
* @return string The transform implementation class name
|
||||
*/
|
||||
protected function _findClassbyURI($uri)
|
||||
{
|
||||
switch($uri) {
|
||||
case 'http://www.w3.org/2000/09/xmldsig#enveloped-signature':
|
||||
return 'Zend_InfoCard_Xml_Security_Transform_EnvelopedSignature';
|
||||
case 'http://www.w3.org/2001/10/xml-exc-c14n#':
|
||||
return 'Zend_InfoCard_Xml_Security_Transform_XmlExcC14N';
|
||||
default:
|
||||
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Security_Exception("Unknown or Unsupported Transformation Requested");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a Transform URI to the list of transforms to perform
|
||||
*
|
||||
* @param string $uri The Transform URI
|
||||
* @return Zend_InfoCard_Xml_Security_Transform
|
||||
*/
|
||||
public function addTransform($uri)
|
||||
{
|
||||
$class = $this->_findClassbyURI($uri);
|
||||
|
||||
$this->_transformList[] = array('uri' => $uri,
|
||||
'class' => $class);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the list of transforms to perform
|
||||
*
|
||||
* @return array The list of transforms
|
||||
*/
|
||||
public function getTransformList()
|
||||
{
|
||||
return $this->_transformList;
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply the transforms in the transform list to the input XML document
|
||||
*
|
||||
* @param string $strXmlDocument The input XML
|
||||
* @return string The XML after the transformations have been applied
|
||||
*/
|
||||
public function applyTransforms($strXmlDocument)
|
||||
{
|
||||
foreach($this->_transformList as $transform) {
|
||||
if (!class_exists($transform['class'])) {
|
||||
require_once 'Zend/Loader.php';
|
||||
Zend_Loader::loadClass($transform['class']);
|
||||
}
|
||||
|
||||
$transformer = new $transform['class'];
|
||||
|
||||
// We can't really test this check because it would require logic changes in the component itself
|
||||
// @codeCoverageIgnoreStart
|
||||
if(!($transformer instanceof Zend_InfoCard_Xml_Security_Transform_Interface)) {
|
||||
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Security_Exception("Transforms must implement the Transform Interface");
|
||||
}
|
||||
// @codeCoverageIgnoreEnd
|
||||
|
||||
$strXmlDocument = $transformer->transform($strXmlDocument);
|
||||
}
|
||||
|
||||
return $strXmlDocument;
|
||||
}
|
||||
}
|
@ -1,60 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml_Security
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: EnvelopedSignature.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_Security_Transform_Interface
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/Security/Transform/Interface.php';
|
||||
|
||||
/**
|
||||
* A object implementing the EnvelopedSignature XML Transform
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml_Security
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard_Xml_Security_Transform_EnvelopedSignature
|
||||
implements Zend_InfoCard_Xml_Security_Transform_Interface
|
||||
{
|
||||
/**
|
||||
* Transforms the XML Document according to the EnvelopedSignature Transform
|
||||
*
|
||||
* @throws Zend_InfoCard_Xml_Security_Transform_Exception
|
||||
* @param string $strXMLData The input XML data
|
||||
* @return string the transformed XML data
|
||||
*/
|
||||
public function transform($strXMLData)
|
||||
{
|
||||
$sxe = simplexml_load_string($strXMLData);
|
||||
|
||||
if(!$sxe->Signature) {
|
||||
require_once 'Zend/InfoCard/Xml/Security/Transform/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Security_Transform_Exception("Unable to locate Signature Block for EnvelopedSignature Transform");
|
||||
}
|
||||
|
||||
unset($sxe->Signature);
|
||||
|
||||
return $sxe->asXML();
|
||||
}
|
||||
}
|
@ -1,37 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml_Security
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Exception.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_Security_Exception
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/Security/Exception.php';
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml_Security
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard_Xml_Security_Transform_Exception extends Zend_InfoCard_Xml_Security_Exception
|
||||
{
|
||||
}
|
@ -1,43 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml_Security
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Interface.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Interface for XML Security Transforms
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml_Security
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
interface Zend_InfoCard_Xml_Security_Transform_Interface
|
||||
{
|
||||
/**
|
||||
* Transform the given XML string according to the transform rules
|
||||
* implemented by the object using this interface
|
||||
*
|
||||
* @throws Zend_InfoCard_Xml_Security_Transform_Exception
|
||||
* @param string $strXmlData the input XML
|
||||
* @return string the output XML
|
||||
*/
|
||||
public function transform($strXmlData);
|
||||
}
|
@ -1,59 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml_Security
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: XmlExcC14N.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_Security_Transform_Interface
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/Security/Transform/Interface.php';
|
||||
|
||||
/**
|
||||
* A Transform to perform C14n XML Exclusive Canonicalization
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml_Security
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard_Xml_Security_Transform_XmlExcC14N
|
||||
implements Zend_InfoCard_Xml_Security_Transform_Interface
|
||||
{
|
||||
/**
|
||||
* Transform the input XML based on C14n XML Exclusive Canonicalization rules
|
||||
*
|
||||
* @throws Zend_InfoCard_Xml_Security_Transform_Exception
|
||||
* @param string $strXMLData The input XML
|
||||
* @return string The output XML
|
||||
*/
|
||||
public function transform($strXMLData)
|
||||
{
|
||||
$dom = new DOMDocument();
|
||||
$dom->loadXML($strXMLData);
|
||||
|
||||
if(method_exists($dom, 'C14N')) {
|
||||
return $dom->C14N(true, false);
|
||||
}
|
||||
|
||||
require_once 'Zend/InfoCard/Xml/Security/Transform/Exception.php';
|
||||
throw new Zend_InfoCard_Xml_Security_Transform_Exception("This transform requires the C14N() method to exist in the DOM extension");
|
||||
}
|
||||
}
|
@ -1,173 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: SecurityTokenReference.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* Zend_InfoCard_Xml_Element
|
||||
*/
|
||||
require_once 'Zend/InfoCard/Xml/Element.php';
|
||||
|
||||
/**
|
||||
* Represents a SecurityTokenReference XML block
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_InfoCard
|
||||
* @subpackage Zend_InfoCard_Xml
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_InfoCard_Xml_SecurityTokenReference extends Zend_InfoCard_Xml_Element
|
||||
{
|
||||
/**
|
||||
* Base64 Binary Encoding URI
|
||||
*/
|
||||
const ENCODING_BASE64BIN = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary';
|
||||
|
||||
/**
|
||||
* Return an instance of the object based on the input XML
|
||||
*
|
||||
* @param string $xmlData The SecurityTokenReference XML Block
|
||||
* @return Zend_InfoCard_Xml_SecurityTokenReference
|
||||
* @throws Zend_InfoCard_Xml_Exception
|
||||
*/
|
||||
static public function getInstance($xmlData)
|
||||
{
|
||||
if($xmlData instanceof Zend_InfoCard_Xml_Element) {
|
||||
$strXmlData = $xmlData->asXML();
|
||||
} else if (is_string($xmlData)) {
|
||||
$strXmlData = $xmlData;
|
||||
} else {
|
||||
throw new Zend_InfoCard_Xml_Exception("Invalid Data provided to create instance");
|
||||
}
|
||||
|
||||
$sxe = simplexml_load_string($strXmlData);
|
||||
|
||||
if($sxe->getName() != "SecurityTokenReference") {
|
||||
throw new Zend_InfoCard_Xml_Exception("Invalid XML Block provided for SecurityTokenReference");
|
||||
}
|
||||
|
||||
return simplexml_load_string($strXmlData, "Zend_InfoCard_Xml_SecurityTokenReference");
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the Key Identifier XML Object
|
||||
*
|
||||
* @return Zend_InfoCard_Xml_Element
|
||||
* @throws Zend_InfoCard_Xml_Exception
|
||||
*/
|
||||
protected function _getKeyIdentifier()
|
||||
{
|
||||
$this->registerXPathNamespace('o', 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd');
|
||||
list($keyident) = $this->xpath('//o:KeyIdentifier');
|
||||
|
||||
if(!($keyident instanceof Zend_InfoCard_Xml_Element)) {
|
||||
throw new Zend_InfoCard_Xml_Exception("Failed to retrieve Key Identifier");
|
||||
}
|
||||
|
||||
return $keyident;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the Key URI identifying the thumbprint type used
|
||||
*
|
||||
* @return string The thumbprint type URI
|
||||
* @throws Zend_InfoCard_Xml_Exception
|
||||
*/
|
||||
public function getKeyThumbprintType()
|
||||
{
|
||||
|
||||
$keyident = $this->_getKeyIdentifier();
|
||||
|
||||
$dom = self::convertToDOM($keyident);
|
||||
|
||||
if(!$dom->hasAttribute('ValueType')) {
|
||||
throw new Zend_InfoCard_Xml_Exception("Key Identifier did not provide a type for the value");
|
||||
}
|
||||
|
||||
return $dom->getAttribute('ValueType');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the thumbprint encoding type used as a URI
|
||||
*
|
||||
* @return string the URI of the thumbprint encoding used
|
||||
* @throws Zend_InfoCard_Xml_Exception
|
||||
*/
|
||||
public function getKeyThumbprintEncodingType()
|
||||
{
|
||||
|
||||
$keyident = $this->_getKeyIdentifier();
|
||||
|
||||
$dom = self::convertToDOM($keyident);
|
||||
|
||||
if(!$dom->hasAttribute('EncodingType')) {
|
||||
throw new Zend_InfoCard_Xml_Exception("Unable to determine the encoding type for the key identifier");
|
||||
}
|
||||
|
||||
return $dom->getAttribute('EncodingType');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the key reference data used to identify the public key
|
||||
*
|
||||
* @param bool $decode if true, will return a decoded version of the key
|
||||
* @return string the key reference thumbprint, either in binary or encoded form
|
||||
* @throws Zend_InfoCard_Xml_Exception
|
||||
*/
|
||||
public function getKeyReference($decode = true)
|
||||
{
|
||||
$keyIdentifier = $this->_getKeyIdentifier();
|
||||
|
||||
$dom = self::convertToDOM($keyIdentifier);
|
||||
$encoded = $dom->nodeValue;
|
||||
|
||||
if(empty($encoded)) {
|
||||
throw new Zend_InfoCard_Xml_Exception("Could not find the Key Reference Encoded Value");
|
||||
}
|
||||
|
||||
if($decode) {
|
||||
|
||||
$decoded = "";
|
||||
switch($this->getKeyThumbprintEncodingType()) {
|
||||
case self::ENCODING_BASE64BIN:
|
||||
|
||||
if(version_compare(PHP_VERSION, "5.2.0", ">=")) {
|
||||
$decoded = base64_decode($encoded, true);
|
||||
} else {
|
||||
$decoded = base64_decode($encoded);
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
throw new Zend_InfoCard_Xml_Exception("Unknown Key Reference Encoding Type: {$this->getKeyThumbprintEncodingType()}");
|
||||
}
|
||||
|
||||
if(!$decoded || empty($decoded)) {
|
||||
throw new Zend_InfoCard_Xml_Exception("Failed to decode key reference");
|
||||
}
|
||||
|
||||
return $decoded;
|
||||
}
|
||||
|
||||
return $encoded;
|
||||
}
|
||||
}
|
@ -1,107 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Nirvanix
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Nirvanix.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* @see Zend_Http_Client
|
||||
*/
|
||||
require_once 'Zend/Http/Client.php';
|
||||
|
||||
/**
|
||||
* This class allows Nirvanix authentication credentials to be specified
|
||||
* in one place and provides a factory for returning convenience wrappers
|
||||
* around the Nirvanix web service namespaces.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Nirvanix
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Nirvanix
|
||||
{
|
||||
/**
|
||||
* Options to pass to namespace proxies
|
||||
* @param array
|
||||
*/
|
||||
protected $_options;
|
||||
|
||||
/**
|
||||
* Class constructor. Authenticates with Nirvanix to receive a
|
||||
* sessionToken, which is then passed to each future request.
|
||||
*
|
||||
* @param array $authParams Authentication POST parameters. This
|
||||
* should have keys "username", "password",
|
||||
* and "appKey".
|
||||
* @param array $options Options to pass to namespace proxies
|
||||
*/
|
||||
public function __construct($authParams, $options = array())
|
||||
{
|
||||
// merge options with default options
|
||||
$defaultOptions = array('defaults' => array(),
|
||||
'httpClient' => new Zend_Http_Client(),
|
||||
'host' => 'http://services.nirvanix.com');
|
||||
$this->_options = array_merge($defaultOptions, $options);
|
||||
|
||||
// login and save sessionToken to default POST params
|
||||
$resp = $this->getService('Authentication')->login($authParams);
|
||||
$this->_options['defaults']['sessionToken'] = (string)$resp->SessionToken;
|
||||
}
|
||||
|
||||
/**
|
||||
* Nirvanix divides its service into namespaces, with each namespace
|
||||
* providing different functionality. This is a factory method that
|
||||
* returns a preconfigured Zend_Service_Nirvanix_Namespace_Base proxy.
|
||||
*
|
||||
* @param string $namespace Name of the namespace
|
||||
* @return Zend_Service_Nirvanix_Namespace_Base
|
||||
*/
|
||||
public function getService($namespace, $options = array())
|
||||
{
|
||||
switch ($namespace) {
|
||||
case 'IMFS':
|
||||
$class = 'Zend_Service_Nirvanix_Namespace_Imfs';
|
||||
break;
|
||||
default:
|
||||
$class = 'Zend_Service_Nirvanix_Namespace_Base';
|
||||
}
|
||||
|
||||
$options['namespace'] = ucfirst($namespace);
|
||||
$options = array_merge($this->_options, $options);
|
||||
|
||||
if (!class_exists($class)) {
|
||||
require_once 'Zend/Loader.php';
|
||||
Zend_Loader::loadClass($class);
|
||||
}
|
||||
return new $class($options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the configured options.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getOptions()
|
||||
{
|
||||
return $this->_options;
|
||||
}
|
||||
|
||||
}
|
@ -1,36 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Nirvanix
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Exception.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Exception.php';
|
||||
|
||||
/**
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Nirvanix
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Nirvanix_Exception extends Zend_Service_Exception
|
||||
{}
|
@ -1,172 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Nirvanix
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Base.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* @see Zend_Http_Client
|
||||
*/
|
||||
require_once 'Zend/Http/Client.php';
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Nirvanix_Response
|
||||
*/
|
||||
require_once 'Zend/Service/Nirvanix/Response.php';
|
||||
|
||||
/**
|
||||
* The Nirvanix web services are split into namespaces. This is a proxy class
|
||||
* representing one namespace. It allows calls to the namespace to be made by
|
||||
* PHP object calls rather than by having to construct HTTP client requests.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Nirvanix
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Nirvanix_Namespace_Base
|
||||
{
|
||||
/**
|
||||
* HTTP client instance that will be used to make calls to
|
||||
* the Nirvanix web services.
|
||||
* @var Zend_Http_Client
|
||||
*/
|
||||
protected $_httpClient;
|
||||
|
||||
/**
|
||||
* Host to use for calls to this Nirvanix namespace. It is possible
|
||||
* that the user will wish to use different hosts for different namespaces.
|
||||
* @var string
|
||||
*/
|
||||
protected $_host = 'http://services.nirvanix.com';
|
||||
|
||||
/**
|
||||
* Name of this namespace as used in the URL.
|
||||
* @var string
|
||||
*/
|
||||
protected $_namespace = '';
|
||||
|
||||
/**
|
||||
* Defaults for POST parameters. When a request to the service is to be
|
||||
* made, the POST parameters are merged into these. This is a convenience
|
||||
* feature so parameters that are repeatedly required like sessionToken
|
||||
* do not need to be supplied again and again by the user.
|
||||
*
|
||||
* @param array
|
||||
*/
|
||||
protected $_defaults = array();
|
||||
|
||||
/**
|
||||
* Class constructor.
|
||||
*
|
||||
* @param array $options Options and dependency injection
|
||||
*/
|
||||
public function __construct($options = array())
|
||||
{
|
||||
if (isset($options['baseUrl'])) {
|
||||
$this->_host = $options['baseUrl'];
|
||||
}
|
||||
|
||||
if (isset($options['namespace'])) {
|
||||
$this->_namespace = $options['namespace'];
|
||||
}
|
||||
|
||||
if (isset($options['defaults'])) {
|
||||
$this->_defaults = $options['defaults'];
|
||||
}
|
||||
|
||||
if (! isset($options['httpClient'])) {
|
||||
$options['httpClient'] = new Zend_Http_Client();
|
||||
}
|
||||
$this->_httpClient = $options['httpClient'];
|
||||
}
|
||||
|
||||
/**
|
||||
* When a method call is made against this proxy, convert it to
|
||||
* an HTTP request to make against the Nirvanix REST service.
|
||||
*
|
||||
* $imfs->DeleteFiles(array('filePath' => 'foo'));
|
||||
*
|
||||
* Assuming this object was proxying the IMFS namespace, the
|
||||
* method call above would call the DeleteFiles command. The
|
||||
* POST parameters would be filePath, merged with the
|
||||
* $this->_defaults (containing the sessionToken).
|
||||
*
|
||||
* @param string $methodName Name of the command to call
|
||||
* on this namespace.
|
||||
* @param array $args Only the first is used and it must be
|
||||
* an array. It contains the POST params.
|
||||
*
|
||||
* @return Zend_Service_Nirvanix_Response
|
||||
*/
|
||||
public function __call($methodName, $args)
|
||||
{
|
||||
$uri = $this->_makeUri($methodName);
|
||||
$this->_httpClient->setUri($uri);
|
||||
|
||||
if (!isset($args[0]) || !is_array($args[0])) {
|
||||
$args[0] = array();
|
||||
}
|
||||
|
||||
$params = array_merge($this->_defaults, $args[0]);
|
||||
$this->_httpClient->resetParameters();
|
||||
$this->_httpClient->setParameterPost($params);
|
||||
|
||||
$httpResponse = $this->_httpClient->request(Zend_Http_Client::POST);
|
||||
return $this->_wrapResponse($httpResponse);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the HTTP client used for this namespace. This is useful
|
||||
* for inspecting the last request or directly interacting with the
|
||||
* HTTP client.
|
||||
*
|
||||
* @return Zend_Http_Client
|
||||
*/
|
||||
public function getHttpClient()
|
||||
{
|
||||
return $this->_httpClient;
|
||||
}
|
||||
|
||||
/**
|
||||
* Make a complete URI from an RPC method name. All Nirvanix REST
|
||||
* service URIs use the same format.
|
||||
*
|
||||
* @param string $methodName RPC method name
|
||||
* @return string
|
||||
*/
|
||||
protected function _makeUri($methodName)
|
||||
{
|
||||
$methodName = ucfirst($methodName);
|
||||
return "{$this->_host}/ws/{$this->_namespace}/{$methodName}.ashx";
|
||||
}
|
||||
|
||||
/**
|
||||
* All Nirvanix REST service calls return an XML payload. This method
|
||||
* makes a Zend_Service_Nirvanix_Response from that XML payload.
|
||||
*
|
||||
* @param Zend_Http_Response $httpResponse Raw response from Nirvanix
|
||||
* @return Zend_Service_Nirvanix_Response Wrapped response
|
||||
*/
|
||||
protected function _wrapResponse($httpResponse)
|
||||
{
|
||||
return new Zend_Service_Nirvanix_Response($httpResponse->getBody());
|
||||
}
|
||||
}
|
@ -1,105 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Nirvanix
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Imfs.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* @see Zend_Service_Nirvanix_Namespace_Base
|
||||
*/
|
||||
require_once 'Zend/Service/Nirvanix/Namespace/Base.php';
|
||||
|
||||
/**
|
||||
* Namespace proxy with additional convenience methods for the IMFS namespace.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Nirvanix
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Nirvanix_Namespace_Imfs extends Zend_Service_Nirvanix_Namespace_Base
|
||||
{
|
||||
/**
|
||||
* Convenience function to get the contents of a file on
|
||||
* the Nirvanix IMFS. Analog to PHP's file_get_contents().
|
||||
*
|
||||
* @param string $filePath Remote path and filename
|
||||
* @param integer $expiration Number of seconds that Nirvanix
|
||||
* make the file available for download.
|
||||
* @return string Contents of file
|
||||
*/
|
||||
public function getContents($filePath, $expiration = 3600)
|
||||
{
|
||||
// get url to download the file
|
||||
$params = array('filePath' => $filePath,
|
||||
'expiration' => $expiration);
|
||||
$resp = $this->getOptimalUrls($params);
|
||||
$url = (string)$resp->Download->DownloadURL;
|
||||
|
||||
// download the file
|
||||
$this->_httpClient->resetParameters();
|
||||
$this->_httpClient->setUri($url);
|
||||
$resp = $this->_httpClient->request(Zend_Http_Client::GET);
|
||||
|
||||
return $resp->getBody();
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenience function to put the contents of a string into
|
||||
* the Nirvanix IMFS. Analog to PHP's file_put_contents().
|
||||
*
|
||||
* @param string $filePath Remote path and filename
|
||||
* @param integer $data Data to store in the file
|
||||
* @param string $mimeType Mime type of data
|
||||
* @return Zend_Service_Nirvanix_Response
|
||||
*/
|
||||
public function putContents($filePath, $data, $mimeType = null)
|
||||
{
|
||||
// get storage node for upload
|
||||
$params = array('sizeBytes' => strlen($data));
|
||||
$resp = $this->getStorageNode($params);
|
||||
$host = (string)$resp->GetStorageNode->UploadHost;
|
||||
$uploadToken = (string)$resp->GetStorageNode->UploadToken;
|
||||
|
||||
// http upload data into remote file
|
||||
$this->_httpClient->resetParameters();
|
||||
$this->_httpClient->setUri("http://{$host}/Upload.ashx");
|
||||
$this->_httpClient->setParameterPost('uploadToken', $uploadToken);
|
||||
$this->_httpClient->setParameterPost('destFolderPath', str_replace('\\', '/',dirname($filePath)));
|
||||
$this->_httpClient->setFileUpload(basename($filePath), 'uploadFile', $data, $mimeType);
|
||||
$response = $this->_httpClient->request(Zend_Http_Client::POST);
|
||||
|
||||
return new Zend_Service_Nirvanix_Response($response->getBody());
|
||||
}
|
||||
|
||||
/**
|
||||
* Convenience function to remove a file from the Nirvanix IMFS.
|
||||
* Analog to PHP's unlink().
|
||||
*
|
||||
* @param string $filePath Remove path and filename
|
||||
* @return Zend_Service_Nirvanix_Response
|
||||
*/
|
||||
public function unlink($filePath)
|
||||
{
|
||||
$params = array('filePath' => $filePath);
|
||||
return $this->deleteFiles($params);
|
||||
}
|
||||
|
||||
}
|
@ -1,123 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Nirvanix
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
* @version $Id: Response.php 24593 2012-01-05 20:35:02Z matthew $
|
||||
*/
|
||||
|
||||
/**
|
||||
* This class decorates a SimpleXMLElement parsed from a Nirvanix web service
|
||||
* response. It is primarily exists to provide a convenience feature that
|
||||
* throws an exception when <ResponseCode> contains an error.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_Service
|
||||
* @subpackage Nirvanix
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_Service_Nirvanix_Response
|
||||
{
|
||||
/**
|
||||
* SimpleXMLElement parsed from Nirvanix web service response.
|
||||
*
|
||||
* @var SimpleXMLElement
|
||||
*/
|
||||
protected $_sxml;
|
||||
|
||||
/**
|
||||
* Class constructor. Parse the XML response from a Nirvanix method
|
||||
* call into a decorated SimpleXMLElement element.
|
||||
*
|
||||
* @param string $xml XML response string from Nirvanix
|
||||
* @throws Zend_Service_Nirvanix_Exception
|
||||
*/
|
||||
public function __construct($xml)
|
||||
{
|
||||
$this->_sxml = @simplexml_load_string($xml);
|
||||
|
||||
if (! $this->_sxml instanceof SimpleXMLElement) {
|
||||
$this->_throwException("XML could not be parsed from response: $xml");
|
||||
}
|
||||
|
||||
$name = $this->_sxml->getName();
|
||||
if ($name != 'Response') {
|
||||
$this->_throwException("Expected XML element Response, got $name");
|
||||
}
|
||||
|
||||
$code = (int)$this->_sxml->ResponseCode;
|
||||
if ($code != 0) {
|
||||
$msg = (string)$this->_sxml->ErrorMessage;
|
||||
$this->_throwException($msg, $code);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the SimpleXMLElement representing this response
|
||||
* for direct access.
|
||||
*
|
||||
* @return SimpleXMLElement
|
||||
*/
|
||||
public function getSxml()
|
||||
{
|
||||
return $this->_sxml;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delegate undefined properties to the decorated SimpleXMLElement.
|
||||
*
|
||||
* @param string $offset Undefined property name
|
||||
* @return mixed
|
||||
*/
|
||||
public function __get($offset)
|
||||
{
|
||||
return $this->_sxml->$offset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delegate undefined methods to the decorated SimpleXMLElement.
|
||||
*
|
||||
* @param string $offset Underfined method name
|
||||
* @param array $args Method arguments
|
||||
* @return mixed
|
||||
*/
|
||||
public function __call($method, $args)
|
||||
{
|
||||
return call_user_func_array(array($this->_sxml, $method), $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Throw an exception. This method exists to only contain the
|
||||
* lazy-require() of the exception class.
|
||||
*
|
||||
* @param string $message Error message
|
||||
* @param integer $code Error code
|
||||
* @throws Zend_Service_Nirvanix_Exception
|
||||
* @return void
|
||||
*/
|
||||
protected function _throwException($message, $code = null)
|
||||
{
|
||||
/**
|
||||
* @see Zend_Service_Nirvanix_Exception
|
||||
*/
|
||||
require_once 'Zend/Service/Nirvanix/Exception.php';
|
||||
|
||||
throw new Zend_Service_Nirvanix_Exception($message, $code);
|
||||
}
|
||||
|
||||
}
|
@ -1,317 +0,0 @@
|
||||
<?php
|
||||
/**
|
||||
* Zend Framework
|
||||
*
|
||||
* LICENSE
|
||||
*
|
||||
* This source file is subject to the new BSD license that is bundled
|
||||
* with this package in the file LICENSE.txt.
|
||||
* It is also available through the world-wide-web at this URL:
|
||||
* http://framework.zend.com/license/new-bsd
|
||||
* If you did not receive a copy of the license and are unable to
|
||||
* obtain it through the world-wide-web, please send an email
|
||||
* to license@zend.com so we can send you a copy immediately.
|
||||
*
|
||||
* @category Zend
|
||||
* @package Zend_View
|
||||
* @subpackage Helper
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
|
||||
/** Zend_View_Helper_HtmlElement */
|
||||
require_once 'Zend/View/Helper/HtmlElement.php';
|
||||
|
||||
/**
|
||||
* Helper for generating urls and/or image tags for use with tinysrc.net
|
||||
*
|
||||
* tinysrc.net provides an API for generating scaled, browser device-specific
|
||||
* images. In essence, you pass the API the URL to an image on your own server,
|
||||
* and tinysrc.net then provides the appropriate image based on the device that
|
||||
* accesses it.
|
||||
*
|
||||
* Additionally, tinysrc.net allows you to specify additional configuration via
|
||||
* the API:
|
||||
*
|
||||
* - image size. You may define this as:
|
||||
* - explicit size
|
||||
* - subtractive size (size of screen minus specified number of pixels)
|
||||
* - percentage size (percentage of screen size))
|
||||
* - image format. This will convert the image to the given format; allowed
|
||||
* values are "png" or "jpeg". By default, gif images are converted to png.
|
||||
*
|
||||
* This helper allows you to specify all configuration options, as well as:
|
||||
*
|
||||
* - whether or not to generate the full image tag (or just the URL)
|
||||
* - base url to images (which should include the protocol, server, and
|
||||
* optionally port and base path)
|
||||
*
|
||||
* @see http://tinysrc.net/
|
||||
* @package Zend_View
|
||||
* @subpackage Helper
|
||||
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
|
||||
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||||
*/
|
||||
class Zend_View_Helper_TinySrc extends Zend_View_Helper_HtmlElement
|
||||
{
|
||||
const TINYSRC_BASE = 'http://i.tinysrc.mobi';
|
||||
|
||||
/**
|
||||
* @var string Base URL for images
|
||||
*/
|
||||
protected $_baseUrl;
|
||||
|
||||
/**
|
||||
* @var bool Whether or not to create an image tag
|
||||
*/
|
||||
protected $_createTagFlag = true;
|
||||
|
||||
/**
|
||||
* @var string Default width and height
|
||||
*/
|
||||
protected $_dimensions = '';
|
||||
|
||||
/**
|
||||
* Default options
|
||||
*
|
||||
* Used when determining what options were passed, and needing to merge
|
||||
* them with default options.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $_defaultOptions = array(
|
||||
'base_url' => null,
|
||||
'format' => null,
|
||||
'width' => false,
|
||||
'height' => false,
|
||||
'create_tag' => true,
|
||||
);
|
||||
|
||||
/**
|
||||
* @var string Default image format to use
|
||||
*/
|
||||
protected $_format = '';
|
||||
|
||||
/**
|
||||
* Generate a link or image tag pointing to tinysrc.net
|
||||
*
|
||||
* @param mixed $image
|
||||
* @param array $options
|
||||
* @return void
|
||||
*/
|
||||
public function tinySrc($image = null, array $options = array())
|
||||
{
|
||||
if (null === $image) {
|
||||
return $this;
|
||||
}
|
||||
|
||||
$defaultOptions = $this->_defaultOptions;
|
||||
$defaultOptions['create_tag'] = $this->createTag();
|
||||
$options = array_merge($defaultOptions, $options);
|
||||
|
||||
$url = '/' . $this->_mergeBaseUrl($options) . ltrim($image, '/');
|
||||
|
||||
$src = self::TINYSRC_BASE
|
||||
. $this->_mergeFormat($options)
|
||||
. $this->_mergeDimensions($options)
|
||||
. $url;
|
||||
|
||||
if (!$options['create_tag']) {
|
||||
return $src;
|
||||
}
|
||||
|
||||
foreach (array_keys($this->_defaultOptions) as $key) {
|
||||
switch ($key) {
|
||||
case 'width':
|
||||
case 'height':
|
||||
if (!is_int($options[$key]) || !is_numeric($options[$key]) || $options[$key] < 0) {
|
||||
unset($options[$key]);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
unset($options[$key]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$options['src'] = $src;
|
||||
|
||||
$tag = '<img' . $this->_htmlAttribs($options) . $this->getClosingBracket();
|
||||
return $tag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set base URL for images
|
||||
*
|
||||
* @param string $url
|
||||
* @return Zend_View_Helper_TinySrc
|
||||
*/
|
||||
public function setBaseUrl($url)
|
||||
{
|
||||
$this->_baseUrl = rtrim($url, '/') . '/';
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get base URL for images
|
||||
*
|
||||
* If none already set, uses the ServerUrl and BaseUrl view helpers to
|
||||
* determine the base URL to images.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getBaseUrl()
|
||||
{
|
||||
if (null === $this->_baseUrl) {
|
||||
$this->setBaseUrl($this->view->serverUrl($this->view->baseUrl()));
|
||||
}
|
||||
return $this->_baseUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set default image format
|
||||
*
|
||||
* If set, this will set the default format to use on all images.
|
||||
*
|
||||
* @param null|string $format
|
||||
* @return Zend_View_Helper_TinySrc
|
||||
* @throws Zend_View_Exception
|
||||
*/
|
||||
public function setDefaultFormat($format = null)
|
||||
{
|
||||
if (null === $format) {
|
||||
$this->_format = '';
|
||||
return $this;
|
||||
}
|
||||
|
||||
$format = strtolower($format);
|
||||
if (!in_array($format, array('png', 'jpeg'))) {
|
||||
require_once 'Zend/View/Exception.php';
|
||||
throw new Zend_View_Exception('Invalid format; must be one of "jpeg" or "png"');
|
||||
}
|
||||
$this->_format = "/$format";
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set default dimensions
|
||||
*
|
||||
* If null is specified for width, default dimensions will be cleared. If
|
||||
* only width is specified, only width will be used. If either dimension
|
||||
* fails validation, an exception is raised.
|
||||
*
|
||||
* @param null|int|string $width
|
||||
* @param null|int|string $height
|
||||
* @return Zend_View_Helper_TinySrc
|
||||
* @throws Zend_View_Exception
|
||||
*/
|
||||
public function setDefaultDimensions($width = null, $height = null)
|
||||
{
|
||||
if (null === $width) {
|
||||
$this->_dimensions = '';
|
||||
return $this;
|
||||
}
|
||||
|
||||
if (!$this->_validateDimension($width)) {
|
||||
require_once 'Zend/View/Exception.php';
|
||||
throw new Zend_View_Exception('Invalid dimension; must be an integer, optionally preceded by "-" or "x"');
|
||||
}
|
||||
|
||||
$this->_dimensions = "/$width";
|
||||
if (null === $height) {
|
||||
return $this;
|
||||
}
|
||||
|
||||
if (!$this->_validateDimension($height)) {
|
||||
require_once 'Zend/View/Exception.php';
|
||||
throw new Zend_View_Exception('Invalid dimension; must be an integer, optionally preceded by "-" or "x"');
|
||||
}
|
||||
$this->_dimensions .= "/$height";
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set state of "create tag" flag
|
||||
*
|
||||
* @param bool $flag
|
||||
* @return Zend_View_Helper_TinySrc
|
||||
*/
|
||||
public function setCreateTag($flag)
|
||||
{
|
||||
$this->_createTagFlag = (bool) $flag;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Should the helper create an image tag?
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function createTag()
|
||||
{
|
||||
return $this->_createTagFlag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate a dimension
|
||||
*
|
||||
* Dimensions may be integers, optionally preceded by '-' or 'x'.
|
||||
*
|
||||
* @param string $dim
|
||||
* @return bool
|
||||
*/
|
||||
protected function _validateDimension($dim)
|
||||
{
|
||||
if (!is_scalar($dim) || is_bool($dim)) {
|
||||
return false;
|
||||
}
|
||||
return preg_match('/^(-|x)?\d+$/', (string) $dim);
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether to use default base URL, or base URL from options
|
||||
*
|
||||
* @param array $options
|
||||
* @return string
|
||||
*/
|
||||
protected function _mergeBaseUrl(array $options)
|
||||
{
|
||||
if (null === $options['base_url']) {
|
||||
return $this->getBaseUrl();
|
||||
}
|
||||
return rtrim($options['base_url'], '/') . '/';
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether to use default format or format provided in options.
|
||||
*
|
||||
* @param array $options
|
||||
* @return string
|
||||
*/
|
||||
protected function _mergeFormat(array $options)
|
||||
{
|
||||
if (in_array($options['format'], array('png', 'jpeg'))) {
|
||||
return '/' . $options['format'];
|
||||
}
|
||||
return $this->_format;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine whether to use default dimensions, or those passed in options.
|
||||
*
|
||||
* @param array $options
|
||||
* @return string
|
||||
*/
|
||||
protected function _mergeDimensions(array $options)
|
||||
{
|
||||
if (!$this->_validateDimension($options['width'])) {
|
||||
return $this->_dimensions;
|
||||
}
|
||||
$dimensions = '/' . $options['width'];
|
||||
if (!$this->_validateDimension($options['height'])) {
|
||||
return $dimensions;
|
||||
}
|
||||
$dimensions .= '/' . $options['height'];
|
||||
return $dimensions;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user