#!/usr/bin/env python from argparse import ArgumentParser from core.plugins.sysctl import Sysctl from core.plugins.postfix import Postfix from core.plugins.apache import Apache from core.report import generateHtmlReport from core.config import AUDIT_SYSTEM, AUDIT_APPLICATION, generateConfig, parsingConfigFile from core.dispatcher import Dispatcher from utils import getHostname, getKernelVersion, identifySystem, getCodeName, getRelease def checkArguments(): args = ArgumentParser(description="Check Gitlab repositories") args.add_argument('-a', '--audit', help="Kind of audit", choices=['system', 'application']) args.add_argument('-p', '--plugins', help="Get all plugins", choices=['system', 'application']) args.add_argument('-c', '--config', help="Config file") return args.parse_args() def getAllPlugins(audit): print(f"List all plugins for {audit}") if audit == "system": dis = Dispatcher() plugins = dis.get_plugins() for plugin in plugins: print(plugin) elif audit == "application": pass def main(): args = checkArguments() if args.plugins is not None: getAllPlugins(args.plugins) exit(0) # If audit is not specified if args.audit is None: print("Please, you must specify the audit type") exit(1) # If config file is specified configs = generateConfig() if args.config is not None: parsingConfigFile(args.config, configs) # Report report = dict() report['system'] = dict() # Get the hostname of the VM report['hostname'] = getHostname() # Get system informations report['kernel'] = getKernelVersion() report['release'] = f"{identifySystem()} {getRelease()} ({getCodeName()}) " # Create our dispatcher dispatcher = Dispatcher() #print(configs) if args.audit == "system": print("Auditing the system...") for audit in AUDIT_SYSTEM: if audit not in configs["system"]["exclude_plugins"]: report["system"][audit] = dispatcher.runPlugin( audit, configs["system"][audit] ) if args.audit == "application": print("Auditing the application...") pass print("End of the audit. Generating the report") generateHtmlReport(report) @Dispatcher.register_plugins def sysctl(*args) -> dict: sysctl = Sysctl(args[1]) sysctl.runAudit() return sysctl.getReports() @Dispatcher.register_plugins def postfix(*args) -> dict: postfix = Postfix(args[1]) postfix.runAudit() return postfix.getReports() @Dispatcher.register_plugins def apache(*args) -> dict: apache = Apache(args[1]) apache.runAudit() return apache.getReports() if __name__ == "__main__": main()