def is_latest_report_exists(): """ This function checks if a monkey report was already generated and if it's the latest one. :return: True if report is the latest one, False if there isn't a report or its not the latest. """ latest_report_doc = mongo.db.report.find_one({}, {'meta.latest_monkey_modifytime': 1}) if latest_report_doc: report_latest_modifytime = latest_report_doc['meta']['latest_monkey_modifytime'] latest_monkey_modifytime = NodeService.get_latest_modified_monkey()[0]['modifytime'] return report_latest_modifytime == latest_monkey_modifytime return False
def generate_report(): domain_issues = ReportService.get_domain_issues() issues = ReportService.get_issues() config_users = ReportService.get_config_users() config_passwords = ReportService.get_config_passwords() cross_segment_issues = ReportService.get_cross_segment_issues() monkey_latest_modify_time = list( NodeService.get_latest_modified_monkey())[0]['modifytime'] report = \ { 'overview': { 'manual_monkeys': ReportService.get_manual_monkeys(), 'config_users': config_users, 'config_passwords': config_passwords, 'config_exploits': ReportService.get_config_exploits(), 'config_ips': ReportService.get_config_ips(), 'config_scan': ReportService.get_config_scan(), 'monkey_start_time': ReportService.get_first_monkey_time().strftime("%d/%m/%Y %H:%M:%S"), 'monkey_duration': ReportService.get_monkey_duration(), 'issues': ReportService.get_issues_overview(issues, config_users, config_passwords), 'warnings': ReportService.get_warnings_overview(issues, cross_segment_issues), 'cross_segment_issues': cross_segment_issues }, 'glance': { 'scanned': ReportService.get_scanned(), 'exploited': ReportService.get_exploited(), 'stolen_creds': ReportService.get_stolen_creds(), 'azure_passwords': ReportService.get_azure_creds(), 'ssh_keys': ReportService.get_ssh_keys(), 'strong_users': PTHReportService.get_strong_users_on_crit_details(), 'pth_map': PTHReportService.get_pth_map() }, 'recommendations': { 'issues': issues, 'domain_issues': domain_issues }, 'meta': { 'latest_monkey_modifytime': monkey_latest_modify_time } } ReportExporterManager().export(report) mongo.db.report.drop() mongo.db.report.insert_one( ReportService.encode_dot_char_before_mongo_insert(report)) return report