#!/usr/bin/env python3 # -*- coding: utf-8 -*- import hashlib import yaml import os from functools import reduce def read_config(path): """ Read a value from the configuration :return: value (it can be any type) """ config = yaml.load(open("/usr/share/spyguard/config.yaml", "r"), Loader=yaml.SafeLoader) return reduce(dict.get, path, config) def write_config(cat, key, value): """ Write a new value in the configuration :return: bool, operation status """ try: config = yaml.load(open("/usr/share/spyguard/config.yaml", "r"), Loader=yaml.SafeLoader) config[cat][key] = value with open(os.path.join(dir, "config.yaml"), "w") as yaml_file: yaml_file.write(yaml.dump(config, default_flow_style=False)) return True except: return False def get_watchers(watcher_type): """ Read a value from the configuration :return: value (it can be any type) """ watchers = yaml.load(open("/usr/share/spyguard/watchers.yaml", "r"), Loader=yaml.SafeLoader) for watcher in watchers["watchers"]: if watcher_type == watcher["type"]: yield watcher def get_device_uuid() -> str: """Get the device UUID Returns: str: device uuid """ uuid_not_found = False try: with open("/sys/class/dmi/id/product_uuid", "r") as uuid: return uuid.read() except: uuid_not_found = True try: with open("/proc/cpuinfo") as f: for line in f.readlines(): if line.startswith("Serial"): serial = line.split(":")[1].strip().encode('utf8') hash = hashlib.md5(serial).hexdigest() return f"{hash[0:8]}-{hash[8:12]}-{hash[12:16]}-{hash[16:20]}-{hash[20:]}" except: uuid_not_found = True if uuid_not_found: return "00000000-0000-0000-0000-000000000000"