#!/usr/bin/env python
"""toggle a dynamic service firewall on/off

Usage: %s DEVICE "up|down|status|list"
where DEVICE is a network interface, such as wlan0
This script starts or stops a firewall as defined in servicewall.py
"""

#from statefulfirewall import StateFulFireWall
import servicewall
from servicewall import network_helpers
from sys import argv
from os import environ
import json
import time


logging = False

if __name__ == "__main__":
    if logging:
        with open("/tmp/toggler-logfile", "a") as logfile:
            now = time.ctime()
            logfile.write(now)
            logfile.write(" ")
            json.dump(argv, logfile)
            logfile.write("\n")

    # We expect arguments to be :
    #       toggler iface_name new_state
    # Normalize networkd-dispatcher's arguments :
    try:
        state_flag = environ["STATE"]
    except KeyError:
        state_flag = None
    if state_flag == "routable":
        argv = [argv[0], environ["IFACE"], "up"]

    if len(argv) != 3:
        print(__doc__)
        raise SystemError("wrong number of arguments : %s" % " ".join(argv))
    device = argv[1]
    action = argv[2]
    firewall = servicewall.ServiceWall()

    if action == "up":
        if firewall.is_enabled():
            firewall.reload()
        else:
            raise SystemError("cannot bring firewall up, it's disabled")

    elif action == "down":
        if firewall.is_enabled():
            firewall.reload()
        else:
            raise SystemError("cannot bring firewall down, it's disabled")

    elif action == "connectivity-change":
        if firewall.is_enabled():
            firewall.reload()
        else:
            raise SystemError("cannot update firewall, it's disabled")

    elif action == "status":
        if firewall.is_enabled():
            print("enabled")
        else:
            print("disabled")

    else:
        raise SystemError("wrong usage : %s" % " ".join(argv))

