Amazon S3 Expiring Link

On February 8, 2013, in Amazon Cloud EC2 S3, Cloud, HTML5, LAMP, Learning, PHP, Tips, by Sandeep Verma


Hits: 1756  

I was working on Amazon S3 Cloud HTML5 MP3 Player for S3 Bucket security and Expiring Media links.

Amazon S3 Cloud HTML5 MP3 Player

Amazon S3 Cloud HTML5 MP3 Player

<?php

  if(!function_exists('el_crypto_hmacSHA1')){
      /**
      * Calculate the HMAC SHA1 hash of a string.
      *
      * @param string $key The key to hash against
      * @param string $data The data to hash
      * @param int $blocksize Optional blocksize
      * @return string HMAC SHA1
      */
      function el_crypto_hmacSHA1($key, $data, $blocksize = 64) {
          if (strlen($key) > $blocksize) $key = pack('H*', sha1($key));
          $key = str_pad($key, $blocksize, chr(0x00));
          $ipad = str_repeat(chr(0x36), $blocksize);
          $opad = str_repeat(chr(0x5c), $blocksize);
          $hmac = pack( 'H*', sha1(
              ($key ^ $opad) . pack( 'H*', sha1(
                  ($key ^ $ipad) . $data
              ))
          ));
          return base64_encode($hmac);
      }
  }


  if(!function_exists('el_s3_getTemporaryLink')){
      /**
      * Create temporary URLs to your protected Amazon S3 files.
      *
      * @param string $accessKey Your Amazon S3 access key
      * @param string $secretKey Your Amazon S3 secret key
      * @param string $bucket The bucket (bucket.s3.amazonaws.com)
      * @param string $path The target file path
      * @param int $expires In minutes
      * @return string Temporary Amazon S3 URL
      * @see http://awsdocs.s3.amazonaws.com/S3/20060301/s3-dg-20060301.pdf
      */
      function el_s3_getTemporaryLink($accessKey, $secretKey, $bucket, $path, $expires = 5) {
          // Calculate expiry time
          $expires = time() + intval(floatval($expires) * 60);
          // Fix the path; encode and sanitize
          $path = str_replace('%2F', '/', rawurlencode($path = ltrim($path, '/')));
          // Path for signature starts with the bucket
          $signpath = '/'. $bucket .'/'. $path;
          // S3 friendly string to sign
          $signsz = implode("\n", $pieces = array('GET', null, null, $expires, $signpath));
          // Calculate the hash
          $signature = el_crypto_hmacSHA1($secretKey, $signsz);
          // Glue the URL ...
          $url = sprintf('http://%s.s3.amazonaws.com/%s', $bucket, $path);
          // ... to the query string ...
          $qs = http_build_query($pieces = array(
              'AWSAccessKeyId' => $accessKey,
              'Expires' => $expires,
              'Signature' => $signature,
          ));a
          // ... and return the URL!
          return $url.'?'.$qs;
      }
  }

  ?>

Uses:

$ExpiringLink = el_s3_getTemporaryLink(‘AWS-KEY’, ‘AWS-SECRET-KEY’, ‘BUCKET’, ‘FILENAME’, ‘EXPIRING-TIME’);

Demo Amazon S3 Cloud HTML5 MP3 Player

Reference: http://snipplr.com/view/46753.57507/



Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!

Visit our friends!

A few highly recommended friends...