Revision: 38815
Updated Code
at January 8, 2011 04:18 by esundahl
Updated Code
<?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; } }
Revision: 38814
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at January 8, 2011 04:10 by esundahl
Initial Code
<head> <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <title>Expire Link</title> </head> <body> <?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; } } // ----------------------------------------------------------------------- // ?> <?php $url = el_s3_getTemporaryLink('AKIAJ2GRCAERX6CQ6K7A', 'uNOC62Egc3hgIUmT+hcYf7Sb1ihDW9pC9dyDuiEl', 'com.bradcorporation.facebook', 'unlock/album/01copy.mp3', 1); ?> <a href="<?php echo $url; ?>">This link will expire in 5 minutes.</a> </body>
Initial URL
Initial Description
This script generates an expiring link to an Amazon S3 file
Initial Title
Amazon S3 Expiring Link
Initial Tags
link
Initial Language
PHP