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') ]
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.
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)
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)
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()
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)
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
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()
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)
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')
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
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')
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')
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)
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)
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
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
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
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)
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')
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)
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)
def is_running(browser, service_name): interface.nav_to_module(browser, get_service_module(service_name)) return browser.is_text_present('is running')
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')
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)
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')
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')
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')
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
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')
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
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
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')