247 lines
7.1 KiB
Bash
247 lines
7.1 KiB
Bash
#!/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"
|