mirror of
https://github.com/heartcombo/devise.git
synced 2022-11-09 12:18:31 -05:00
72 lines
1.3 KiB
Text
72 lines
1.3 KiB
Text
|
#!/usr/bin/env bash
|
||
|
# Usage: s3-put <FILE> <S3_BUCKET>[:<PATH>] [<CONTENT_TYPE>]
|
||
|
#
|
||
|
# Uploads a file to the Amazon S3 service.
|
||
|
# Outputs the URL for the newly uploaded file.
|
||
|
#
|
||
|
# Requirements:
|
||
|
# - AMAZON_ACCESS_KEY_ID
|
||
|
# - AMAZON_SECRET_ACCESS_KEY
|
||
|
# - openssl
|
||
|
# - curl
|
||
|
#
|
||
|
# Author: Mislav Marohnić
|
||
|
|
||
|
set -e
|
||
|
|
||
|
authorization() {
|
||
|
local signature="$(string_to_sign | hmac_sha1 | base64)"
|
||
|
echo "AWS ${AMAZON_ACCESS_KEY_ID?}:${signature}"
|
||
|
}
|
||
|
|
||
|
hmac_sha1() {
|
||
|
openssl dgst -binary -sha1 -hmac "${AMAZON_SECRET_ACCESS_KEY?}"
|
||
|
}
|
||
|
|
||
|
base64() {
|
||
|
openssl enc -base64
|
||
|
}
|
||
|
|
||
|
bin_md5() {
|
||
|
openssl dgst -binary -md5
|
||
|
}
|
||
|
|
||
|
string_to_sign() {
|
||
|
echo "$http_method"
|
||
|
echo "$content_md5"
|
||
|
echo "$content_type"
|
||
|
echo "$date"
|
||
|
echo "x-amz-acl:$acl"
|
||
|
printf "/$bucket/$remote_path"
|
||
|
}
|
||
|
|
||
|
date_string() {
|
||
|
LC_TIME=C date "+%a, %d %h %Y %T %z"
|
||
|
}
|
||
|
|
||
|
file="$1"
|
||
|
bucket="${2%%:*}"
|
||
|
remote_path="${2#*:}"
|
||
|
content_type="$3"
|
||
|
|
||
|
if [ -z "$remote_path" ] || [ "$remote_path" = "$bucket" ]; then
|
||
|
remote_path="${file##*/}"
|
||
|
fi
|
||
|
|
||
|
http_method=PUT
|
||
|
acl="public-read"
|
||
|
content_md5="$(bin_md5 < "$file" | base64)"
|
||
|
date="$(date_string)"
|
||
|
|
||
|
url="https://$bucket.s3.amazonaws.com/$remote_path"
|
||
|
|
||
|
curl -qsSf -T "$file" \
|
||
|
-H "Authorization: $(authorization)" \
|
||
|
-H "x-amz-acl: $acl" \
|
||
|
-H "Date: $date" \
|
||
|
-H "Content-MD5: $content_md5" \
|
||
|
-H "Content-Type: $content_type" \
|
||
|
"$url"
|
||
|
|
||
|
echo "$url"
|