def choose_managed_user(account: MyPlexAccount): users = [u.title for u in account.users()] if not users: return None click.echo(success("Managed user(s) found:")) users = sorted(users) users.insert(0, account.username) user = inquirer.select( message="Select the user you would like to use:", choices=users, default=None, style=style, qmark="", pointer=">", ).execute() if user == account.username: return None # Sanity check, even the user can't input invalid user user_account = account.user(user) if user_account: return user return None
def choose_managed_user(account: MyPlexAccount): users = [u.title for u in account.users() if u.friend] if not users: return None click.echo(success("Managed user(s) found:")) users = sorted(users) for user in users: click.echo(f"- {user}") if not click.confirm(PROMPT_MANAGED_USER): return None # choice = prompt_choice(users) user = click.prompt( title("Please select:"), type=Choice(users), show_default=True, ) # Sanity check, even the user can't input invalid user user_account = account.user(user) if user_account: return user return None
def main(): config = load_config() account = MyPlexAccount(config.get('DEFAULT', 'username'), config.get('DEFAULT', 'password')) admin_server = account.resource(config.get('DEFAULT', 'server name')).connect() user = account.user(config.get('DEFAULT', 'user')) # Get the token for the machine. token = user.get_token(admin_server.machineIdentifier) # Get the user server. We access the base URL by requesting a URL for a # blank key. user_server = PlexServer(admin_server.url(''), token=token) albums = {a.key: a for a in user_server.library.section('Music').albums()} playlist = user_server.playlist(config.get('DEFAULT', 'playlist name')) items = playlist.items() sort_structure = [] for track in items: album = albums[track.parentKey] key = get_track_sort_key(track, album) sort_structure.append((key, track)) sort_structure.sort(key=lambda item: item[0]) items = [item[1] for item in sort_structure] for item in items: playlist.removeItem(item) playlist.addItems(items)
def authenticate() -> PlexServer: method = plex_settings["authentication_method"].lower() try: home_user_sync = plex_settings["home_user_sync"].lower() home_username = plex_settings["home_username"] home_server_base_url = plex_settings["home_server_base_url"] except Exception: home_user_sync = "false" home_username = "" home_server_base_url = "" try: session = Session() session.mount("https://", HostNameIgnoringAdapter()) # Direct connection if method == "direct": base_url = plex_settings["base_url"] token = plex_settings["token"] plex = PlexServer(base_url, token, session) # Myplex connection elif method == "myplex": plex_server = plex_settings["server"] plex_user = plex_settings["myplex_user"] plex_password = plex_settings["myplex_password"] if home_user_sync == "true": if home_username == "": logger.error( "Home authentication cancelled as home_username is empty" ) sys.exit(1) logger.warning( f"Authenticating as admin for MyPlex home user: {home_username}" ) plex_account = MyPlexAccount(plex_user, plex_password) plex_server_home = PlexServer(home_server_base_url, plex_account.authenticationToken, session) logger.warning("Retrieving home user information") plex_user_account = plex_account.user(home_username) logger.warning("Retrieving user token for MyPlex home user") plex_user_token = plex_user_account.get_token( plex_server_home.machineIdentifier) logger.warning("Retrieved user token for MyPlex home user") plex = PlexServer(home_server_base_url, plex_user_token, session) logger.warning( "Successfully authenticated for MyPlex home user") else: account = MyPlexAccount(plex_user, plex_password, session=session) plex = account.resource(plex_server).connect() else: logger.critical( "[PLEX] Failed to authenticate due to invalid settings or authentication info, exiting..." ) sys.exit(1) return plex except Exception: logger.exception("Unable to authenticate to Plex Media Server") sys.exit(1)
def authenticate(): method = plex_settings['authentication_method'].lower() try: home_user_sync = plex_settings['home_user_sync'].lower() home_username = plex_settings['home_username'] home_server_base_url = plex_settings['home_server_base_url'] except Exception as e: home_user_sync = 'false' home_username = '' home_server_base_url = '' try: # Direct connection if method == 'direct': base_url = plex_settings['base_url'] token = plex_settings['token'] plex = PlexServer(base_url, token) # Myplex connection elif method == 'myplex': plex_server = plex_settings['server'] plex_user = plex_settings['myplex_user'] plex_password = plex_settings['myplex_password'] if home_user_sync == 'true': if home_username == '': logger.error( 'Home authentication cancelled as certain home_user settings are invalid' ) return None try: logger.warning( 'Authenticating as admin for MyPlex home user: %s' % (home_username)) plex_account = MyPlexAccount(plex_user, plex_password) plex_server_home = PlexServer( home_server_base_url, plex_account.authenticationToken) logger.warning('Retrieving home user information') plex_user_account = plex_account.user(home_username) logger.warning( 'Retrieving user token for MyPlex home user') plex_user_token = plex_user_account.get_token( plex_server_home.machineIdentifier) logger.warning('Retrieved user token for MyPlex home user') plex = PlexServer(home_server_base_url, plex_user_token) logger.warning( 'Successfully authenticated for MyPlex home user') except Exception as e: logger.error( 'Error occured during Plex Home user lookup or server authentication: %s' % (e)) else: account = MyPlexAccount(plex_user, plex_password) plex = account.resource(plex_server).connect() else: logger.critical( '[PLEX] Failed to authenticate due to invalid settings or authentication info, exiting...' ) sys.exit() return plex except Exception as e: logger.error( 'Unable to authenticate to Plex Media Server, traceback: %s' % (e)) return None
def get_env_data(): trakt.core.CONFIG_PATH = pytrakt_file plex_needed = util.input_yesno( "-- Plex --\nAre you logged into this server with a Plex account?") if plex_needed: username = input("Please enter your Plex username: "******"Please enter your Plex password: "******"Now enter the server name: ") account = MyPlexAccount(username, password) plex = account.resource( servername).connect() # returns a PlexServer instance token = plex._token users = account.users() if users: print("Managed user(s) found:") for user in users: if user.friend is True: print(user.title) print("If you want to use a managed user enter its username,") name = input( "if you want to use your main account just press enter: ") while name: try: useraccount = account.user(name) except: if name != "_wrong": print("Unknown username!") name = input( "Please enter a managed username (or just press enter to use your main account): " ) if not name: print("Ok, continuing with your account " + username) break continue try: token = account.user(name).get_token( plex.machineIdentifier) username = name break except: print("Impossible to find the managed user \'" + name + "\' on this server!") name = "_wrong" with open(env_file, 'w') as txt: txt.write("PLEX_USERNAME="******"\n") txt.write("PLEX_TOKEN=" + token + "\n") txt.write("PLEX_BASEURL=" + plex._baseurl + "\n") txt.write("PLEX_FALLBACKURL=http://localhost:32400\n") print("Plex token and baseurl for {} have been added in .env file:". format(username)) print("PLEX_TOKEN={}".format(token)) print("PLEX_BASEURL={}".format(plex._baseurl)) else: with open(env_file, "w") as txt: txt.write("PLEX_USERNAME=-\n") txt.write("PLEX_TOKEN=-\n") txt.write("PLEX_BASEURL=http://localhost:32400\n") trakt.core.AUTH_METHOD = trakt.core.DEVICE_AUTH print("-- Trakt --") client_id, client_secret = trakt.core._get_client_info() trakt.init(client_id=client_id, client_secret=client_secret, store=True) trakt_user = trakt.users.User('me') with open(env_file, "a") as txt: txt.write("TRAKT_USERNAME="******"\n") print( "You are now logged into Trakt. Your Trakt credentials have been added in .env and .pytrakt.json files." ) print("You can enjoy sync! \nCheck config.json to adjust settings.") print( "If you want to change Plex or Trakt account, just edit or remove .env and .pytrakt.json files." )
def get_env_data(): trakt.core.CONFIG_PATH = pytrakt_file print("") #plex_needed = util.input_yesno("Are you logged into hawke.one with your Plex account? (almost certainly yes)") plex_needed = 1 if plex_needed: username = input(" Please enter your Plex username: "******" Please enter your Plex password: "******"\nNext we will need your server name:\n\n The server name is displayed top left (under the library title) when viewing a library on that server:\n https://app.plex.tv/desktop \n\n For Hawke.one your server name will most likely be one of the following:" ) print(" 1) plex1.hawke.one (usually for Golden Company)") print(" 2) plex2.hawke.one (usually for Nightswatch)") print(" 3) plex3.hawke.one (usually for Kings Guard") print(" 4) plex4.hawke.one (usually for Nightswatch)") servername = input( "\n Please select you server (1-4), or enter your custom server name: " ) if servername == "1": servername = "plex1.hawke.one" if servername == "2": servername = "plex2.hawke.one" if servername == "3": servername = "plex3.hawke.one" if servername == "4": servername = "plex4.hawke.one" print(" Verifying server...") account = MyPlexAccount(username, password) plex = account.resource( servername).connect() # returns a PlexServer instance token = plex._token users = account.users() if users: print("\n The following managed Plex user(s) were found:") for user in users: if user.friend is True: print(" * " + user.title) print(" ") name = input( " To use your " + username + " account, press enter (else enter the name of a managed user): " ) while name: try: useraccount = account.user(name) except: if name != "_wrong": print("Unknown username!") name = input( "Please enter a managed username (or just press enter to use your main account): " ) if not name: print("Ok, continuing with your account " + username) break continue try: token = account.user(name).get_token( plex.machineIdentifier) username = name break except: print(" Impossible to find the managed user \'" + name + "\' on this server!") name = "_wrong" CONFIG["PLEX_USERNAME"] = username CONFIG["PLEX_TOKEN"] = token CONFIG["PLEX_BASEURL"] = plex._baseurl CONFIG["PLEX_FALLBACKURL"] = "http://localhost:32400" print(" User {} configured successfully.".format(username)) # print("PLEX_TOKEN={}".format(token)) # print("PLEX_BASEURL={}".format(plex._baseurl)) else: CONFIG["PLEX_USERNAME"] = "******" CONFIG["PLEX_TOKEN"] = "-" CONFIG["PLEX_BASEURL"] = "http://localhost:32400" trakt.core.AUTH_METHOD = trakt.core.DEVICE_AUTH print("\n\n") print("Now we'll setup the Trakt part of things:") print(" ") print( " Create the required Trakt client ID and secret by completing the following steps:" ) if platform.system() == "Windows": print( " 1 - Press enter below to open http://trakt.tv/oauth/applications" ) print(" 2 - Login to your Trakt account") print(" 3 - Press the NEW APPLICATION button") print( " 4 - Set the NAME field = hawke.one (or something else meaningful)" ) import pyperclip pyperclip.copy("urn:ietf:wg:oauth:2.0:oob") print( " 5 - Set the REDIRECT URL field = urn:ietf:wg:oauth:2.0:oob (This has been copied to your clipboard for you)" ) input( "\n Press Enter to open http://trakt.tv/oauth/applications and complete steps 1-6: " ) webbrowser.open('http://trakt.tv/oauth/applications') else: print( " 1 - Open http://trakt.tv/oauth/applications on any computer" ) print(" 2 - Login to your Trakt account") print(" 3 - Press the NEW APPLICATION button") print(" 4 - Set the NAME field = hawke.one") print( " 5 - Set the REDIRECT URL field = urn:ietf:wg:oauth:2.0:oob") print(" 6 - Press the SAVE APP button") print( "\n Once steps 1-6 are completed, please proceed to steps 7-8 below:\n" ) #client_id, client_secret = trakt.core._get_client_info() client_id = input(" 7 - Copy and paste the displayed Client ID: ") client_secret = input( " 8 - Copy and paste the displayed Client secret: ") if platform.system() == "Windows": input( "\n We will now generate a user code and open https://trakt.tv/activate for you to authenticate the app.\n Press Enter to continue..." ) webbrowser.open('https://trakt.tv/activate') print("\n") trakt.init(client_id=client_id, client_secret=client_secret, store=True) trakt_user = trakt.users.User('me') CONFIG["TRAKT_USERNAME"] = trakt_user.username print("\n\n") print("You're all done!\n") print( "Plex / Trakt accounts may be altered by re-running setup, or deleting the .env and .pytrakt.json files." ) print("Expert settings may also be altered within the config.json file.") print(" ") print(" ") CONFIG.save()
password = input("Please enter your Plex password: "******"Now enter the server name: ") account = MyPlexAccount(username, password) plex = account.resource(servername).connect() # returns a PlexServer instance token = plex._token users = account.users() if users: print("Managed user(s) found:") for user in users: if user.friend is True: print(user.title) print("If you want to use a managed user enter its username,") name = input("if you want to use your main account just press enter: ") while name: try: useraccount = account.user(name) except: if name != "_wrong": print("Unknown username!") name = input("Please enter a managed username (or just press enter to use your main account): ") if not name: print("Ok, continuing with your account " + username) break continue try: token = account.user(name).get_token(plex.machineIdentifier) username = name break except: print("Impossible to find the managed user \'"+name+"\' on this server!") name = "_wrong"
print('Finished with photos...') sections.append( dict(name='Photos', type='photo', location='/data/Photos', agent='com.plexapp.agents.none', scanner='Plex Photo Scanner', expected_media_count=has_photos)) if sections: print('Ok, got the media, it`s time to create a library for you!') for section in sections: create_section(server, section) import logging logging.basicConfig(level=logging.INFO) shared_username = os.environ.get('SHARED_USERNAME', 'PKKid') try: user = account.user(shared_username) account.updateFriend(user, server) print('The server was shared with user "%s"' % shared_username) except NotFound: pass print('Base URL is %s' % server.url('', False)) if opts.show_token: print('Auth token is %s' % account.authenticationToken) print('Server %s is ready to use!' % opts.server_name)
def authenticate(): method = plex_settings["authentication_method"].lower() try: home_user_sync = plex_settings["home_user_sync"].lower() home_username = plex_settings["home_username"] home_server_base_url = plex_settings["home_server_base_url"] except Exception: home_user_sync = "false" home_username = "" home_server_base_url = "" try: # Direct connection if method == "direct": base_url = plex_settings["base_url"] token = plex_settings["token"] plex = PlexServer(base_url, token) # Myplex connection elif method == "myplex": plex_server = plex_settings["server"] plex_user = plex_settings["myplex_user"] plex_password = plex_settings["myplex_password"] if home_user_sync == "true": if home_username == "": logger.error( "Home authentication cancelled as certain home_user settings are invalid" ) return None try: logger.warning( "Authenticating as admin for MyPlex home user: %s" % (home_username) ) plex_account = MyPlexAccount(plex_user, plex_password) plex_server_home = PlexServer( home_server_base_url, plex_account.authenticationToken ) logger.warning("Retrieving home user information") plex_user_account = plex_account.user(home_username) logger.warning("Retrieving user token for MyPlex home user") plex_user_token = plex_user_account.get_token( plex_server_home.machineIdentifier ) logger.warning("Retrieved user token for MyPlex home user") plex = PlexServer(home_server_base_url, plex_user_token) logger.warning("Successfully authenticated for MyPlex home user") except Exception as e: logger.error( "Error occured during Plex Home user lookup or server authentication: %s" % (e) ) else: account = MyPlexAccount(plex_user, plex_password) plex = account.resource(plex_server).connect() else: logger.critical( "[PLEX] Failed to authenticate due to invalid settings or authentication info, exiting..." ) sys.exit() return plex except Exception as e: logger.error("Unable to authenticate to Plex Media Server, traceback: %s" % (e)) return None