import argparse, time
from OpenSSL import crypto


def log(message, verbose_level):
    if config.verbose >= verbose_level:
        print time.strftime("%d-%m-%Y %H:%M:%S : " + message)

def ipFromBin(prefix):
    prefix = hex(int(prefix, 2))[2:]
    ip = ''
    for i in xrange(0, len(prefix) - 1, 4):
        ip += prefix[i:i+4] + ':'
    return ip.rstrip(':')

def ipFromPrefix(vifibnet, prefix, prefix_len):
    prefix = bin(int(prefix))[2:].rjust(prefix_len, '0')
    ip_t = (vifibnet + prefix).ljust(128, '0')
    return ipFromBin(ip_t)

def networkFromCa(ca_path):
    # Get network prefix from ca.crt
    with open(ca_path, 'r') as f:
        ca = crypto.load_certificate(crypto.FILETYPE_PEM, f.read())
        return bin(ca.get_serial_number())[3:]
        
def ipFromCert(network, cert_path):
    # Get ip from cert.crt
    with open(cert_path, 'r') as f:
        cert = crypto.load_certificate(crypto.FILETYPE_PEM, f.read())
        subject = cert.get_subject()
        prefix, prefix_len = subject.CN.split('/')
        return ipFromPrefix(network, prefix, int(prefix_len))
        
def ovpnArgs(optional_args, ca_path, cert_path)
    # Treat openvpn arguments
    if optional_args[0] == "--":
        del optional_args[0]
    optional_args.append('--ca')
    optional_args.append(config.ca)
    optional_args.append('--cert')
    optional_args.append(config.cert)
    return optional_args