From bf20f84224dc9ecb2f8f7fcbdb8806efdf7642e1 Mon Sep 17 00:00:00 2001 From: samwiseg0 Date: Tue, 1 Jan 2019 23:41:23 -0500 Subject: [PATCH] Better error checking for failback_ip --- varken/helpers.py | 7 +++++++ varken/iniparser.py | 9 ++++++++- varken/tautulli.py | 11 +++++++++-- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/varken/helpers.py b/varken/helpers.py index 648eb5a..784a5fa 100644 --- a/varken/helpers.py +++ b/varken/helpers.py @@ -11,6 +11,7 @@ from json.decoder import JSONDecodeError from os.path import abspath, join, basename, isdir from urllib3.exceptions import InsecureRequestWarning from requests.exceptions import InvalidSchema, SSLError, ConnectionError +from ipaddress import IPv4Address logger = getLogger() @@ -83,6 +84,12 @@ def hashit(string): return hashed +def rfc1918_ip_check(ip): + rfc1918_ip = IPv4Address(ip).is_private + + return rfc1918_ip + + def connection_handler(session, request, verify): s = session r = request diff --git a/varken/iniparser.py b/varken/iniparser.py index d97d3cf..08020fe 100644 --- a/varken/iniparser.py +++ b/varken/iniparser.py @@ -4,7 +4,7 @@ from os.path import join, exists from re import match, compile, IGNORECASE from configparser import ConfigParser, NoOptionError, NoSectionError -from varken.helpers import clean_sid_check +from varken.helpers import clean_sid_check, rfc1918_ip_check from varken.structures import SickChillServer from varken.varkenlogger import BlacklistFilter from varken.structures import SonarrServer, RadarrServer, OmbiServer, TautulliServer, InfluxServer, CiscoASAFirewall @@ -217,6 +217,13 @@ class INIParser(object): get_stats_run_seconds = self.config.getint(section, 'get_stats_run_seconds') + invalid_wan_ip = rfc1918_ip_check(fallback_ip) + + if invalid_wan_ip: + self.logger.error('Invalid failback_ip [%s] set for %s-%s!', fallback_ip, service, server_id) + exit(1) + + server = TautulliServer(id=server_id, url=scheme + url, api_key=apikey, verify_ssl=verify_ssl, get_activity=get_activity, fallback_ip=fallback_ip, get_stats=get_stats, diff --git a/varken/tautulli.py b/varken/tautulli.py index 336bba9..7d5ec78 100644 --- a/varken/tautulli.py +++ b/varken/tautulli.py @@ -1,3 +1,4 @@ +from os import _exit from logging import getLogger from requests import Session, Request from datetime import datetime, timezone @@ -45,13 +46,19 @@ class TautulliAPI(object): getattr(session, 'ip_address_public') except AttributeError: self.logger.error('Public IP attribute missing!!! Do you have an old version of Tautulli (v1)?') - exit(1) + _exit(1) try: geodata = self.geoiphandler.lookup(session.ip_address_public) except (ValueError, AddressNotFoundError): if self.server.fallback_ip: - geodata = self.geoiphandler.lookup(self.server.fallback_ip) + # Try the failback ip in the config file + try: + geodata = self.geoiphandler.lookup(self.server.fallback_ip) + except AddressNotFoundError as e: + self.logger.error('%s', e) + _exit(1) + else: my_ip = self.session.get('http://ip.42.pl/raw').text geodata = self.geoiphandler.lookup(my_ip)