Issues

ZF-5791: Create an abstract class for use with the Amazon Web Servies.

Issue Type: Improvement Created: 2009-02-15T08:12:25.000+0000 Last Updated: 2009-12-13T08:55:36.000+0000 Status: Closed Fix version(s): - 1.8.0 (30/Apr/09)

Reporter: Jon Whitcraft (sidhighwind) Assignee: Jon Whitcraft (sidhighwind) Tags: - Zend_Service_Amazon

Related issues: - ZF-8536

Attachments: - AmazonAbstractClass.zip

Description

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

<pre class="highlight">
<?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;
    }
}



<pre class="highlight">
<?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;
    }
}

Comments

Posted by Jon Whitcraft (sidhighwind) on 2009-02-15T08:13:46.000+0000

Abstract Class for use with Amazon Aws Services.

Posted by Jon Whitcraft (sidhighwind) on 2009-02-15T08:14:35.000+0000

Test case for the attached class.

Posted by Jon Whitcraft (sidhighwind) on 2009-02-15T09:21:23.000+0000

Removed the files and made the code inline.

Posted by Jon Whitcraft (sidhighwind) on 2009-02-15T09:23:22.000+0000

Zip file for easy download.

Posted by Ralph Schindler (ralph) on 2009-02-23T14:04:46.000+0000

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

Posted by Jon Whitcraft (sidhighwind) on 2009-02-23T16:51:27.000+0000

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

Jon

Posted by Jon Whitcraft (sidhighwind) on 2009-03-11T13:30:21.000+0000

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

Posted by Jon Whitcraft (sidhighwind) on 2009-04-07T17:59:00.000+0000

This got checked in with the Ec2 Component.

Have you found an issue?

See the Overview section for more details.

Copyright

© 2006-2016 by Zend, a Rogue Wave Company. Made with by awesome contributors.

This website is built using zend-expressive and it runs on PHP 7.

Contacts