mirror of
https://github.com/mrworf/plexupdate.git
synced 2025-07-07 21:51:15 -07:00
First github commit
Signed-off-by: Henric Andersson <ha@sensenet.nu>
This commit is contained in:
parent
f810f87ed8
commit
d686f94e68
1 changed files with 181 additions and 0 deletions
181
plexpass_update.sh
Executable file
181
plexpass_update.sh
Executable file
|
@ -0,0 +1,181 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# PlexPass Linux Server download tool v2.3
|
||||
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
# This tool will login to the Plex homepage, locate the PlexPass
|
||||
# Plex Media Server for Linux and download it.
|
||||
#
|
||||
# Either modify this file to add email and password OR create
|
||||
# a separate .plexupdate file in your home directory with these
|
||||
# values.
|
||||
#
|
||||
# Returns 0 on success
|
||||
# 1 on error
|
||||
# 2 if file already downloaded
|
||||
# 3 if page layout has changed.
|
||||
# 4 if download fails
|
||||
#
|
||||
# All other return values not documented.
|
||||
#
|
||||
# Call program with -h for available options
|
||||
#
|
||||
# Enjoy!
|
||||
#
|
||||
# Version Description
|
||||
# ^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
# 1.0 Initial version, was able to download from plexapp
|
||||
# 2.0 Initial version supporting plex.tv
|
||||
# 2.1 Updated to use options and error codes
|
||||
# 2.2 Layout changed, so code also changed. Added better
|
||||
# resiliance to HTML changes and also better error handling
|
||||
# 2.3 Now reads an optional config file to avoid having to
|
||||
# modify this script.
|
||||
#
|
||||
|
||||
#################################################################
|
||||
# Set these two to what you need, or create a .plexupdate file
|
||||
# in your home directory with these two (avoids changing this)
|
||||
#
|
||||
EMAIL=
|
||||
PASS=
|
||||
|
||||
#################################################################
|
||||
# Don't change anything below this point
|
||||
#
|
||||
|
||||
# Load settings from config file if it exists
|
||||
if [ -f ~/.plexupdate ]; then
|
||||
source ~/.plexupdate
|
||||
fi
|
||||
|
||||
# Current pages we need
|
||||
URL_LOGIN=https://plex.tv/users/sign_in
|
||||
URL_DOWNLOAD=https://plex.tv/downloads?channel=plexpass
|
||||
|
||||
# Defaults
|
||||
RELEASE="64-bit"
|
||||
KEEP=no
|
||||
FORCE=no
|
||||
|
||||
# Sanity check
|
||||
if [ "${EMAIL}" == "" -o "${PASS}" == "" ]; then
|
||||
echo "Error: No email and/or password provided, please edit me."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Parse commandline
|
||||
set -- $(getopt fhko: -- "$@")
|
||||
while true;
|
||||
do
|
||||
case "$1" in
|
||||
(-h) echo -e "Usage: $(basename $0) [-fhko]\n\nf = Force download even if it exists (WILL NOT OVERWRITE)\nh = This help\nk = Reuse last authentication\no = 32-bit version (default 64 bit)\n"; exit 0;;
|
||||
(-f) FORCE=yes;;
|
||||
(-k) KEEP=yes;;
|
||||
(-o) RELEASE="32-bit";;
|
||||
(--) ;;
|
||||
(-*) echo "Error: unrecognized option $1" 1>&2; exit 1;;
|
||||
(*) break;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
# Useful functions
|
||||
rawurlencode() {
|
||||
local string="${1}"
|
||||
local strlen=${#string}
|
||||
local encoded=""
|
||||
|
||||
for (( pos=0 ; pos<strlen ; pos++ )); do
|
||||
c=${string:$pos:1}
|
||||
case "$c" in
|
||||
[-_.~a-zA-Z0-9] ) o="${c}" ;;
|
||||
* ) printf -v o '%%%02x' "'$c"
|
||||
esac
|
||||
encoded+="${o}"
|
||||
done
|
||||
echo "${encoded}"
|
||||
}
|
||||
|
||||
keypair() {
|
||||
local key="$( rawurlencode "$1" )"
|
||||
local val="$( rawurlencode "$2" )"
|
||||
|
||||
echo "${key}=${val}"
|
||||
}
|
||||
|
||||
# Fields we need to submit for login to work
|
||||
#
|
||||
# Field Value
|
||||
# utf8 ✓
|
||||
# authenticity_token <Need to be obtained from web page>
|
||||
# user[login] $EMAIL
|
||||
# user[password] $PASSWORD
|
||||
# user[remember_me] 0
|
||||
# commit Sign in
|
||||
|
||||
# If user wants, we skip authentication, but only if previous auth exists
|
||||
if [ "${KEEP}" != "yes" -o ! -f /tmp/kaka ]; then
|
||||
echo -n "Authenticating..."
|
||||
# Clean old session
|
||||
rm /tmp/kaka 2>/dev/null
|
||||
|
||||
# Get initial seed we need to authenticate
|
||||
SEED=$(wget --save-cookies /tmp/kaka --keep-session-cookies ${URL_LOGIN} -O - 2>/dev/null | grep 'name="authenticity_token"' | sed 's/.*value=.\([^"]*\).*/\1/')
|
||||
if [ $? -ne 0 -o "${SEED}" == "" ]; then
|
||||
echo "Error: Unable to obtain authentication token, page changed?"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Build post data
|
||||
echo -ne >/tmp/postdata "$(keypair "utf8" "✓" )"
|
||||
echo -ne >>/tmp/postdata "&$(keypair "authenticity_token" "${SEED}" )"
|
||||
echo -ne >>/tmp/postdata "&$(keypair "user[login]" "${EMAIL}" )"
|
||||
echo -ne >>/tmp/postdata "&$(keypair "user[password]" "${PASS}" )"
|
||||
echo -ne >>/tmp/postdata "&$(keypair "user[remember_me]" "0" )"
|
||||
echo -ne >>/tmp/postdata "&$(keypair "commit" "Sign in" )"
|
||||
|
||||
# Authenticate
|
||||
wget --load-cookies /tmp/kaka --save-cookies /tmp/kaka --keep-session-cookies "${URL_LOGIN}" --post-file=/tmp/postdata -O /dev/null 2>/dev/null
|
||||
RET=$?
|
||||
|
||||
# Delete authentication data ... Bad idea to let that stick around
|
||||
rm /tmp/postdata
|
||||
|
||||
# Provide some details to the end user
|
||||
if [ ${RET} -ne 0 ]; then
|
||||
echo "Error: Unable to authenticate"
|
||||
exit 1
|
||||
fi
|
||||
echo "OK"
|
||||
fi
|
||||
|
||||
# Extract the URL for our release
|
||||
echo -n "Finding download URL for ${RELEASE}..."
|
||||
DOWNLOAD=$(wget --load-cookies /tmp/kaka --save-cookies /tmp/kaka --keep-session-cookies "${URL_DOWNLOAD}" -O - 2>/dev/null | grep ".deb" | grep "${RELEASE}" | sed "s/.*href=\"\([^\"]*\.deb\)\"[^>]*>${RELEASE}.*/\1/")
|
||||
echo -e "OK"
|
||||
|
||||
if [ "${DOWNLOAD}" == "" ]; then
|
||||
echo "Sorry, page layout must have changed, I'm unable to retrieve the URL needed for download"
|
||||
exit 3
|
||||
fi
|
||||
|
||||
FILENAME="$(basename 2>/dev/null ${DOWNLOAD})"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Failed to parse HTML, download cancelled."
|
||||
exit 3
|
||||
fi
|
||||
|
||||
if [ -f "${FILENAME}" -a "${FORCE}" != "yes" ]; then
|
||||
echo "File already exists, won't download."
|
||||
exit 2
|
||||
fi
|
||||
|
||||
echo -ne "Downloading release \"${FILENAME}\"..."
|
||||
ERROR=$(wget --load-cookies /tmp/kaka --save-cookies /tmp/kaka --keep-session-cookies "${DOWNLOAD}" 2>&1)
|
||||
CODE=$?
|
||||
if [ ${CODE} -ne 0 ]; then
|
||||
echo -e "\n !! Download failed with code ${CODE}, \"${ERROR}\""
|
||||
exit ${CODE}
|
||||
fi
|
||||
echo "OK"
|
||||
exit 0
|
Loading…
Add table
Add a link
Reference in a new issue