From 0bd9684348d9bc9d6a0f95691ad6ce3e4f2f47ef Mon Sep 17 00:00:00 2001 From: Jean-Claude Graf Date: Wed, 22 Apr 2020 19:32:43 +0200 Subject: [PATCH] NEW: Ip change detector --- IpManager.py | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 IpManager.py diff --git a/IpManager.py b/IpManager.py new file mode 100644 index 0000000..4588aeb --- /dev/null +++ b/IpManager.py @@ -0,0 +1,73 @@ +#!/bin/env python + +import requests +import logging +import os + +logger = logging.getLogger(__file__) + +class IpManager(): + + ipFile = None + + def __init__(self, ipFile): + logger.debug('Initialozing IpManager') + + self.ipFile = ipFile + + def _getLastIp(self): + """ + Extracts the ip from the ipFile, and creates the file if it does not exist + """ + + logger.debug('getLastIp called') + + try: + with open(self.ipFile, 'r') as f: + ip = f.read() + + logger.info(f'Found ip {ip}') + return ip + + except FileNotFoundError: + logger.info('IP File not found, creating new one') + open(self.ipFile, 'a').close() + return None + + except Exception as e: + logger.error(f'Error: {str(e)}') + return None + + def _storeNewIp(self, ip): + """ + Stores the ip in the ipFile + """ + logger.debug(f'Store {ip} to file') + + with open(self.ipFile, 'w') as f: + f.write(ip) + + + def _fetchCurrentIp(self): + logger.debug('Fetching current ip') + current = requests.get('https://api.ipify.org').text.strip() + + logger.debug(f'current ip is {current}') + + return current + + def hasIpChanged(self): + """ + Checks if the ip has changed and returns it if so, else return False + """ + + last = self._getLastIp() + current = self._fetchCurrentIp() + + if last is None or last != current: + logger.debug(f'Ip has changed from {last} to {current}') + self._storeNewIp(current) + + return current + + return None