Beispiel #1
0
def firewall(request, action):
    if request.user.is_anonymous() or not request.user.is_staff:
        return redirect("/")
        log.info("detected anon-user in adminpanel. Thrown out...")
    result = ""
    rules_form = FirewallRule()
    f = Firewall()
    log.debug("inside manager.views.firewall()")
    if action == "add" and request.method == "POST":
        log.debug("-- DETECTED ADD-RULE")
        form = FirewallRule(request.POST)
        rule = Rule()
        if form.is_valid():
            log.debug("-- -- form is valid")
            rule.src = form.cleaned_data.get("src_ip")
            rule.src += "/" + str(form.cleaned_data.get("src_subnet"))
            rule.spt = form.cleaned_data.get("src_port")
            rule.dst = form.cleaned_data.get("dst_ip")
            if rule.dst:
                rule.dst += "/" + str(form.cleaned_data.get("dst_subnet"))
            rule.dpt = form.cleaned_data.get("dst_port")
            rule.action = form.cleaned_data.get("action")
            rule.chain = form.cleaned_data.get("chain")
            rule.prot = form.cleaned_data.get("protocol")
            rule.save()
            log.debug("-- -- rule saved to db, sending rule to firewall.add_custom_rule")
            result = f.add_custom_rule(rule.chain, rule.src, rule.spt, rule.dst, rule.dpt, rule.action, rule.prot)
        rules_form = form
    elif action == "delete" and request.method == "POST":
        log.debug("-- DETECTED DELETE-RULE")
        rule = str(request.POST.get("ruleid"))
        chain = str(request.POST.get("chain"))
        f.del_custom_rule(chain, rule)
    elif action == "flush" and request.method == "POST":
        log.debug("-- DETECTED FLUSH")
        chain = request.POST.get("chain")
        f.flush_custom_rules(chain)

    return render_to_response(
        "firewall.html",
        {"result": result, "forward": f.get_custom_forward(), "input": f.get_custom_input(), "form": rules_form},
        context_instance=RequestContext(request),
    )