# By default, Authorities are not configured as exits
Authority = Node(tag="a", authority=1, relay=1, torrc="authority.tmpl")
ExitRelay = Node(tag="r", relay=1, exit=1, torrc="relay.tmpl")
Client = Node(tag="c", client=1, torrc="client.tmpl")

BridgeAuthority = Node(tag="ba", authority=1, bridgeauthority=1,
                       relay=1, torrc="bridgeauthority.tmpl")
Bridge = Node(tag="br", bridge=1, pt_bridge=1, relay=1, pt_transport="obfs4",
       torrc="bridge-obfs4.tmpl")

def obfs4_extra_args(env):
    import os, re
    # find the obfs4_bridgeline file.
    location = os.path.join(env['dir'],
                            "pt_state",
                            "obfs4_bridgeline.txt")
    if not os.path.exists(location):
        return ""
    # read the file and find the actual line
    with open(location, 'r') as f:
        for line in f:
            if line.startswith("#"):
                continue
            if line.isspace():
                continue
            m = re.match(r'(.*<FINGERPRINT>) (cert.*)', line)
            if m:
                return m.group(2)
    return ""

Bridge.set_runtime("pt_extra", obfs4_extra_args)

BridgeClient = Node(tag="bc", client=1, bridgeclient=1,
	     torrc="bridgeclient-obfs4.tmpl", config_phase=2, launch_phase=2)

NODES = Authority.getN(3) + BridgeAuthority.getN(1) + ExitRelay.getN(4) + \
    Bridge.getN(1) + Client.getN(1) + BridgeClient.getN(1)

ConfigureNodes(NODES)