diff --git a/src/main/scripts/unix/download-shell-script-url-create b/src/main/scripts/unix/download-shell-script-url-create new file mode 100755 index 0000000000000000000000000000000000000000..7626123d104d0a8f43a673bc0d31ec3db4a1f399 --- /dev/null +++ b/src/main/scripts/unix/download-shell-script-url-create @@ -0,0 +1,157 @@ +#!/bin/bash + +# This script generates a URL which when consumed, will download a zip file +# The zip file holds Unix and Windows scripts for downloading the specified assets. +# +# Default values for the script arguments +EXPIRE_DAYS=14 +OVERWRITE=false +VERBOSE=true +PROJECT="" + + +# aterm.jar download url +ATERM_URL=https://mediaflux.researchsoftware.unimelb.edu.au/mflux/aterm.jar + +# function to print usage +usage() { + echo "" + echo "Usage:" + echo " $(basename $0) [-h|--help] [[--project <project ID>] --expire-days <number-of-days>] [--ncsr <ncsr>] [--overwrite] [--quiet] <namespace>" + echo "" + echo "Options:" + echo " -h | --help prints usage." + echo " --email <addresses> specify the email recipient of the generated url. Can be comma-separated if there are more than one." + echo " --expire-days <number-of-days> expiry of the auth token. Defaults to ${EXPIRE_DAYS} days." + echo " --overwrite overwrite if output file exists." + echo " --project the project ID that the assets must be drawn from." + echo " --quiet do not print output message." + echo "" + echo "Positional arguments:" + echo " <id> Mediaflux asset IDs to be downloaded by the scripts. Can be multiple, but must be from the same project." + echo "" + echo "Examples:" + echo " $(basename $0) --email user1@unimelb.edu.au --expire-days 10 proj-abc-1128.4.999/RAW_DATA proj-abc-1128.4.999/PROCESSED_DATA" + echo "" +} + +# check java +[[ -z $(which java) ]] && echo "Error: cannot find java." 1>&2 && exit 1 + +# check mflux.cfg +[[ -z $MFLUX_CFG || ! -f $MFLUX_CFG ]] && MFLUX_CFG="./mflux.cfg" +[[ -z $MFLUX_CFG || ! -f $MFLUX_CFG ]] && MFLUX_CFG="${HOME}/.Arcitecta/mflux.cfg" +[[ -z $MFLUX_CFG || ! -f $MFLUX_CFG ]] && MFLUX_CFG="$(dirname ${BASH_SOURCE[0]})/../../config/mflux.cfg" +[[ -z $MFLUX_CFG || ! -f $MFLUX_CFG ]] && MFLUX_CFG="$(dirname ${BASH_SOURCE[0]})/../../mflux.cfg" +[[ -z $MFLUX_CFG || ! -f $MFLUX_CFG ]] && MFLUX_CFG="$(dirname ${BASH_SOURCE[0]})/mflux.cfg" +[[ -z $MFLUX_CFG || ! -f $MFLUX_CFG ]] && echo "Error: cannot find ${HOME}/.Arcitecta/mflux.cfg." 1>&2 && exit 1 + +# check aterm.jar +[[ -z $MFLUX_ATERM || ! -f $MFLUX_ATERM ]] && MFLUX_ATERM="$(dirname ${BASH_SOURCE[0]})/../../lib/aterm.jar" +[[ -z $MFLUX_ATERM || ! -f $MFLUX_ATERM ]] && MFLUX_ATERM="${HOME}/.Arcitecta/aterm.jar" +[[ -z $MFLUX_ATERM || ! -f $MFLUX_ATERM ]] && MFLUX_ATERM=/opt/mediaflux/bin/aterm.jar +[[ -z $MFLUX_ATERM || ! -f $MFLUX_ATERM ]] && MFLUX_ATERM=./aterm.jar + + +# download aterm.jar +if [[ -z $MFLUX_ATERM || ! -f $MFLUX_ATERM ]]; then + MFLUX_ATERM=${HOME}/.Arcitecta/aterm.jar + mkdir -p ${HOME}/.Arcitecta + CURL=$(which curl) + WGET=$(which wget) + [[ -z "${CURL}" && -z "${WGET}" ]] && echo "Error: cannot download aterm.jar. Found no curl or wget." 1>&2 && exit 1 + if [[ ! -z "${CURL}" ]]; then + curl -f --create-dirs -k -o "$(dirname $0)/aterm.jar" "${ATERM_URL}" + else + wget --no-check-certificate -O "$(dirname $0)/aterm.jar" "${ATERM_URL}" + fi + if [[ $? -ne 0 ]]; then + echo "Error: failed to download aterm.jar" + exit 1 + fi +fi + +ATERM="java -jar -Dmf.cfg=$MFLUX_CFG $MFLUX_ATERM nogui" +SERVICE=unimelb.asset.download.shell.script.url.create +COMMAND="${ATERM} ${SERVICE}" + +## +## parse arguments +## +declare -a NAMESPACES=() +declare -a EMAILS=() +while [[ $# -gt 0 ]] +do +key="$1" +case $key in + --expire-days) + EXPIRE_DAYS="$2" + shift + shift + ;; + --email) + IFS=',' read -r -a EMAILS <<< "$2"; unset IFS + shift + shift + ;; + --overwrite) + OVERWRITE=true + shift + ;; + --project) + PROJECT="$2" + shift + shift + ;; + --quiet) + VERBOSE=false + shift + ;; + -h|--help) + shift + usage && exit 0 + ;; + *) + IDS+=("$1") + shift + ;; +esac +done + +if [[ -z $PROJECT ]]; then + echo "Error: no project ID was specified." 1>&2 + usage + exit 1 +fi + +if [[ ${#IDS[@]} -eq 0 ]]; then + echo "Error: no Mediaflux assets were specified." 1>&2 + usage + exit 1 +fi + +COMMAND="${COMMAND} :download <" +for id in "${IDS[@]}" +do + COMMAND="${COMMAND} :id ${id}" +done +ROLE="${PROJECT}:participant-a" +ROLE_NAMESPACE="${PROJECT}" +COMMAND="${COMMAND} :id 2383171 :id 2383172" + +COMMAND="${COMMAND} :token < :role -type role ${ROLE} :to now+${EXPIRE_DAYS}day > :verbose ${VERBOSE} :overwrite ${OVERWRITE}" +COMMAND="${COMMAND} >" + +COMMAND="${COMMAND} :token < :perm < :resource -type role:namespace ${ROLE_NAMESPACE} :access ADMINISTER > >" + +if [[ ${#EMAILS[@]} -gt 0 ]]; then + COMMAND="${COMMAND} :email < " + for email in "${EMAILS[@]}" + do + COMMAND="${COMMAND} :to ${email}" + done + COMMAND="${COMMAND} >" +fi + +# execute the command to generate the url +${COMMAND}