Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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()
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
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)