import os import json import logging import requests import re from ipaddress import ip_address # Open the config file and make it accessible via "cfg" with open("conf.json", "r") as file: cfg = json.load(file) # Configure logging logging.basicConfig(format='%(asctime)s %(levelname)s %(message)s') log = logging.getLogger() try: if cfg["loglevel"] == "debug": log.setLevel(logging.DEBUG) else: log.setLevel(logging.INFO) except KeyError: log.setLevel(logging.INFO) log.debug("Logger was initialized") ## Functions def checkIfIP(host): try: ip_address(host) log.debug(str(host) + " is an IP address") return True except: log.debug(host + " is not an IP address.") return False def loginToNPM(apiurl, user, pw): # To retrieve NPM's API session token # Returns the token used for API requests. session = requests.Session() url = apiurl + "/api/tokens" loginreq = session.post(url,data={"identity": user, "secret": pw}) if loginreq.status_code == 200: # Check if the API accepted our creds. log.info("Logged into Nginx Proxy Manager") response = loginreq.json() return response['token'] elif loginreq.status_code == 401: log.error("Your Nginx Proxy Manager credentials are incorrect. Please verify you put in the right ones!") exit() else: log.error("Nginx Proxy Manager: " + response['error']['message']) return None def loginToPihole(apiurl, phpassword): # For whatever reason, Pi-hole's web CSRF token is in a hidden
element returned by the login.php in the homepage right after you login. # This took *WAY* too long to figure out. This should be in the header for ease-of-use. session = requests.Session() url = apiurl + "/login.php" loginrq = session.post(url,data={"pw": phpassword}) phpsessid = (str(loginrq.cookies.get_dict()["PHPSESSID"])) regex = r'(