summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anderson <ejona86@gmail.com>2013-01-13 21:27:02 -0800
committerEric Anderson <ejona86@gmail.com>2013-01-13 21:27:02 -0800
commitc24e99bf368e9d9dd4d89904ba0c8de54c8c2eed (patch)
tree326d97cf209b82981ce0da061ec1ea815cb7ade8
downloadhib-dlagent-c24e99bf368e9d9dd4d89904ba0c8de54c8c2eed.tar.gz
hib-dlagent-c24e99bf368e9d9dd4d89904ba0c8de54c8c2eed.zip
Initial commitv0.1
Script is fully-functional, but does not support a configuration file.
-rw-r--r--CHANGELOG2
-rw-r--r--README28
-rwxr-xr-xhib-dlagent135
3 files changed, 165 insertions, 0 deletions
diff --git a/CHANGELOG b/CHANGELOG
new file mode 100644
index 0000000..728e329
--- /dev/null
+++ b/CHANGELOG
@@ -0,0 +1,2 @@
+Version 0.1 - 2013/01/07
+ * Initial version
diff --git a/README b/README
new file mode 100644
index 0000000..60eff5b
--- /dev/null
+++ b/README
@@ -0,0 +1,28 @@
+Tool to download Humble Indie Bundle binaries by file name
+Author: Eric Anderson <ejona86@gmail.com>
+
+Description
+===========
+
+Primarily for use as a DLAGENT in makepkg.conf in Arch Linux, but generally
+useful when needing to download a particular Humble Bundle file via a script.
+The script does very little other than argument parsing; it effectively has only
+two "real" lines of functionality.
+
+Installation and Usage
+======================
+
+Run the script directly or copy the script to a location like /usr/bin/ for all
+users to use.
+
+The tool uses curl to download the file, or can simply provide the URL needed to
+download the file so a different HTTP downloader such a Wget can be used.
+
+To use as a DLAGENT for the 'hib' scheme, you can modify makepkg.conf:
+DLAGENTS=(...
+ 'hib::/usr/bin/hib-dlagent -k 1a2b3c -o %o $(echo %u | cut -c 7-)'
+ ...)
+
+The 'cut -c 7-' removes the 'hib://' portion from the URL.
+
+Run with the -h argument for more information.
diff --git a/hib-dlagent b/hib-dlagent
new file mode 100755
index 0000000..1d94ac7
--- /dev/null
+++ b/hib-dlagent
@@ -0,0 +1,135 @@
+#!/usr/bin/env bash
+set -e
+
+VERSION=0.1
+LOGIN_PAGE=https://www.humblebundle.com/login
+HOME_PAGE=https://www.humblebundle.com/home
+COOKIE_JAR=
+
+FILE=
+DESTINATION=
+DOWNLOAD=1
+LISTING_PAGES=()
+USERNAME=
+PASSWORD=
+KEYS=()
+
+login() {
+ /usr/bin/curl -s --cookie-jar "$COOKIE_JAR" \
+ --data "username=$USERNAME" --data "password=$PASSWORD" "$LOGIN_PAGE"
+}
+
+discover_url() {
+ local LISTING_PAGE="$1"
+ /usr/bin/curl -s --cookie "$COOKIE_JAR" "$LISTING_PAGE" | grep "/$FILE?" | \
+ sed -e "s/.* data-web='\([^']*\)'.*/\1/" | head -n 1
+}
+
+usage() {
+ echo "hib-dlagent $VERSION"
+ echo "Tool to download Humble Indie Bundle binaries by file name"
+ echo
+ echo "Usage: $0 [OPTIONS] FILE"
+ echo "Options:"
+ echo " -h This help"
+ echo " -k <key> Search key's files. Use multiple times for multiple keys"
+ echo " -o <file> Name to use when saving file"
+ echo " -p <pass> Use pass to login. If specified multiple times, the last is"
+ echo " used"
+ echo " -s Print URL to stdout instead of downloading"
+ echo " -u <user> Use user to login. Search account's files. If specified"
+ echo " multiple times, the last is used"
+ echo
+ echo "If you specify -u, then all of that account's bundles are searched. If"
+ echo "a key is associated with a HIB account then you must use -u/-p, since"
+ echo "that key only works when logged into that account. It is not helpful to"
+ echo "specify -k for bundles associated with an account."
+}
+
+main() {
+ if [ $# -eq 0 ]; then
+ usage
+ exit 1
+ fi
+
+ while getopts "hk:o:p:su:" opt; do
+ case $opt in
+ \?)
+ exit 1
+ ;;
+ h)
+ usage
+ exit 1
+ ;;
+ k)
+ KEYS+=("$OPTARG")
+ ;;
+ o)
+ DESTINATION="$OPTARG"
+ ;;
+ p)
+ PASSWORD="$OPTARG"
+ ;;
+ s)
+ DOWNLOAD=0
+ ;;
+ u)
+ USERNAME="$OPTARG"
+ ;;
+ esac
+ done
+
+ shift $(($OPTIND - 1))
+
+ if [ $# == 0 ]; then
+ echo "Missing argument FILE" >&2
+ exit 1
+ fi
+
+ if [ $# != 1 ]; then
+ echo "Unexpected argument: $2" >&2
+ exit 1
+ fi
+
+ COOKIE_JAR=$(mktemp)
+ FILE="$1"
+
+ if [ -z "$DESTINATION" ]; then
+ DESTINATION="${FILE##*/}"
+ fi
+
+ if [ -n "$USERNAME" ]; then
+ login;
+ LISTING_PAGES+=("$HOME_PAGE")
+ fi
+
+ for KEY in "${KEYS[@]}"; do
+ LISTING_PAGES+=("https://www.humblebundle.com/downloads?key=$KEY")
+ done
+
+ if [ -z "$LISTING_PAGES" ]; then
+ echo "You must specify at least one of -u and -k" >&1
+ exit 1
+ fi
+
+ for LISTING_PAGE in "${LISTING_PAGES[@]}"; do
+ URL=$(discover_url "$LISTING_PAGE")
+ if [ -n "$URL" ]; then break; fi
+ done
+
+ # Cookie no longer necessary.
+ rm "$COOKIE_JAR"
+
+ if [ ! -n "$URL" ]; then
+ echo "Could not find URL for file: $FILE" >&2
+ exit 2
+ fi
+
+ if [ $DOWNLOAD -eq 0 ]; then
+ echo "$URL"
+ else
+ /usr/bin/curl -C - --retry 3 --retry-delay 3 -o "$DESTINATION" "$URL"
+ fi
+}
+
+main "$@"