--- /dev/null
+#! /usr/bin/env bash
+cat > /dev/null << EndOfLicence
+s3-bash
+Copyright 2007 Raphael James Cohn
+
+Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software distributed under the License
+is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+or implied. See the License for the specific language governing permissions and limitations under
+the License.
+EndOfLicence
+
+# Pragmas
+set -u
+set -e
+
+function printHelpAndExit
+{
+ exitCode=$1
+ printf "%s: version %s\n" "$weAreKnownAs" "$version"
+ printf "Part of s3-bash. Latest version is at %s\n" 'http://code.google.com/p/s3-bash/'
+ printf "Usage %s: -h\n" "$weAreKnownAs"
+ printf "Usage %s: [-vS] [-H file] [-a file] -k key -s file -T file url\n" "$weAreKnownAs"
+ printf " Option\tType\tRequirement\tDescription\n"
+ printf " -h\t\tprecedent\tprint this help\n"
+ printf " -v\t\toptional\tverbose output\n"
+ printf " -k\tstring\tmandatory\tAWS Access Key Id\n"
+ printf " -s\tfile\tmandatory\tAWS Secret Access Key Id File\n"
+ printf " -T\tfile\tmandatory\tFile (or stdin with -) to PUT\n"
+ printf " -S\t\toptional\tUse https\n"
+ printf " -H\tfile\toptional\tFile to write response headers to\n"
+ printf " -a\tfile\toptional\tFile to read Amazon custom headers from (X-Amz-Date is not allowed)\n"
+ printf " -c\tMIME\toptional\tMIME Content type. Default is text/plain\n"
+ printf " \turl\tmandatory\trelative url including bucket name and leading slash, eg /bucket/path/to/object?acl. Assumed to be already encoded\n"
+ printf "\n"
+ printf "Notes\n"
+ printf "Specify proxies using a ~/.curlrc file\n"
+ printf "Specify content to PUT using stdin using option -T -\n"
+ exit $exitCode
+}
+
+function parseOptions
+{
+ verbose=""
+ url=""
+ awsAccessKeyId=""
+ awsAccessSecretKeyIdFile=""
+ protocol="http"
+ fileToUpload=""
+ dumpHeaderFile="/dev/null"
+ amazonHeaderFile="/dev/null"
+ contentType="text/plain"
+ while getopts "hvk:s:SH:T:a:c:" optionName; do
+ case "$optionName" in
+ h) printHelpAndExit 0;;
+ v) verbose="-v";;
+ k) awsAccessKeyId="$OPTARG";;
+ s) awsAccessSecretKeyIdFile="$OPTARG"
+ if [ ! -e "$awsAccessSecretKeyIdFile" ]; then
+ printErrorHelpAndExit "AWS Secret Key Id file does not exist" $userSpecifiedDataErrorExitCode
+ fi;;
+ S) protocol="https";;
+ H) dumpHeaderFile="$OPTARG";;
+ T) fileToUpload="$OPTARG";;
+ a) amazonHeaderFile="$OPTARG";;
+ c) contentType="$OPTARG";;
+ [?]) printErrorHelpAndExit "Option not recognised" $userSpecifiedDataErrorExitCode;;
+ esac
+ done
+ if [ 1 -eq $OPTIND ]; then
+ printErrorHelpAndExit "Internal Error: parseOptions or a parent method in the call stack was not called with $"@"." $internalErrorExitCode
+ fi
+ let "toShift = $OPTIND - 1"
+ shift $toShift
+ if [ $# -eq 0 ]; then
+ printErrorHelpAndExit "URL not specified" $userSpecifiedDataErrorExitCode
+ fi
+ url="$1"
+ verifyUrl
+
+ if [ -z "$awsAccessSecretKeyIdFile" ]; then
+ printErrorHelpAndExit "AWS Secret Access Key file not specified" $userSpecifiedDataErrorExitCode
+ elif [ -z "$awsAccessKeyId" ]; then
+ printErrorHelpAndExit "AWS Access Key Id not specified" $userSpecifiedDataErrorExitCode
+ elif [ -z "$fileToUpload" ]; then
+ printErrorHelpAndExit "File to upload not specified" $userSpecifiedDataErrorExitCode
+ fi
+}
+
+function prepareToRunCurl
+{
+ readonly verb="PUT"
+ if [ ! "-" = "$fileToUpload" ]; then
+ readonly contentMD5="$(base64EncodedMD5 "$fileToUpload")"
+ readonly verbToPass="-T \"$fileToUpload\""
+ else
+ readonly contentMD5=""
+ readonly verbToPass="-T -"
+ fi
+}
+
+readonly weAreKnownAs="$(basename $0)"
+readonly ourPath="$(dirname $0)"
+
+readonly commonFunctions="$ourPath/s3-common-functions"
+if [ -e "$commonFunctions" ]; then
+ source "$commonFunctions"
+else
+ version="Unknown"
+ invalidEnvironmentExitCode=4
+ printErrorHelpAndExit "$weAreKnownAs: Could not locate file s3-common-functions" $invalidEnvironmentExitCode
+fi
+
+main "$@"