Source code for annotations.views.aws_views
"""
Views related to Amazon services.
"""
from django.conf import settings
from django.contrib.auth.decorators import login_required
import base64
from hashlib import sha1
import hmac
import time
import urllib
from urlparse import urlparse
@login_required
[docs]def sign_s3(request):
    """
    Genaration of a temporary signtaure using AWS secret key and access key.
    https://devcenter.heroku.com/articles/s3-upload-python
    This is used for user profile images.
    """
    if request.method == 'GET':
        object_name = urllib.quote_plus(request.GET.get('file_name'))
        mime_type = request.GET.get('file_type')
        secondsPerDay = 24*60*60
        expires = int(time.time() + secondsPerDay)
        amz_headers = "x-amz-acl:public-read"
        string_to_sign = "PUT\n\n%s\n%d\n%s\n/%s/%s" % (mime_type, expires, amz_headers, settings.S3_BUCKET, object_name)
        encodedSecretKey = settings.AWS_SECRET_KEY.encode()
        encodedString = string_to_sign.encode()
        h = hmac.new(encodedSecretKey, encodedString, sha1)
        hDigest = h.digest()
        signature = base64.b64encode(hDigest).strip()
        signature = urllib.quote_plus(signature)
        url = 'https://%s.s3.amazonaws.com/%s' % (settings.S3_BUCKET, object_name)
        # TODO: can we use the built-in Django JsonResponse for this?
        return JsonResponse({
            'signed_request': '%s?AWSAccessKeyId=%s&Expires=%s&Signature=%s' % (url, settings.AWS_ACCESS_KEY, expires, signature),
            'url': url,
        })