From 05aa90a1cb7a9d357a5c742164f852c8e9757299 Mon Sep 17 00:00:00 2001 From: iRaven4522 Date: Thu, 19 Sep 2024 02:12:15 -0500 Subject: [PATCH] finally got this working!!!! --- conf-template.json | 15 ++-- main.py | 171 +++++++++++++++++++++++++++++++++------------ 2 files changed, 136 insertions(+), 50 deletions(-) diff --git a/conf-template.json b/conf-template.json index 16fbbf2..70c3880 100644 --- a/conf-template.json +++ b/conf-template.json @@ -1,7 +1,10 @@ { - "loglevel": "debug", - "npmapi": "https://npm.corp.iraven.net", - "npmkey": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhcGkiLCJzY29wZSI6WyJ1c2VyIl0sImF0dHJzIjp7ImlkIjoxfSwiZXhwaXJlc0luIjoiMWQiLCJqdGkiOiJaT0IrNmV6WkRVVHR0RW9SIiwiaWF0IjoxNzIyODMyMjU2LCJleHAiOjE3MjI5MTg2NTZ9.utpeUVqOWSq1N2qXTsjjMjmvIenTFkLvQTsYPSFMAwK7v2U8XJgDhuQaqaas0Tv1tVpAuVK8LpJC7WQUPE1TkOzQormp5tb7EqGvQy4jRQRZ5q6xkUuE_KW2ME5M4rboy1cjANNiWeRMhCpkWBg4JreFYd0-vWZIQf-3LnkXux-rcaWyRvDsWoB3xkNXvQLnuTIREAAH3CuGkFpbsJD8AjMN8ciYofWP8ZaE9zzbPDMFQ84mXRhpmmQVgorWC9JlGEzz_-AYUrq-bB5v03tHeqVfWvFtmVlfUpObUlDIDQr2MBGXHErIPa8d9amqqZLHSbo7D96QsFMrfavLn9TBRg", - "piholeapi": "https://pihole.corp.iraven.net", - "piholekey": "balls" -} + "loglevel": "info", + "npmdnshostname": "", + "npmemail": "", + "npmpassword": "", + "removedead": "True/False", + "adddisabled": "True/False", + "piholeurl": "", + "piholepass": "" +} \ No newline at end of file diff --git a/main.py b/main.py index c33add0..f87c93c 100644 --- a/main.py +++ b/main.py @@ -2,6 +2,7 @@ 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" @@ -25,88 +26,170 @@ log.debug("Logger was initialized") def checkIfIP(host): try: ip_address(host) - logging.debug(str(host) + " is an IP address") + log.debug(str(host) + " is an IP address") return True except: - logging.debug(host + " is not an IP address.") + log.debug(host + " is not an IP address.") return False -def getNPMHosts(apiurl,apikey,type): +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'(