1717import sys
1818import time
1919import urllib
20+ import urllib2
2021import uuid
2122
2223from distutils .spawn import find_executable
4748 "path_script" : None ,
4849 "servers_script" : None ,
4950 "servers" : {},
51+ "auth_token" : None ,
5052 "logging" : {
5153 "version" : 1 ,
5254 "disable_existing_loggers" : False ,
9193SSH_HOST_RE = re .compile (r'ssh +([^@]+)@([^ ]+)' )
9294
9395__author__ = "Weston Nielson <wnielson@github>"
94- __version__ = "0.3.2 "
96+ __version__ = "0.3.3 "
9597
9698
9799def get_config ():
@@ -112,6 +114,31 @@ def save_config(d):
112114 return False
113115
114116
117+ def get_auth_token ():
118+ url = "https://plex.tv/users/sign_in.json"
119+ payload = urllib .urlencode ({
120+ "user[login]" : raw_input ("Plex Username: " ),
121+ "user[password]" : getpass .getpass ("Plex Password: " ),
122+ "X-Plex-Client-Identifier" : "Plex-Remote-Transcoder-v%s" % __version__ ,
123+ "X-Plex-Product" : "Plex-Remote-Transcoder" ,
124+ "X-Plex-Version" : __version__
125+ })
126+
127+ req = urllib2 .Request (url , payload )
128+ try :
129+ res = urllib2 .urlopen (req )
130+ except :
131+ print "Error getting auth token...invalid credentials?"
132+ return False
133+
134+ if res .code not in [200 , 201 ]:
135+ print "Invalid credentials"
136+ return False
137+
138+ data = json .load (res )
139+ return data ['user' ]['authToken' ]
140+
141+
115142def get_system_load_local ():
116143 """
117144 Returns a list of float representing the percentage load of this machine.
@@ -352,8 +379,12 @@ def et_get(node, attrib, default=None):
352379 return default
353380
354381
355- def get_plex_sessions ():
356- res = urllib .urlopen ('http://localhost:32400/status/sessions' )
382+ def get_plex_sessions (auth_token = None ):
383+ url = 'http://localhost:32400/status/sessions'
384+ if auth_token :
385+ url += "?X-Plex-Token=%s" % auth_token
386+
387+ res = urllib .urlopen (url )
357388 dom = ET .parse (res )
358389 sessions = {}
359390 for node in dom .findall ('.//Video' ):
@@ -367,8 +398,16 @@ def get_plex_sessions():
367398def get_sessions ():
368399 sessions = {}
369400
370- plex_sessions = get_plex_sessions ()
401+ config = get_config ()
402+ if config .get ('auth_token' ) == None :
403+ config ['auth_token' ] = get_auth_token ()
404+ if not config ['auth_token' ]:
405+ return sessions
406+ save_config (config )
407+
408+ sessions = {}
371409
410+ plex_sessions = get_plex_sessions (auth_token = config ['auth_token' ])
372411 for proc in psutil .process_iter ():
373412 parent_name = None
374413 try :
0 commit comments