def node_detail(self, addr, msg=""): if addr not in self._node_dict.keys(): abort(404) node = self._node_dict[addr] href_base = "/node/" + addr + "/" node_info_items = [ {"descr": "NAME", "value": node.info["name"]}, {"descr": "IP ADDRESS", "value": node.info["addr"]}, {"descr": "STATUS", "value": node.info["status"]}, {"descr": "LAST CONTACT", "value": node.info["last_contact"]}, {"descr": "CRASHES", "value": node.info["crashes"]}, ] node_info_table = SingleNodeTable(node_info_items) if node.config is not None: node_config = ConfigParser(node.config, True) general_config, programs, op_mode_conf = node_config.dump_additional_information() general_config_items = [] for item in general_config: general_config_items.append({"descr": item[0], "value": item[1]}) count = 1 program_items = [] for prog in programs: program_items.append({"descr": "Program " + str(count), "value": prog}) count += 1 op_mode_items = [] if node_config.node_op_mode == "fuzzing": general_config_items.append({"descr": "OP-Mode", "value": "Fuzzing"}) op_mode_items.append({"descr": "Fuzzer Type", "value": op_mode_conf["fuzzer_type"]}) for item in op_mode_conf["fuzz_conf"].items(): op_mode_items.append({"descr": item[0], "value": item[1]}) elif node.op_mode == "reducing": pass else: op_mode_items.append({"descr": "OP-Mode", "value": "Not found"}) general_config_table = SingleNodeTable(general_config_items) program_table = SingleNodeTable(program_items) op_mode_conf_table = SingleNodeTable(op_mode_items) return render_template( "single_node.html", section_title="NODE DETAIL", node_info_table=node_info_table, general_config_table=general_config_table, program_table=program_table, op_mode_conf_table=op_mode_conf_table, href_base=href_base, message_from_server=msg, ) else: return render_template( "single_node.html", section_title="NODE DETAIL", body_space=node_info_table, href_base=href_base, message_from_server=msg, )
def node_detail(self, node): node_config = node.info fuzzer_conf = "" if node.config != "": from_conf_file = ConfigParser(node.config) add_config, fuzzer_conf = from_conf_file.dump_additional_information() node_config += add_config node_detail_html = self._html_template node_detail_html = node_detail_html.replace("SECTION_TITLE", node.name) node_conf_table = "<form action=\"/index.py?func=home&node=" + node.address + \ "&submit=1\" method=\"post\">\r\n" + "<table>\r\n" node_conf_table += "<tr><th/><th/></tr>\r\n" # General config settings for i in range(4): node_conf_table += "<tr>\r\n<td><b>" + node_config[i][0] + "</b></td>\r\n" + \ "<td>" + node_config[i][1] + "</td>\r\n</tr>\r\n" del node_config[0:4] for elem in node_config: single_node = "<td><b>" + elem[0] + "</b></td>\r\n" + \ "<td><input type=\"text\" name=\"" + elem[0].lower() + "\" value=\"" + \ elem[1] + "\" size=\"60\"></td>\r\n" node_conf_table += "<tr>\r\n" + single_node + "</tr>\r\n" node_conf_table += "</table>\r\n" if fuzzer_conf != "": node_conf_table += "<table id=\"fuzz_table\" >\r\n<tr><th/><th/></tr>\r\n" # fuzzer settings fuzz_types_options = "" for key in FUZZERS.keys(): fuzz_types_options += "<option>"+key+"</option>\r\n" node_conf_table += "<tr>\r\n<td><b>Fuzzer Type</b></td>\r\n<td><select id=\"fuzzers\" " + \ "onLoad=\"set_select_value('" + fuzzer_conf["fuzzer_type"] + "')\" " + \ " name=\"fuzzer_type\" onChange=\"changeFuzzer()\">\r\n" + \ fuzz_types_options+"</select>\r\n</td>\r\n</tr>\r\n" node_conf_table += "<div id=\"fuzz_config\">\r\n" for key in FUZZERS[fuzzer_conf["fuzzer_type"]][0]: node_conf_table += "<tr>\r\n<td><b>" + key + "</b></td>\r\n" + \ "<td><input type=\"text\" value=\"" + fuzzer_conf["fuzz_conf"][key] + "\" name=\"" + \ key + "\" >" # table end node_conf_table += "\r\n</div>\r\n" node_conf_table += "</table>\r\n" else: node_conf_table += "<br><br><b>No additional information received by now</b>\r\n" node_conf_table += "<br>\r\n" node_conf_table += "<input type=\"submit\" value=\"Submit\">\r\n</form>\r\n" node_conf_table += "<form action=\"/index.py?func=home&reboot=" + node.address + "\" method=\"post\">\r\n" + \ "<input type=\"submit\" value=\"Reboot node\">\r\n</form>\r\n" node_conf_table += "<form action=\"/index.py?func=home&del=" + node.address + "\" method=\"post\">\r\n" + \ "<input type=\"submit\" value=\"Delete node\">\r\n</form>\r\n" node_detail_html = node_detail_html.replace("REPLACE_ME", node_conf_table) return self._statuses[200], self._header_html, node_detail_html
def node_set_config(self, addr): if "conf_file" not in request.files or addr not in self._node_dict.keys(): abort(404) path = "tmp/" + addr + "-inc_conf.xml" if __name__ == "__main__" else "web/tmp/" + addr + "-inc_conf.xml" node = self._node_dict[addr] rec_file = request.files['conf_file'] rec_file.save(path) # Check if it's a valid config message = "Config parsed successfully" error = False try: ConfigParser(path) except ValueError as v_err: message = "An error occured while parsing your config: " + v_err.message error = True except: message = "There was a general error with your configuration" error = True # ----------------------------- if not error: node.status = False with open(path) as fd: config = fd.read() self._web_queue.put((WEB_QUEUE_TASKS['TO_NODE'], [(addr, node.listener_port), MESSAGE_TYPES['SET_CONFIG'], config])) return self.node_detail(addr, message)
def node_detail(self, node): node_config = node.info op_mode_conf = "" programs = None if node.config is not None: add_config, programs, op_mode_conf = ConfigParser(node.config, True).dump_additional_information() node_config += add_config node_detail_html = self._html_template node_detail_html = node_detail_html.replace("SECTION_TITLE", node.name) node_conf_table = "<form action=\"/index.py?func=home&node=" + node.address + \ "&submit=1\" method=\"post\">\r\n" + "<table>\r\n" node_conf_table += "<tr><th/>GENERAL CONFIG<th/></tr>\r\n" # ------------------------------------------------------------------------------------------------------------ # General config settings for i in range(4): node_conf_table += html.node_detail_table_entry(node_config[i][0], node_config[i][1]) del node_config[0:4] for elem in node_config: node_conf_table += html.node_detail_table_entry_editable(elem[0], elem[1]) node_conf_table += "</table>\r\n<table id=\"programs_table\">\r\n" # ------------------------------------------------------------------------------------------------------------ # Program settings if programs is not None: for i, prog in enumerate(programs): node_conf_table += "<tr><th>PROGRAM " + str(i) + "</th><th/></tr>\r\n" single_prog = "" for key, val in prog.items(): single_prog += html.node_detail_table_entry_editable(key, val, "prog-" + str(i) + " " + key) node_conf_table += single_prog node_conf_table += "</table>\r\n" # ------------------------------------------------------------------------------------------------------------ # Fuzzer settings if op_mode_conf != "": node_conf_table += "<table id=\"fuzz_table\" >\r\n<tr><th>FUZZER SETTINGS</th><th/></tr>\r\n" fuzz_types_options = "" for key in FUZZERS.keys(): fuzz_types_options += "<option>"+key+"</option>\r\n" node_conf_table += "<tr>\r\n<td><b>Fuzzer Type</b></td>\r\n<td><select id=\"fuzzers\" " + \ "onLoad=\"set_select_value('" + op_mode_conf["fuzzer_type"] + "')\" " + \ " name=\"fuzzer_type\" onChange=\"changeFuzzer()\">\r\n" + \ fuzz_types_options+"</select>\r\n</td>\r\n</tr>\r\n" for key in FUZZERS[op_mode_conf["fuzzer_type"]][0]: node_conf_table += html.node_detail_table_entry_editable(key, op_mode_conf['fuzz_conf'][key]) node_conf_table += "</table>\r\n" else: node_conf_table += "<br><br><b>No additional information received by now</b>\r\n" node_conf_table += "<br>\r\n" node_conf_table += "<input type=\"submit\" value=\"Submit\" >\r\n</form>\r\n" node_conf_table += html.action_button("Reboot node", "/index.py?func=home&reboot=" + node.address, "post") node_conf_table += html.action_button("Delete node", "/index.py?func=home&del=" + node.address, "post") node_detail_html = node_detail_html.replace("REPLACE_ME", node_conf_table) return self._statuses[200], self._header_html, node_detail_html
def node_detail(self, addr, msg=""): if addr not in self._node_dict.keys(): abort(404) node = self._node_dict[addr] href_base = "/node/" + addr + "/" node_info_items = [{'descr': 'NAME', 'value': node.info['name']}, {'descr': 'IP ADDRESS', 'value': node.info['addr']}, {'descr': 'STATUS', 'value': node.info['status']}, {'descr': 'LAST CONTACT', 'value': node.info['last_contact']}, {'descr': 'CRASHES', 'value': node.info['crashes']}] node_info_table = SingleNodeTable(node_info_items) if node.config is not None: node_config = ConfigParser(node.config, True) general_config, programs, op_mode_conf = node_config.dump_additional_information() general_config_items = [] for item in general_config: general_config_items.append({'descr': item[0], 'value': item[1]}) count = 1 program_items = [] for prog in programs: program_items.append({'descr': 'Program ' + str(count), 'value': prog}) count += 1 op_mode_items = [] if node_config.node_op_mode == "fuzzing": general_config_items.append({'descr': 'OP-Mode', 'value': "Fuzzing"}) op_mode_items.append({'descr': 'Fuzzer Type', 'value': op_mode_conf['fuzzer_type']}) for item in op_mode_conf['fuzz_conf'].items(): op_mode_items.append({'descr': item[0], 'value': item[1]}) elif node.op_mode == "reducing": pass else: op_mode_items.append({'descr': 'OP-Mode', 'value': 'Not found'}) general_config_table = SingleNodeTable(general_config_items) program_table = SingleNodeTable(program_items) op_mode_conf_table = SingleNodeTable(op_mode_items) return render_template("single_node.html", section_title="NODE DETAIL", node_info_table=node_info_table, general_config_table=general_config_table, program_table=program_table, op_mode_conf_table=op_mode_conf_table, href_base=href_base, message_from_server=msg) else: return render_template("single_node.html", section_title="NODE DETAIL", body_space=node_info_table, href_base=href_base, message_from_server=msg)