#!/usr/bin/env python3 import sys import os import socket import hashlib import subprocess CONFIG=os.path.expanduser("~/.config/planmon/config") CACHEDIR=os.path.expanduser("~/.cache/planmon") def finger(address): user, host = address.split("@") server = ( host, 79 ) sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) data = "" try: sock.connect(server) sock.sendall((user + "\n").encode()) data = sock.recv(8192) data = data.decode() except Exception as ex: print(f"error: {ex}") return data def checkdiff(address, text): if not os.path.exists(CACHEDIR): os.makedirs(CACHEDIR) texthash = hashlib.sha1(text.encode()) digest = texthash.hexdigest() if os.path.exists(CACHEDIR + "/" + address): fp = open(CACHEDIR + "/" + address) if digest == fp.read(): fp.close() return False else: # plan has changed fp = open(CACHEDIR + "/" + address, "w") fp.write(digest) #update hash fp.close() subprocess.run(['notify-send', f'Plan update from {address}', f'{text}'], check=True) return True else: # new entry! fp = open(CACHEDIR + "/" + address, "w") fp.write(digest) #update hash fp.close() subprocess.run(['notify-send', f'Plan cached from {address}', f'{text}'], check=True) return True def main(): try: config = open(CONFIG, "r") except Exception as ex: print(f"Can't open config {ex}") for address in config.readlines(): address = address.strip() text = finger(address) if checkdiff(address,text): print("Something changed...") if __name__ == "__main__": sys.exit(main())