#!/usr/bin/env python
# argv[1] : re6stnet repository path
# argv[2] : babeld repository path
# argv[3] : openVPN repository path
# argv[4] : re6st script
# argv[5:] : re6st script arguments

import os, sys
def __file__():
    import argparse
    sys.dont_write_bytecode = True
    # Set path to re6stnet repository root folder
    sys.path[0] = os.path.join(os.path.dirname(sys.path[0]), sys.argv[1])
    from argparse import ArgumentParser
    _parse_args = ArgumentParser.parse_args
    ArgumentParser.parse_args = lambda self: _parse_args(self, sys.argv[5:])
    # Always import to prevent re6st.node.cli from altering the first sys.path
    from re6st import registry

    if 1:
        # Check renewal of certificate.
        from random import randrange
        registry.RENEW_PERIOD = 60
        _createCertificate = registry.RegistryServer.createCertificate
        def createCertificate(self, client_prefix, *args):
            self.cert_duration = 200 if int(client_prefix, 2) == 7 else \
                randrange(10, 60) ** 2
            try:
                return _createCertificate(self, client_prefix, *args)
            finally:
                del self.cert_duration
        registry.RegistryServer.createCertificate = createCertificate

        # Simulate the case of a node that does
        # not renew its certificate in time.
        if sys.argv[5] == "@m7/re6stnet.conf":
            registry.RENEW_PERIOD = -30

    return os.path.join(sys.path[0], sys.argv[4])

__file__ = __file__()
# Export babeld binary folder in $PATH
if sys.argv[2] != '-':
    os.environ["PATH"] = "%s:%s" % (os.path.join(sys.path[0], sys.argv[2]), os.environ["PATH"])
# Export openvpn binary folder in $PATH
if sys.argv[3] != '-':
    os.environ["PATH"] = "%s:%s" % (os.path.join(sys.path[0], sys.argv[3]), os.environ["PATH"])
execfile(__file__)