This commit is contained in:
deathbybandaid 2023-03-14 14:13:16 -04:00
parent 3924f1a4b4
commit 2317caf74e
6 changed files with 268 additions and 4 deletions

View File

@ -5,3 +5,4 @@ Credits:
ChuckPa: for the database management utility, as well as a function for easily getting host information
jlim0930: for token reading from Preferences.xml and some logic for cleaning up libraries and refreshing metadata
Werner Beroux: For getting token from api
dane22: claimpms script

246
claimpms.sh Normal file
View File

@ -0,0 +1,246 @@
#!/bin/sh
#************************************************************************
# Script to claim a Plex Media Server
# Will prompt for:
# * plex.tv username
# * plex.tv password
# * IP Address of your unclaimed Plex Media Server
#
# Made by dane22, a Plex community member
# Mark Walker/ZiGGiMoN, a Plex hobbyist
#
# Version: 1.1.0.0
#
# Home: https://github.com/ukdtom/ClaimIt
#************************************************************************
#************************************************************************
# Functions
#************************************************************************
function ComparePwd()
# Compare password entered
{
if [ $passvar == $passvar2 ]
then
return 0
else
echo "Password mismatch"
exit 1 # terminate and indicate error
fi
}
function ValidateIP()
# Check if IP has valid format
{
if [ "`echo $ippms | awk -F'.' 'NF==4 && $1 > 0 && $1<256 && $2<256 && $3<256 && $4<256 && !/\.\./'`" == "$ippms" ]
then
if echo "$ippms" | grep -Eq '(^127\.0\.0\.1)|(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)' >/dev/null; then
return 0
else
echo "The IP address entered is not in Private Address Space"
echo "Either '127.0.0.1' or an address in private address space is needed to claim a server"
echo "See: https://github.com/ukdtom/ClaimIt/wiki/IP-Address-requirement"
exit 1
fi
return 0
else
echo "IP is not valid"
exit 1 # terminate and indicate error
fi
}
function GetClaimToken()
#*****************************************
#* Get claim token from plex.tv
#* Needs the following params:
#* 1 Param: X-Plex-Token
#* 2 Param: X-Plex-Client-Identifier
#*****************************************
{
url="https://plex.tv/api/claim/token?X-Plex-Token=$1&X-Plex-Client-Identifier=ClaimIt-$2"
local response=$(curl -i -k -L -s $url)
# Grap the token
local claimtoken=$(printf %s "$response" | awk -F= '$1=="token"{print $2}' RS=' '| cut -d '"' -f 2)
# grap the return code
local http_status=$(echo "$response" | grep HTTP | awk '{print $2}')
if [ -z "$http_status" ];
then
exit 1
else
if [ $http_status -eq "200" ]
then
echo "$claimtoken"
exit 0
else
exit 1
fi
fi
}
function GetLoginToken()
#*****************************************
#* Get user auth token from plex.tv
#* Needs the following params:
#* 1 Param: UserName
#* 2 Param: Password
#* 3 Param: X-Plex-Client-Identifier
#*****************************************
{
url="https://plex.tv/api/v2/users/signin"
local response=$(curl -X POST -i -k -L -s $url --data-urlencode "login=$1" --data-urlencode "password=$2" --data-urlencode "X-Plex-Client-Identifier=ClaimIt-$3")
# Grap the token
local UserToken=$(printf %s "$response" | awk -F= '$1=="authToken"{print $2}' RS=' '| cut -d '"' -f 2)
# grap the return code
local http_status=$(echo "$response" | grep HTTP | awk '{print $2}')
if [ -z "$http_status" ];
then
exit 1
else
if [ "$http_status" -lt "202" ]
then
echo "$UserToken"
else
exit 1
fi
fi
}
function GetClientIdentifier()
# Get PMS machineIdentifier
{
url="http://$ippms:32400/identity"
content=$(curl -i -k -L -s $url)
local machineIdentifier=$(printf %s "$content" | awk -F= '$1=="machineIdentifier"{print $2}' RS=' '| cut -d '"' -f 2)
local http_status=$(echo "$content" | grep HTTP | awk '{print $2}')
if [ -z "$http_status" ];
then
exit 1
else
if [ $http_status -eq "200" ]
then
if [ -z "$machineIdentifier" ];
then
exit 1
else
echo "$machineIdentifier"
fi
else
exit 1
fi
fi
}
function Claimit()
#*****************************************
#* Claim a PMS Server
#* Needs the following params:
#* 1 Param: $ippms
#* 2 Param: $XPlexClaimtoken
#* 3 Param: $XPlexClientIdentifier
#* 4 Param: $UserToken
#*****************************************
{
url="http://$1:32400/myplex/claim?token=$2&X-Plex-Client-Identifier=ClaimIt-$3&X-Plex-Token=$4"
content=$(curl -X POST -i -k -L -s $url)
local http_status=$(echo "$content" | grep HTTP | awk '{print $2}')
if [ -z "$http_status" ];
then
echo "Fatal error happened"
echo "HTTP returned Status $http_status"
exit 1
else
if [ $http_status -eq "200" ];
then
echo "Claiming server ok $http_status"
echo ""
echo ""
echo "Please close your browser, reopen, and browse to http://$1:32400/web"
exit 0
else
echo "Fatal error happened"
echo "HTTP returned Status $http_status"
exit 1
fi
fi
}
#************************************************************************
#* Main
#************************************************************************
clear
echo "************************************************************************"
echo "* Script to claim a Plex Media Server"
echo "* Will prompt for"
echo "* * plex.tv username"
echo "* * plex.tv password"
echo "* * IP Address of your unclaimed Plex Media Server"
echo "*"
echo "*"
echo "* Made by dane22, a Plex community member"
echo "* And Mark Walker/ZiGGiMoN, a Plex hobbyist"
echo "*"
echo "* Version 1.1.0.0"
echo "*"
echo "* To see the manual, please visit https://github.com/ukdtom/ClaimIt/wiki"
echo "************************************************************************"
read -p 'plex.tv Username: ' uservar
echo ''
read -sp 'plex.tv Password: ' passvar
echo ''
read -sp 'plex.tv Password Repeated: ' passvar2
echo ''
read -p 'IP Address of PMS server: ' ippms
# Compare pwd entered
echo "Comparing entered passwords"
ComparePwd
echo "Comparing entered passwords ok"
echo "Validating IP address"
if ! CheckIPValidity=$(ValidateIP);
then
echo "******** ERROR ********"
echo "The IP address entered is not in Private Address Space"
echo "Either '127.0.0.1' or an address in private address space is needed to claim a server"
echo "See: https://github.com/ukdtom/ClaimIt/wiki/IP-Address-requirement"
exit 1
fi
echo "Getting PMS Server Identifier"
if ! XPlexClientIdentifier=$(GetClientIdentifier);
then
echo "******** ERROR ********"
echo "We failed to get the Plex Media Server ID"
echo "Please check server is up and running, as well as the IP address entered"
exit 1
fi
echo "Getting PMS Server Identifier ok"
# Get UserToken from plex.tv
echo "Getting User Token from plex.tv"
if ! UserToken=$(GetLoginToken "$uservar" "$passvar" "$XPlexClientIdentifier");
then
echo "******** ERROR ********"
echo "We failed to authenticate towards plex.tv"
echo "Please check username and password, as well as network access"
exit 1
fi
echo "Getting User Token from plex.tv ok"
# Get the Claim token
echo "Getting PMS Claim Token"
if ! XPlexClaimtoken=$(GetClaimToken "$UserToken" "$XPlexClientIdentifier");
then
echo "******** ERROR ********"
echo "We failed to get a claim token from plex.tv"
echo "Please check username and password, as well as network access"
exit 1
fi
echo "Getting PMS Claim Token ok"
# Claiming server
echo "Claiming server"
Claimit "$ippms" "$XPlexClaimtoken" "$XPlexClientIdentifier" "$UserToken"

View File

@ -32,7 +32,7 @@ update_from_api() {
curl -X PUT http://127.0.0.1:32400/library/clean/bundles?X-Plex-Token=${LOCAL_PLEX_TOKEN}
}
case "$2" in
case "$1" in
cli) update_from_cli;;
""|api) update_from_api;;
*) echo "'$1' is not a valid plex-tools freshen command";;

15
plex-sqlite.sh Normal file
View File

@ -0,0 +1,15 @@
#!/bin/bash
PLEX_SQLITE_RUN() {
# ChuckPa already wrote a great function for getting host info
source ./HostConfig.sh
echo "Getting Host Information"
HostConfig
PLEX_SQLITE ${@}
fi
}
PLEX_SQLITE_RUN

View File

@ -55,7 +55,7 @@ token_from_api() {
echo $X_PLEX_TOKEN
}
case "$2" in
case "$1" in
api) token_from_api;;
""|xml) token_from_Pref_XML;;
*) echo "'$1' is not a valid plex-tools token command";;

View File

@ -3,8 +3,10 @@
echo "Welcome to plex-tools wrapper utility!"
case "$1" in
token) source ./plex-token.sh;;
freshen) source ./plex-freshen.sh;;
token) source ./plex-token.sh ${@:2};;
freshen) source ./plex-freshen.sh ${@:2};;
claim) source ./claimpms.sh;;
sqlite) source ./plex-sqlite.sh;;
dbrepair) source ./DBRepair.sh stop auto start exit;;
start) source ./DBRepair.sh start exit;;
stop) source ./DBRepair.sh stop exit;;