def rules_pl(command, replies): """.""" if not verify(command.message): return opt = ("allow", "deny", "reject", "limit", "delete", "insert") clear_cmd() p = ufwp.UFWParser() for c in opt: p.register_command(ufwp.UFWCommandRule(c)) if "comment" in command.payload: plx = re.split("comment", command.payload) pl = [c for c in plx[0].split() if c.strip()] cmt = [c for c in plx[1].split() if c.strip()] else: pl = [c for c in command.payload.split() if c.strip()] cmt = [] if len(pl) < 2: alert.append("⚠️ expects arguments") elif pl[0] not in opt: alert.append("⚠️ invalid *action*") # add elif for insert but invalid action - length of pl has to be checked else: if cmt: pl.append("comment") pl.append(" ".join(cmt)) try: pr = p.parse_command(pl) print(pr) fw()[0].do_action(pr.action, pr.data.get("rule", ""), pr.data.get("iptype", ""), True) except Exception as xcp: alert.append(f"⛔️ ufw exception: {xcp}") except: alert.append(f"📛 ufw error") rules(command, replies)
def guide_exec(command, replies): """.""" if not verify(command.message): return clear_cmd() p = ufwp.UFWParser() for c in ["b", "f", "q"]: with suppress(Exception): dbot.commands.unregister(name=f"/{c}") x = [] if gmc[0] != gmd[0]: x.append("insert") x.append(gmc[0]) p.register_command(ufwp.UFWCommandRule("insert")) x.append(gmc[2]) if gmc[1] != gmd[1]: x.append("out") x.append("from") if gmc[3] != gmd[3]: x.append(gmc[3]) else: x.append(gmd[3]) x.append("to") if gmc[4] != gmd[4]: x.append(gmc[4]) else: x.append(gmd[4]) if gmc[5] != gmd[5]: x.append("proto") x.append(gmc[5]) if gmc[6] != gmd[6]: x.append("port") x.append(gmc[6]) if gmc[7] != gmd[7]: x.append("comment") x.append(gmc[7]) p.register_command(ufwp.UFWCommandRule(gmc[2])) try: pr = p.parse_command(x) fw()[0].do_action( pr.action, pr.data.get("rule", ""), pr.data.get("iptype", ""), True, ) except Exception as xcp: alert.append(f"⛔️ ufw exception: {xcp}") guide_finish(command, replies) return except: alert.append(f"📛 ufw error") guide_finish(command, replies) return x = [] for c in fw()[1].get_rules(): x.append(f"🔹 {len(x) + 1}: {ufwp.UFWCommandRule.get_command(c)}") x = "\n".join(x) replies.add(f"🌐 RULES\n{x}") gmc.clear() menu()
def rules_mv(command, replies): """.""" if not verify(command.message): return clear_cmd() p = ufwp.UFWParser() for c in ("delete", "insert"): p.register_command(ufwp.UFWCommandRule(c)) pl = [c for c in command.payload.split() if c.strip()] if len(pl) != 2: alert.append("⚠️ expects two arguments") elif not all([c.isnumeric() for c in pl]): alert.append("⚠️ arguments must be numeric") else: x = fw()[1].get_rules_count(False) y = int(pl[0]) z = int(pl[1]) if not (y != z and 0 < y <= x and 0 < z <= x): # could be more elaborate alert.append("⚠️ invalid argument(s)") else: rle = ufwp.UFWCommandRule.get_command( fw()[1].get_rules()[y - 1]).split() try: pr = p.parse_command(["delete"] + rle) fw()[0].do_action( pr.action, pr.data.get("rule", ""), pr.data.get("iptype", ""), True, ) except Exception as xcp: alert.append(f"⛔️ ufw exception: {xcp}") except: alert.append(f"📛 ufw error") else: w = 0 if y < z: w = 1 try: pr = p.parse_command(["insert"] + [str(z - w)] + rle) fw()[0].do_action( pr.action, pr.data.get("rule", ""), pr.data.get("iptype", ""), True, ) except Exception as xcp: alert.append(f"⛔️ ufw exception: {xcp}") except: alert.append(f"📛 ufw error") rules(command, replies)
def rules_rst(command, replies): """.""" if not verify(command.message): return clear_cmd() p = ufwp.UFWParser() p.register_command(ufwp.UFWCommandRule("delete")) while fw()[1].get_rules_count(False) > 0: try: pr = p.parse_command(["delete", "1"]) fw()[0].do_action(pr.action, pr.data.get("rule", ""), pr.data.get("iptype", ""), True) except Exception as xcp: alert.append(f"⛔️ ufw exception: {xcp}") except: alert.append(f"📛 ufw error") rules(command, replies)
def service_pl(command, replies): """.""" if not verify(command.message): return clear_cmd() pl = [c for c in command.payload.split() if c.strip()] if len(pl) != 2: alert.append("⚠️ expects two arguments") elif pl[0] not in ("allow", "deny", "reject"): alert.append("⚠️ 1st argument must be allow, deny or reject") elif not pl[1].isnumeric(): alert.append("⚠️ 2nd argument must be numeric") elif not 0 <= int(pl[1]) < len(serv): alert.append("⚠️ 2nd argument must be valid ID") else: p = ufwp.UFWParser() p.register_command(ufwp.UFWCommandRule(pl[0])) ppll = [pl[0], f"{serv[int(pl[1])][2]}/{serv[int(pl[1])][0]}"] if serv[int(pl[1])][1] != "*": ppll = [ pl[0], "to", serv[int(pl[1])][1], "port", str(serv[int(pl[1])][2]), "proto", serv[int(pl[1])][0], ] ppll.append("comment") ppll.append(f"auto for {serv[int(pl[1])][3]}") try: pr = p.parse_command(ppll) fw()[0].do_action( pr.action, pr.data.get("rule", ""), pr.data.get("iptype", ""), True, ) except Exception as xcp: alert.append(f"⛔️ ufw exception: {xcp}") except: alert.append(f"📛 ufw error") service(command, replies)
def service_del(command, replies): """.""" if not verify(command.message): return clear_cmd() pl = [c for c in command.payload.split() if c.strip()] if len(pl) != 1: alert.append("⚠️ expects one argument") elif not pl[0].isnumeric(): alert.append("⚠️ argument must be numeric") elif int(pl[0]) not in dels: alert.append("⚠️ argument must be valid rulenumber") else: p = ufwp.UFWParser() p.register_command(ufwp.UFWCommandRule("delete")) try: pr = p.parse_command(["delete", pl[0]]) fw()[0].do_action(pr.action, pr.data.get("rule", ""), pr.data.get("iptype", ""), True) except Exception as xcp: alert.append(f"⛔️ ufw exception: {xcp}") except: alert.append(f"📛 ufw error") service(command, replies)