Пример #1
0
def tor_get_relay_ports(browser):
    """Return the list of ports shown in the relay table."""
    interface.nav_to_module(browser, 'tor')
    return [
        port_name.text
        for port_name in browser.find_by_css('.tor-relay-port-name')
    ]
Пример #2
0
def install(browser, app_name):
    interface.nav_to_module(browser, get_app_module(app_name))
    install = browser.find_by_css('.form-install input[type=submit]')

    def install_in_progress():
        selectors = [
            '.install-state-' + state
            for state in ['pre', 'post', 'installing']
        ]
        return any(
            browser.is_element_present_by_css(selector)
            for selector in selectors)

    def is_server_restarting():
        return browser.is_element_present_by_css('.neterror')

    def wait_for_install():
        if install_in_progress():
            sleep(1)
        elif is_server_restarting():
            sleep(1)
            browser.visit(browser.url)
        else:
            return
        wait_for_install()

    if install:
        install.click()
        wait_for_install()
        sleep(2)  # XXX This shouldn't be required.
Пример #3
0
def _change_status(browser, app_name, change_status_to='enabled'):
    interface.nav_to_module(browser, get_app_module(app_name))
    checkbox = browser.find_by_id(get_app_checkbox_id(app_name))
    checkbox.check() if change_status_to == 'enabled' else checkbox.uncheck()
    interface.submit(browser, 'form-configuration')
    if app_name in apps_with_loaders:
        wait_for_config_update(browser, app_name)
Пример #4
0
def _change_status(browser, app_name, change_status_to='enabled'):
    interface.nav_to_module(browser, get_app_module(app_name))
    checkbox = browser.find_by_id(get_app_checkbox_id(app_name))
    checkbox.check() if change_status_to == 'enabled' else checkbox.uncheck()
    browser.find_by_value('Update setup').click()
    if app_name == app_config_updating_text:
        wait_for_config_update(browser, app_name)
Пример #5
0
def new_user_does_not_exist(browser, name):
    interface.nav_to_module(browser, 'users')
    delete_link = browser.find_link_by_href('/plinth/sys/users/' + name +
                                            '/delete/')
    if delete_link:
        delete_link.first.click()
        browser.find_by_value('Delete ' + name).click()
Пример #6
0
def gitweb_delete_repo(browser, repo, ignore_missing=False):
    """Delete repository."""
    interface.nav_to_module(browser, 'gitweb')
    delete_link = browser.find_link_by_href(
        '/plinth/apps/gitweb/{}/delete/'.format(repo))
    if delete_link or not ignore_missing:
        delete_link.first.click()
        submit(browser)
Пример #7
0
def tor_assert_feature_enabled(browser, feature, enabled):
    """Assert whether Tor relay is enabled or disabled."""
    if not isinstance(enabled, bool):
        enabled = enabled in ('enable', 'enabled')

    element_name = _TOR_FEATURE_TO_ELEMENT[feature]
    interface.nav_to_module(browser, 'tor')
    assert browser.find_by_name(element_name).first.checked == enabled
Пример #8
0
def new_user_does_not_exist(browser, name):
    interface.nav_to_module(browser, 'users')
    delete_link = browser.find_link_by_href(
        '/plinth/sys/users/' + name + '/delete/')
    if delete_link:
        delete_link.first.click()
        browser.find_by_value(
            'Delete ' + name).click()
Пример #9
0
def install(browser, app_name):
    interface.nav_to_module(browser, get_app_module(app_name))
    install = browser.find_by_value('Install')
    if install:
        install.click()
        while browser.is_text_present('Installing') \
              or browser.is_text_present('Performing post-install operation'):
            sleep(1)
        sleep(2)
Пример #10
0
def openvpn_setup(browser):
    """Setup the OpenVPN application after installation."""
    interface.nav_to_module(browser, 'openvpn')
    setup_form = browser.find_by_css('.form-setup')
    if not setup_form:
        return

    submit(browser, form_class='form-setup')
    wait_for_config_update(browser, 'openvpn')
Пример #11
0
def tahoe_get_introducer(browser, domain, introducer_type):
    """Return an introducer element with a given type from tahoe-lafs."""
    interface.nav_to_module(browser, 'tahoe')
    css_class = '.{}-introducers .introducer-furl'.format(introducer_type)
    for furl in browser.find_by_css(css_class):
        if domain in furl.text:
            return furl.parent

    return None
Пример #12
0
def install(browser, app_name):
    interface.nav_to_module(browser, get_app_module(app_name))
    install = browser.find_by_value('Install')
    if install:
        install.click()
        while browser.is_text_present('Installing') \
              or browser.is_text_present('Performing post-install operation'):
            sleep(1)
        sleep(2)
Пример #13
0
def tahoe_add_introducer(browser, domain):
    """Add a new introducer into tahoe-lafs."""
    interface.nav_to_module(browser, 'tahoe')

    furl = 'pb://ewe4zdz6kxn7xhuvc7izj2da2gpbgeir@tcp:{}:3456/' \
           'fko4ivfwgqvybppwar3uehkx6spaaou7'.format(domain)
    browser.fill('pet_name', 'testintroducer')
    browser.fill('furl', furl)
    submit(browser, form_class='form-add-introducer')
Пример #14
0
def gitweb_set_all_repos_private(browser):
    """Set all repositories private"""
    interface.nav_to_module(browser, 'gitweb')
    public_repos = []
    for element in browser.find_by_css('#gitweb-repo-list .list-group-item'):
        if not element.find_by_css('.repo-private-icon'):
            repo = element.find_by_css('.repo-label').first.text
            public_repos.append(repo)
    for repo in public_repos:
        gitweb_set_repo_access(browser, repo, 'private')
Пример #15
0
def gitweb_set_repo_access(browser, repo, access):
    """Set repository as public or private."""
    interface.nav_to_module(browser, 'gitweb')
    browser.find_link_by_href(
        '/plinth/apps/gitweb/{}/edit/'.format(repo)).first.click()
    if access == 'private':
        browser.find_by_id('id_gitweb-is_private').check()
    else:
        browser.find_by_id('id_gitweb-is_private').uncheck()
    submit(browser)
Пример #16
0
def ikiwiki_create_wiki_if_needed(browser):
    """Create wiki if it does not exist."""
    interface.nav_to_module(browser, 'ikiwiki')
    wiki = browser.find_link_by_href('/ikiwiki/wiki')
    if not wiki:
        browser.find_link_by_href('/plinth/apps/ikiwiki/create/').first.click()
        browser.find_by_id('id_ikiwiki-name').fill('wiki')
        browser.find_by_id('id_ikiwiki-admin_name').fill(
            config['DEFAULT']['username'])
        browser.find_by_id('id_ikiwiki-admin_password').fill(
            config['DEFAULT']['password'])
        submit(browser)
Пример #17
0
def gitweb_get_repo_metadata(browser, repo):
    """Get repository metadata."""
    interface.nav_to_module(browser, 'gitweb')
    browser.find_link_by_href(
        '/plinth/apps/gitweb/{}/edit/'.format(repo)).first.click()
    metadata = {}
    for item in ['name', 'description', 'owner']:
        metadata[item] = browser.find_by_id('id_gitweb-' + item).value
    if browser.find_by_id('id_gitweb-is_private').value:
        metadata['access'] = 'private'
    else:
        metadata['access'] = 'public'
    return metadata
Пример #18
0
def gitweb_repo_exists(browser, repo, access=None):
    """Check whether the repository exists."""
    interface.nav_to_module(browser, 'gitweb')
    links_found = browser.find_link_by_href('/gitweb/{}.git'.format(repo))
    access_matches = True
    if links_found and access:
        parent = links_found.first.find_by_xpath('..').first
        private_icon = parent.find_by_css('.repo-private-icon')
        if access == 'private':
            access_matches = True if private_icon else False
        if access == 'public':
            access_matches = True if not private_icon else False
    return bool(links_found) and access_matches
Пример #19
0
def samba_set_share(browser, share_type, status='enabled'):
    """Enable or disable samba share."""
    disk_name = 'disk'
    share_type_name = '{0}_share'.format(share_type)
    interface.nav_to_module(browser, 'samba')
    for elem in browser.find_by_tag('td'):
        if elem.text == disk_name:
            share_form = elem.find_by_xpath('(..//*)[2]/form').first
            share_btn = share_form.find_by_name(share_type_name).first
            if status == 'enabled' and share_btn['value'] == 'enable':
                share_btn.click()
            elif status == 'disabled' and share_btn['value'] == 'disable':
                share_btn.click()
            break
Пример #20
0
def gitweb_edit_repo_metadata(browser, repo, metadata):
    """Set repository metadata."""
    interface.nav_to_module(browser, 'gitweb')
    browser.find_link_by_href(
        '/plinth/apps/gitweb/{}/edit/'.format(repo)).first.click()
    if 'name' in metadata:
        browser.find_by_id('id_gitweb-name').fill(metadata['name'])
    if 'description' in metadata:
        browser.find_by_id('id_gitweb-description').fill(
            metadata['description'])
    if 'owner' in metadata:
        browser.find_by_id('id_gitweb-owner').fill(metadata['owner'])
    if 'access' in metadata:
        if metadata['access'] == 'private':
            browser.find_by_id('id_gitweb-is_private').check()
        else:
            browser.find_by_id('id_gitweb-is_private').uncheck()
    submit(browser)
Пример #21
0
def tor_feature_enable(browser, feature, should_enable):
    """Enable/disable a Tor feature."""
    if not isinstance(should_enable, bool):
        should_enable = should_enable in ('enable', 'enabled')

    element_name = _TOR_FEATURE_TO_ELEMENT[feature]
    interface.nav_to_module(browser, 'tor')
    checkbox_element = browser.find_by_name(element_name).first
    if should_enable == checkbox_element.checked:
        return

    if should_enable:
        if feature == 'bridge-relay':
            browser.find_by_name('tor-relay_enabled').first.check()

        checkbox_element.check()
    else:
        checkbox_element.uncheck()

    interface.submit(browser, form_class='form-configuration')
    wait_for_config_update(browser, 'tor')
Пример #22
0
def disable(browser, app_name):
    interface.nav_to_module(browser, get_app_module(app_name))
    browser.find_by_id(get_app_checkbox_id(app_name)).uncheck()
    browser.find_by_value('Update setup').click()
    if app_name == app_config_updating_text:
        wait_for_config_update(browser, app_name)
Пример #23
0
def ikiwiki_wiki_exists(browser):
    """Check whether the wiki exists."""
    interface.nav_to_module(browser, 'ikiwiki')
    wiki = browser.find_link_by_href('/ikiwiki/wiki')
    return bool(wiki)
Пример #24
0
def is_running(browser, service_name):
    interface.nav_to_module(browser, get_service_module(service_name))
    return browser.is_text_present('is running')
Пример #25
0
def searx_disable_public_access(browser):
    """Enable Public Access in SearX"""
    interface.nav_to_module(browser, 'searx')
    browser.find_by_id('id_public_access').uncheck()
    interface.submit(browser, form_class='form-configuration')
Пример #26
0
def openvpn_download_profile(browser):
    """Download the current user's profile into a file and return path."""
    interface.nav_to_module(browser, 'openvpn')
    url = browser.find_by_css('.form-profile')['action']
    return _download_file(browser, url)
Пример #27
0
def time_zone_set(browser, time_zone):
    """Set the system time zone."""
    interface.nav_to_module(browser, 'datetime')
    browser.select('time_zone', time_zone)
    interface.submit(browser, form_class='form-configuration')
Пример #28
0
def radicale_set_access_rights(browser, access_rights_type):
    interface.nav_to_module(browser, 'radicale')
    browser.choose('access_rights', access_rights_type)
    interface.submit(browser, form_class='form-configuration')
Пример #29
0
def test_user_exists(browser, name):
    interface.nav_to_module(browser, 'users')
    user_link = browser.find_link_by_href('/plinth/sys/users/' + name +
                                          '/edit/')
    if not user_link:
        create_user(browser, name, 'secret')
Пример #30
0
def time_zone_get(browser):
    """Set the system time zone."""
    interface.nav_to_module(browser, 'datetime')
    return browser.find_by_name('time_zone').first.value
Пример #31
0
def test_user_exists(browser, name):
    interface.nav_to_module(browser, 'users')
    user_link = browser.find_link_by_href(
        '/plinth/sys/users/' + name + '/edit/')
    if not user_link:
        create_user(browser, name, 'secret')
Пример #32
0
def radicale_get_access_rights(browser):
    access_rights_types = ['owner_only', 'owner_write', 'authenticated']
    interface.nav_to_module(browser, 'radicale')
    for access_rights_type in access_rights_types:
        if browser.find_by_value(access_rights_type).checked:
            return access_rights_type
Пример #33
0
def is_not_running(browser, service_name):
    interface.nav_to_module(browser, get_service_module(service_name))
    return len(browser.find_by_css('.running-status.inactive')) != 0
Пример #34
0
def tor_assert_hidden_services(browser):
    """Assert that hidden service information is shown."""
    interface.nav_to_module(browser, 'tor')
    assert browser.find_by_css('.tor-hs .tor-hs-hostname')