#!/bin/bash token_from_Pref_XML() { # ChuckPa already wrote a great function for getting host info source ./HostConfig.sh if [[ "silent" == *"$2"* ]]; then : else echo "Getting Host Information" fi HostConfig PLEX_PREFERENCES_XML="$AppSuppDir/Plex Media Server/Preferences.xml" if [[ -f "$PLEX_PREFERENCES_XML" ]]; then if [[ "silent" == *"$2"* ]]; then : else echo "Plex Preferences.xml found: $PLEX_PREFERENCES_XML" fi # get token LOCAL_PLEX_TOKEN=`cat "${PLEX_PREFERENCES_XML}" | sed -e 's;^.* PlexOnlineToken=";;' | sed -e 's;".*$;;' | tail -1` if [[ "silent" == *"$2"* ]]; then echo "$LOCAL_PLEX_TOKEN" else echo "Local Token found: $LOCAL_PLEX_TOKEN" fi else echo "Plex Preferences.xml not found" exit fi } token_from_api() { while [ -z "$PLEX_LOGIN" ]; do >&2 echo -n 'Your Plex login (e-mail or username): ' read PLEX_LOGIN done while [ -z "$PLEX_PASSWORD" ]; do >&2 echo -n 'Your Plex password: ' read PLEX_PASSWORD done >&2 echo 'Retrieving a X-Plex-Token using Plex login/password...' curl --silent -qu "${PLEX_LOGIN}":"${PLEX_PASSWORD}" 'https://plex.tv/users/sign_in.xml' \ -X POST -H 'X-Plex-Device-Name: PlexMediaServer' \ -H 'X-Plex-Provides: server' \ -H 'X-Plex-Version: 0.9' \ -H 'X-Plex-Platform-Version: 0.9' \ -H 'X-Plex-Platform: xcid' \ -H 'X-Plex-Product: Plex Media Server'\ -H 'X-Plex-Device: Linux'\ -H 'X-Plex-Client-Identifier: XXXX' --compressed >/tmp/plex_sign_in >> /dev/null 2>&1 X_PLEX_TOKEN=$(sed -n 's/.*\(.*\)<\/authentication-token>.*/\1/p' /tmp/plex_sign_in) if [ -z "$X_PLEX_TOKEN" ]; then cat /tmp/plex_sign_in rm -f /tmp/plex_sign_in >&2 echo 'Failed to retrieve the X-Plex-Token.' exit 1 fi rm -f /tmp/plex_sign_in >&2 echo "Your X_PLEX_TOKEN:" echo $X_PLEX_TOKEN } case "$2" in api) token_from_api;; ""|xml|silent) token_from_Pref_XML;; *) echo "'$2' is not a valid plex-tools token command";; esac