def install_firewall():
    firewall = config['firewall']

    if firewall['enable']:
        switch_user(install_user, install_password)
        packages = ['ufw', 'GUFW']
        install_native(packages)

        cmd = 'ufw default deny incoming'
        sudo(cmd)

        cmd = 'ufw default allow outgoing'
        sudo(cmd)

        for app in firewall['allowed']:
            cmd = 'ufw allow %s' % (app)
            sudo(cmd)

        cmd = """echo "y" | sudo ufw enable"""
        run(cmd)
def install_mqtt():
    user_info               = config['user']
    admin_user              = get_admin_user(user_info)
    mos_srv_user            = get_mosquitto_user(user_info)
    mqtt                    = config['mqtt']
    app_dir                 = mqtt['dir']
    system_libs             = mqtt['system_libs']
    users                   = mqtt['users']

    switch_user(admin_user.name, admin_user.password)

    app_path = os.path.join('/opt', app_dir)
    cmd = 'mkdir -p {}'.format(app_path)
    sudo(cmd)

    with cd(app_path):
        run("wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key")
        sudo("apt-key add mosquitto-repo.gpg.key")

        with cd("/etc/apt/sources.list.d/"):
            sudo("wget http://repo.mosquitto.org/debian/mosquitto-jessie.list")
            install_native(system_libs)

            with cd("/etc/mosquitto"):
                put("./files/mosquitto.conf", "mosquitto.conf", use_sudo=True)
                sudo('chown root:root mosquitto.conf')
                sudo("touch pwfile")

                cmd = 'chown {}:{} pwfile'.format(mos_srv_user.name, mos_srv_user.name)
                sudo(cmd)
                sudo("chmod 0600 pwfile")

                switch_user(mos_srv_user.name, mos_srv_user.password)

                for user in users:
                    cmd = 'sudo mosquitto_passwd -b pwfile {} {}'.format(user.name, user.password)
                    sudo(cmd)

    cmd = 'chown -R {}:{} {}'.format(mos_srv_user.name, mos_srv_user.name, app_path)
    sudo(cmd)
def install_micro_httpd():
    user_info               = config['user']
    home_assistant          = config['home_assistant']
    root_path               = home_assistant['root_dir']
    admin_user              = get_admin_user(user_info)
    libmicrohttpd           = config['libmicrohttpd']
    install_dir             = libmicrohttpd['install_dir']
    lib                     = libmicrohttpd['lib']
    ftp_site                = libmicrohttpd['ftp_site']
    system_libs             = libmicrohttpd['system_libs']

    switch_user(install_user, install_password)
    install_native(system_libs)

    install_path = os.path.join('/opt', install_dir)
    cmd = 'mkdir -p {}'.format(install_path)
    sudo(cmd)

    cmd = 'chown -R {}:{} {}'.format(admin_user.name, admin_user.name, install_path)
    sudo(cmd)

    switch_user(admin_user.name, admin_user.password)

    with cd(install_path):
        ftp_path = os.path.join(ftp_site, lib)
        cmd = 'wget {}'.format(ftp_path)
        run(cmd)

        cmd = 'tar zxvf {}'.format(lib)
        run(cmd)

        lib_dir = '.'.join(lib.split('.')[:-2])

        with cd(lib_dir):
            run('./configure')
            run('make')
            sudo('make install')
def install_python_libs():
    python_system_libs = config['python_system_libs']
    switch_user(install_user, install_password)
    install_native(python_system_libs)
def install_system_apps():
    system_apps = config['system_apps']
    switch_user(install_user, install_password)
    install_native(system_apps)
def install_openzwave():
    user_info               = config['user']
    openzwave               = config['openzwave']
    openzwave_system_libs   = openzwave['system_libs']
    openzwave_python_libs   = openzwave['python_libs']
    openzwave_git_url       = openzwave['git_url']
    openzwave_dir           = openzwave['dir']
    home_assistant          = config['home_assistant']
    venv_dir                = home_assistant['venv_dir']
    root_path               = home_assistant['root_dir']
    ha_user                 = get_ha_user(user_info)
    ha_path                 = os.path.join('/srv', root_path)
    home_path               = get_user_home_dir(ha_user.name)
    pyenv_path              = os.path.join(home_path, '.pyenv')

    switch_user(install_user, install_password)
    install_native(openzwave_system_libs)

    openzwave_path = os.path.join('/srv', openzwave_dir)
    cmd = 'mkdir -p {}'.format(openzwave_path)
    sudo(cmd)

    cmd = 'chown -R {}:{} {}'.format(ha_user.name, ha_user.name, openzwave_path)
    sudo(cmd)

    sudo('service home-assistant stop')
    switch_user(ha_user.name, ha_user.password)

    cmd1 = 'PYENV_ROOT="{}"'.format(pyenv_path)
    cmd2 = 'PATH="$PYENV_ROOT/bin:$PATH"'
    cmd3 = 'eval "$(pyenv init -)"'
    cmd_str = '{}; {}; {}'.format(cmd1, cmd2, cmd3)

    with prefix(cmd_str):
        cmd = 'cd {}'.format(ha_path)
        run(cmd)

        venv_path = os.path.join(ha_path, venv_dir)
        venv_activate = os.path.join(venv_path, 'bin', 'activate')
        cmd = '. {}'.format(venv_activate)

        with prefix(cmd):
            libs = ' '.join(openzwave_python_libs)
            cmd = 'pip install {}'.format(libs)
            run(cmd)
            py_openzwave_path = os.path.join(openzwave_path, 'python_openzwave')

            cmd = 'rm -rf {}'.format(py_openzwave_path)
            run(cmd)

            cmd = 'git clone {} {}'.format(openzwave_git_url, py_openzwave_path)
            run(cmd)

            with cd(py_openzwave_path):
                cmd = 'git checkout --track origin/python3'
                run(cmd)

                cmd = 'make build'
                run(cmd)

                cmd = 'make install'
                run(cmd)

    switch_user(install_user, install_password)
    sudo('service home-assistant start')