def generate(dst_format, parsed_data):

    logger.log(
        2, "DirectFire.Converter.generate: loading generator module for " +
        dst_format)

    if dst_format == "ciscoasa":  ## Cisco ASA post 8.3
        from DirectFire.Converter.generators.ciscoasa import generate

    elif dst_format == "data":  ## JSON Data
        from DirectFire.Converter.generators.data import generate

    elif dst_format == "fortigate":  ## Fortinet FortiGate
        from DirectFire.Converter.generators.fortigate import generate

    else:
        logger.log(
            2,
            "DirectFire.Converter.parse: failed to load generator module for "
            + dst_format,
        )

        print(
            f"{Fore.RED}Error: failed to load generator module.{Style.RESET_ALL}"
        )

        exit()

    logger.log(
        2, "DirectFire.Converter.generate: loaded generator module for " +
        dst_format)

    logger.log(
        2,
        "DirectFire.Converter.generate: starting generation of destination output"
    )

    dst_config = generate(logger, parsed_data)

    logger.log(
        2,
        "DirectFire.Converter.generate: completed generation of destination output"
    )

    return dst_config
Exemplo n.º 2
0
def main(src_format, dst_format, routing_info=""):

    # Load source configuration file

    logger.info(
        "DirectFire.Converter.main: loading source configuration from " +
        args.config)

    try:

        with open(args.config) as config_file:
            src_config = config_file.read()

    except:

        logger.error(
            "DirectFire.Converter.main: source file either not found or not readable "
            + args.config)

        print(
            f"{Fore.RED}Error: source file either not found or not readable.{Style.RESET_ALL}"
        )

        exit()

    if routing_info:

        try:

            with open(args.routing) as routing_file:
                routing_info = routing_file.read()

        except:

            logger.error(
                "DirectFire.Converter.main: routing file either not found or not readable "
                + args.config)

            print(
                f"{Fore.RED}Error: routing file either not found or not readable.{Style.RESET_ALL}"
            )

            exit()

    # Run configuration parser

    logger.info("DirectFire.Converter.main: running configuration parser")

    parsed_data = parse(src_format=src_format,
                        src_config=src_config,
                        routing_info=routing_info)

    logger.info("DirectFire.Converter.main: configuration parser finished")

    # Output

    logger.info("DirectFire.Converter.main: running configuration generator")

    dst_config = generate(dst_format=dst_format, parsed_data=parsed_data)

    for line in dst_config:
        print(line)

    ### add support for output to file

    logger.info("DirectFire.Converter.main: configuration generator finished")

    logger.info("DirectFire.Converter.main: converter exiting")