Ejemplo n.º 1
0
def run_sync(settings):
    try:
        # Set the system where sync'd data will be stored.
        # The Kamailio DB in our case

        # If already running - don't run
        if os.path.isfile("./.sync-lock"):
            print("Already running")
            return
        else:
            f = open("./.sync-lock", "w+")
            f.close()

        # need to decrypt password if encrypted
        if isinstance(settings.KAM_DB_PASS, bytes):
            kam_password = AES_CTR.decrypt(
                settings.KAM_DB_PASS).decode('utf-8')
        else:
            kam_password = settings.KAM_DB_PASS

        dest = {}
        dest['hostname'] = settings.KAM_DB_HOST
        dest['username'] = settings.KAM_DB_USER
        dest['password'] = kam_password
        dest['database'] = settings.KAM_DB_NAME

        # Get the list of FusionPBX's that needs to be sync'd
        sources = get_sources(dest)

        # Loop thru each FusionPBX system and start the sync
        for key in sources:
            if sync_needed(sources[key], dest):
                #drop_fusionpbx_domains(sources[key], dest)
                sync_db(sources[key], dest)
            else:
                print("[run_sync] No sync needed for source: {}".format(
                    sources[key][1]))

        # Reload Kamailio
        reloadkam(settings.KAM_KAMCMD_PATH)

        # Update Nginx configuration file for HTTP Provisioning and start docker container if we have FusionPBX systems
        # update_nginx(sources[key])
        if sources is not None and len(sources) > 0:
            sources = list(sources.keys())
            update_nginx(sources)
    except Exception as e:
        print(str(e))
    finally:
        # Remove lock file
        os.remove("./.sync-lock")
Ejemplo n.º 2
0
def setSharedSettings(fields_dict={},
                      address=settings.DSIP_IPC_SOCK,
                      authkey=None):
    if authkey is None:
        authkey = AES_CTR.decrypt(settings.DSIP_IPC_PASS)

    class SettingsManager(SyncManager):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)

    SettingsManager.register("getSettings")

    manager = SettingsManager(address=address, authkey=authkey)
    manager.connect()
    settings_proxy = manager.getSettings()
    settings_proxy.update(list(fields_dict.items()))
Ejemplo n.º 3
0
def getDBURI():
    """
    Get any and all DB Connection URI's
    Facilitates HA DB Server connections through multiple host's defined in settings
    :return:    list of DB URI connection strings
    """
    uri_list = []

    # check environment vars if in debug mode
    if settings.DEBUG:
        settings.KAM_DB_DRIVER = os.getenv('KAM_DB_DRIVER',
                                           settings.KAM_DB_DRIVER)
        settings.KAM_DB_HOST = os.getenv('KAM_DB_HOST', settings.KAM_DB_HOST)
        settings.KAM_DB_TYPE = os.getenv('KAM_DB_TYPE', settings.KAM_DB_TYPE)
        settings.KAM_DB_PORT = os.getenv('KAM_DB_PORT', settings.KAM_DB_PORT)
        settings.KAM_DB_NAME = os.getenv('KAM_DB_NAME', settings.KAM_DB_NAME)
        settings.KAM_DB_USER = os.getenv('KAM_DB_USER', settings.KAM_DB_USER)
        settings.KAM_DB_PASS = os.getenv('KAM_DB_PASS', settings.KAM_DB_PASS)

    # need to decrypt password
    if isinstance(settings.KAM_DB_PASS, bytes):
        kampass = AES_CTR.decrypt(settings.KAM_DB_PASS).decode('utf-8')
    else:
        kampass = settings.KAM_DB_PASS

    if settings.KAM_DB_TYPE != "":
        sql_uri = settings.KAM_DB_TYPE + "{driver}" + "://" + settings.KAM_DB_USER + ":" + kampass + "@" + "{host}" + "/" + settings.KAM_DB_NAME

        driver = ""
        if len(settings.KAM_DB_DRIVER) > 0:
            driver = '+{}'.format(settings.KAM_DB_DRIVER)

        if isinstance(settings.KAM_DB_HOST, list):
            for host in settings.KAM_DB_HOST:
                uri_list.append(sql_uri.format(host=host, driver=driver))
        else:
            uri_list.append(
                sql_uri.format(host=settings.KAM_DB_HOST, driver=driver))

    if settings.DEBUG:
        IO.printdbg('getDBURI() returned: [{}]'.format(','.join(
            '"{0}"'.format(uri) for uri in uri_list)))

    return uri_list
Ejemplo n.º 4
0
def createSettingsManager(shared_settings,
                          address=settings.DSIP_IPC_SOCK,
                          authkey=None):
    if authkey is None:
        authkey = AES_CTR.decrypt(settings.DSIP_IPC_PASS)

    class SettingsManager(SyncManager):
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)

    SettingsManager.register("getSettings",
                             lambda: shared_settings,
                             exposed=[
                                 '__contains__', '__delitem__', '__getitem__',
                                 '__len__', '__setitem__', 'clear', 'copy',
                                 'get', 'has_key', 'items', 'keys', 'pop',
                                 'popitem', 'setdefault', 'update', 'values'
                             ])

    manager = SettingsManager(address=address, authkey=authkey)
    return manager
Ejemplo n.º 5
0
def sendEmail(recipients,
              text_body,
              html_body=None,
              subject=settings.MAIL_DEFAULT_SUBJECT,
              sender=settings.MAIL_DEFAULT_SENDER,
              data=None,
              attachments=[]):
    """
    Send an Email asynchronously to recipients
    :param recipients:  list
    :param text_body:   str
    :param html_body:   str
    :param subject:     str
    :param sender:      str
    :param data:        dict
    :param attachments: list
    :return:            None
    """

    try:
        if data is not None:
            text_body += "\r\n\n"
            for key, value in data.items():
                text_body += "{}: {}\n".format(key, value)
            text_body += "\n"

        # print("Creating email")
        msg_root = MIMEMultipart('alternative')
        msg_root['From'] = sender
        msg_root['To'] = ", ".join(recipients)
        msg_root['Subject'] = subject
        msg_root.preamble = "|-------------------MULTIPART_BOUNDARY-------------------|\n"

        # print("Adding text body to email")
        msg_root.attach(MIMEText(text_body, 'plain'))

        if html_body is not None and html_body != "":
            # print("Adding html body to email")
            msg_root.attach(MIMEText(html_body, 'html'))

        if len(attachments) > 0:
            # print("Adding attachments to email")
            for file in attachments:
                with open(file, 'rb') as fp:
                    msg_attachments = MIMEBase('application', "octet-stream")
                    msg_attachments.set_payload(fp.read())
                encoders.encode_base64(msg_attachments)
                msg_attachments.add_header('Content-Disposition',
                                           'attachment',
                                           filename=os.path.basename(file))
                msg_root.attach(msg_attachments)

        # check environ vars if in debug mode
        if settings.DEBUG:
            settings.MAIL_USERNAME = os.getenv('MAIL_USERNAME',
                                               settings.MAIL_USERNAME)
            settings.MAIL_PASSWORD = os.getenv('MAIL_PASSWORD',
                                               settings.MAIL_PASSWORD)

        # need to decrypt password
        if isinstance(settings.MAIL_PASSWORD, bytes):
            mailpass = AES_CTR.decrypt(settings.MAIL_PASSWORD).decode('utf-8')
        else:
            mailpass = settings.MAIL_PASSWORD

        # print("sending email")
        with smtplib.SMTP(settings.MAIL_SERVER, settings.MAIL_PORT) as server:
            server.connect(settings.MAIL_SERVER, settings.MAIL_PORT)
            server.ehlo()
            if settings.MAIL_USE_TLS:
                server.starttls()
                server.ehlo()
            server.login(settings.MAIL_USERNAME, mailpass)
            msg_root_str = msg_root.as_string()
            server.sendmail(sender, recipients, msg_root_str)
            server.quit()

    except Exception as ex:
        debugException(ex)