Zend Framework

Create an abstract class for use with the Amazon Web Servies.

Details

  • Type: Improvement Improvement
  • Status: Closed Closed
  • Priority: Minor Minor
  • Resolution: Fixed
  • Affects Version/s: None
  • Fix Version/s: 1.8.0
  • Component/s: Zend_Service_Amazon
  • Labels:
    None

Description

Create an abstract class to set a standard way for to handle the access and secret keys with all the AWS components.

AbstractClass
<?php

require_once 'Zend/Service/Abstract.php';

abstract class Zend_Service_Amazon_Abstract extends Zend_Service_Abstract
{
    /**
     * @var string Amazon Access Key
     */
    protected static $defaultAccessKey = null;

    /**
     * @var string Amazon Secret Key
     */
    protected static $defaultSecretKey = null;

    /**
     * @var string Amazon Secret Key
     */
    protected $secretKey;

    /**
     * @var string Amazon Access Key
     */
    protected $accessKey;

    /**
     * Set the keys to use when accessing SQS.
     *
     * @param  string $access_key
     * @param  string $secret_key
     * @return void
     */
    public static function setKeys($accessKey, $secretKey)
    {
        self::$defaultAccessKey = $accessKey;
        self::$defaultSecretKey = $secretKey;
    }

    /**
     * Create Amazon Sqs client.
     *
     * @param  string $access_key
     * @param  string $secret_key
     * @return void
     */
    public function __construct($accessKey=null, $secretKey=null)
    {
        if(!$accessKey) {
            $accessKey = self::$defaultAccessKey;
        }
        if(!$secretKey) {
            $secretKey = self::$defaultSecretKey;
        }
        if(!$accessKey || !$secretKey) {
            require_once 'Zend/Service/Amazon/Exception.php';
            throw new Zend_Service_Amazon_Exception("AWS keys were not supplied");
        }
        $this->accessKey = $accessKey;
        $this->secretKey = $secretKey;
    }

    /**
     * Method to fetch the Access Key
     *
     * @return string
     */
    protected function getAccessKey()
    {
        return $this->accessKey;
    }

    /**
     * Method to fetch the Secret AWS Key
     *
     * @return string
     */
    protected function getSecretKey()
    {
        return $this->secretKey;
    }
}
TestCase
<?php

require_once 'Zend/Service/Amazon/Abstract.php';

require_once 'PHPUnit/Framework/TestCase.php';

/**
 * Zend_Service_Amazon_Sqs_Queue test case.
 */
class AmamzonAbstract extends PHPUnit_Framework_TestCase
{
    /**
     * Prepares the environment before running a test.
     */
    protected function setUp()
    {
        parent::setUp();
    }

    /**
     * Cleans up the environment after running a test.
     */
    protected function tearDown()
    {
        parent::tearDown();
    }

    public function testNoKeysThrowException()
    {
        try {
            $class = new TestAmamzonAbstract();
            $this->fail('Exception should be thrown when no keys are passed in.');
        } catch(Zend_Service_Amazon_Exception $zsae) {}
    }

    public function testConstructorWithKeysDoesNotThrowException()
    {
        try {
            $class = new TestAmamzonAbstract('TestAccessKey', 'TestSecretKey');
        } catch(Zend_Service_Amazon_Exception $zsae) {
            $this->fail('Exception should be thrown when no keys are passed in.');
        }
    }

    public function testSetStaticKeys()
    {
        TestAmamzonAbstract::setKeys('TestAccessKey', 'TestSecretKey');
        $class = new TestAmamzonAbstract();

        $this->assertEquals('TestAccessKey', $class->returnAccessKey());
        $this->assertEquals('TestSecretKey', $class->returnSecretKey());
    }

    public function testPassKeysIntoConstructor()
    {
        $class = new TestAmamzonAbstract('TestAccessKey', 'TestSecretKey');

        $this->assertEquals('TestAccessKey', $class->returnAccessKey());
        $this->assertEquals('TestSecretKey', $class->returnSecretKey());
    }

    public function testPassedInKeysOverrideStaticSetKeys()
    {
        TestAmamzonAbstract::setKeys('TestStaticAccessKey', 'TestStaticSecretKey');
        $class = new TestAmamzonAbstract('TestAccessKey', 'TestSecretKey');

        $this->assertEquals('TestAccessKey', $class->returnAccessKey());
        $this->assertEquals('TestSecretKey', $class->returnSecretKey());
    }
}

class TestAmamzonAbstract extends Zend_Service_Amazon_Abstract
{
    public function returnAccessKey()
    {
        return $this->accessKey;
    }

    public function returnSecretKey()
    {
        return $this->secretKey;
    }
}

Issue Links

Activity

Hide
Jon Whitcraft added a comment -

Abstract Class for use with Amazon Aws Services.

Show
Jon Whitcraft added a comment - Abstract Class for use with Amazon Aws Services.
Hide
Jon Whitcraft added a comment -

Test case for the attached class.

Show
Jon Whitcraft added a comment - Test case for the attached class.
Hide
Jon Whitcraft added a comment -

Removed the files and made the code inline.

Show
Jon Whitcraft added a comment - Removed the files and made the code inline.
Hide
Jon Whitcraft added a comment -

Zip file for easy download.

Show
Jon Whitcraft added a comment - Zip file for easy download.
Hide
Ralph Schindler added a comment -

The use of statics for the access and secret key imply that you cannot use more than one amazon account per request, is that by design?

-ralph

Show
Ralph Schindler added a comment - The use of statics for the access and secret key imply that you cannot use more than one amazon account per request, is that by design? -ralph
Hide
Jon Whitcraft added a comment -

Ralph - Yes that is correct. This can easily be changed..

Jon

Show
Jon Whitcraft added a comment - Ralph - Yes that is correct. This can easily be changed.. Jon
Hide
Jon Whitcraft added a comment - - edited

Ralph

If you look at the _construct method you will notice that if you don't specify a key or secret key it will use the static keys. The static properties are a way to have default keys set so you don't need to provide the keys everytime you create a new instance but you can if you need to specify new keys.

Jon

Show
Jon Whitcraft added a comment - - edited Ralph If you look at the _construct method you will notice that if you don't specify a key or secret key it will use the static keys. The static properties are a way to have default keys set so you don't need to provide the keys everytime you create a new instance but you can if you need to specify new keys. Jon
Hide
Jon Whitcraft added a comment -

This got checked in with the Ec2 Component.

Show
Jon Whitcraft added a comment - This got checked in with the Ec2 Component.

People

Vote (0)
Watch (0)

Dates

  • Created:
    Updated:
    Resolved: