Merge pull request #164 from mrworf/snown-stored-token-auth

Use stored token from Plex
This commit is contained in:
Henric Andersson 2017-02-15 08:32:05 -08:00 committed by GitHub
commit 4c5669e35f

View file

@ -200,6 +200,23 @@ keypair() {
echo "${key}=${val}"
}
getPlexServerToken() {
if [ -f /etc/default/plexmediaserver ]; then
source /etc/default/plexmediaserver
fi
# List possible locations to find Plex Server preference file
local VALIDPATHS=("${PLEX_MEDIA_SERVER_APPLICATION_SUPPORT_DIR}" "/var/lib/plexmediaserver/Library/Application Support/" "${HOME}/Library/Application Support/")
local PREFFILE="/Plex Media Server/Preferences.xml"
for I in "${VALIDPATHS[@]}" ; do
if [ ! -z "${I}" -a -f "${I}${PREFFILE}" ]; then
sed -n 's/.*PlexOnlineToken="\([[:alnum:]]*\).*".*/\1/p' "${I}${PREFFILE}" 2>/dev/null || error "Do not have permission to read token from Plex Server preference file"
exit 0
fi
done
}
# Setup an exit handler so we cleanup
cleanup() {
for F in "${FILE_RAW}" "${FILE_FAILCAUSE}" "${FILE_POSTDATA}" "${FILE_KAKA}" "${FILE_SHA}" "${FILE_LOCAL}" "${FILE_REMOTE}" "${FILE_WGETLOG}"; do
@ -371,18 +388,6 @@ if [ "${AUTOUPDATE}" = "yes" ]; then
popd &>/dev/null
fi
# Sanity check
if [ -z "${EMAIL}" -o -z "${PASS}" ] && [ "${PUBLIC}" = "no" ]; then
error "Need username & password to download PlexPass version. Otherwise run with -p to download public version."
exit 1
elif [ ! -z "${EMAIL}" ] && [[ "$EMAIL" == *"@"* ]] && [[ "$EMAIL" != *"@"*"."* ]]; then
error "EMAIL field must contain a valid email address"
exit 1
elif [ ! -z "${EMAIL}" -a ! -z "${PASS}" -a "${PUBLIC}" = "yes" ]; then
warn "You have defined email and password but PUBLIC is set to yes, this will not download the PlexPass version"
fi
if [ "${AUTOINSTALL}" = "yes" -o "${AUTOSTART}" = "yes" ] && [ ${EUID} -ne 0 ]; then
error "You need to be root to use AUTOINSTALL/AUTOSTART option."
fi
@ -446,8 +451,6 @@ if [ "${CHECKUPDATE}" = "yes" -a "${AUTOUPDATE}" = "no" ]; then
rm "${FILE_REMOTE}" 2>/dev/null >/dev/null
fi
# Fields we need to submit for login to work
#
# Field Value
@ -459,11 +462,28 @@ fi
# commit Sign in
if [ "${PUBLIC}" = "no" ]; then
info "Authenticating with plex.tv"
# Clean old session
rm "${FILE_KAKA}" 2>/dev/null
# Try to obtain token from Plex Server Installation
TOKEN=
if [ -z "${EMAIL}" -o -z "${PASS}" ]; then
TOKEN=$(getPlexServerToken)
fi
if [ -z "${TOKEN}" ]; then
# If no token, go through regular process
if [ -z "${EMAIL}" -o -z "${PASS}" ]; then
error "Need username & password to download PlexPass version. Otherwise run with -p to download public version."
exit 1
elif [ ! -z "${EMAIL}" ] && [[ "$EMAIL" == *"@"* ]] && [[ "$EMAIL" != *"@"*"."* ]]; then
error "EMAIL field must contain a valid email address"
exit 1
elif [ ! -z "${EMAIL}" -a ! -z "${PASS}" -a "${PUBLIC}" = "yes" ]; then
warn "You have defined email and password but PUBLIC is set to yes, this will not download the PlexPass version"
fi
info "Authenticating with plex.tv using email and password"
# Build post data
echo -ne >"${FILE_POSTDATA}" "$(keypair "user[login]" "${EMAIL}" )"
echo -ne >>"${FILE_POSTDATA}" "&$(keypair "user[password]" "${PASS}" )"
@ -494,7 +514,9 @@ if [ "${PUBLIC}" = "no" ]; then
# Remove this, since it contains more information than we should leave hanging around
rm "${FILE_FAILCAUSE}"
else
info "Using Plex Server credentials to authenticate"
fi
elif [ "$PUBLIC" != "no" ]; then
# It's a public version, so change URL and make doubly sure that cookies are empty
rm 2>/dev/null >/dev/null "${FILE_KAKA}"