-
-
Save Rihcus/4a217e0092e1fa34299e395222759165 to your computer and use it in GitHub Desktop.
Run plex through ngrok with SSL via duckdns
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/usr/bin/python3 | |
| from plexapi.myplex import MyPlexAccount | |
| import sys | |
| import json | |
| import requests | |
| import time | |
| import socket | |
| # please make sure to install PlexAPI via pip, "pip install PlexAPI" | |
| # makesure to update the duckdns url with token and domainname | |
| # don't forget to add ur username and pasword | |
| # need time for ngrok to start up before requesting data | |
| print("Waiting 5 seconds for ngrok to start up") | |
| time.sleep(5) | |
| def get_ngrok_port(): | |
| url = "http://localhost:4040/api/tunnels" | |
| res = requests.get(url) | |
| res_unicode = res.content.decode("utf-8") | |
| res_json = json.loads(res_unicode) | |
| for i in res_json["tunnels"]: | |
| if i['proto'] == 'tcp': | |
| return i['public_url'].split(':')[-1] | |
| def get_ngrok_url(): | |
| url = "http://localhost:4040/api/tunnels" | |
| res = requests.get(url) | |
| res_unicode = res.content.decode("utf-8") | |
| res_json = json.loads(res_unicode) | |
| for i in res_json["tunnels"]: | |
| if i['proto'] == 'tcp': | |
| return i['public_url'].split(':')[-2] | |
| # get and clean up ngrok tcp url for later (this code is messy) :( | |
| ngrokurl=get_ngrok_url() | |
| ngrokurlclean= ngrokurl.split('//')[-1] | |
| print("ngrok base url = " + ngrokurlclean) | |
| # get ngrok url ip | |
| ngrokip = socket.gethostbyname(ngrokurlclean) | |
| print("ngrok url and ip no port = " + ngrokip) | |
| #update duckdns with ngrok ip make sure to change [] or copy url from duckdns install guide | |
| duckdnsupdateurl="https://www.duckdns.org/update?domains=[yourname]&token=[yourapitoken]&ip=" + ngrokip | |
| res = requests.get(duckdnsupdateurl) | |
| print(res.status_code) | |
| def build_url_list(): | |
| NGROK_PORT = get_ngrok_port() | |
| NGROK_BASES = ["https://[yourname].duckdns.org:"] | |
| NGROK_URLS = map(lambda base: base + NGROK_PORT, NGROK_BASES) | |
| CUSTOM_URL = "" | |
| for url in NGROK_URLS: | |
| CUSTOM_URL += url + ", " | |
| CUSTOM_URL = CUSTOM_URL[:-2] | |
| return CUSTOM_URL | |
| # Load user defined config" | |
| PLEX_USER = "email" | |
| PLEX_PWORD = "password" | |
| PLEX_SERVER = "plex server name" | |
| # stores plex user login info into a variable | |
| account = MyPlexAccount(PLEX_USER, PLEX_PWORD) | |
| plex = account.resource(PLEX_SERVER).connect() # returns a PlexServer instance | |
| # displays current plex custom url settings. Not needed but nice to see | |
| print("Old settings: " + plex.settings.customConnections) | |
| # sets plex's "Custom server access URLs" with one from Ngrok | |
| customUrl = plex.settings.get('customConnections') | |
| customUrl.set(build_url_list()) | |
| plex.settings.save() | |
| # displays new custom plex url from Ngrok. Not needed but nice to see | |
| account = MyPlexAccount(PLEX_USER, PLEX_PWORD) | |
| plex = account.resource(PLEX_SERVER).connect() # returns a PlexServer instance | |
| print("New settings: " + plex.settings.customConnections) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I've created one. Have a look: https://github.com/origamiofficial/docker-ngrok-plex