def _edit_client(self, browser, key1, key2): """Edit a client""" functional.nav_to_module(browser, 'wireguard') browser.links.find_by_href(self._get_client_href(key1)).first.click() browser.find_by_css('.btn-edit-client').first.click() browser.find_by_id('id_public_key').fill(key2) functional.submit(browser, form_class='form-edit-client')
def _rename_user(browser, old_name, new_name): functional.nav_to_module(browser, 'users') with functional.wait_for_page_update(browser): browser.find_link_by_href('/plinth/sys/users/' + old_name + '/edit/').first.click() browser.find_by_id('id_username').fill(new_name) functional.submit(browser)
def _backup_schedule_get(browser): """Return the current schedule set for the root repository.""" functional.nav_to_module(browser, 'backups') browser.find_link_by_href( '/plinth/sys/backups/root/schedule/').first.click() without_apps = [] elements = browser.find_by_name('backups_schedule-selected_apps') for element in elements: if not element.checked: without_apps.append(element.value) return { 'enable': browser.find_by_name('backups_schedule-enabled').checked, 'daily': int(browser.find_by_name('backups_schedule-daily_to_keep').value), 'weekly': int(browser.find_by_name('backups_schedule-weekly_to_keep').value), 'monthly': int(browser.find_by_name('backups_schedule-monthly_to_keep').value), 'run_at': int(browser.find_by_name('backups_schedule-run_at_hour').value), 'without_apps': without_apps }
def _get_configuration(browser): """Return pagekite basic parameters.""" functional.nav_to_module(browser, 'pagekite') return (browser.find_by_name('pagekite-server_domain').value, int(browser.find_by_name('pagekite-server_port').value), browser.find_by_name('pagekite-kite_name').value, browser.find_by_name('pagekite-kite_secret').value)
def _get_relay_ports(browser): """Return the list of ports shown in the relay table.""" functional.nav_to_module(browser, 'tor') return [ port_name.text for port_name in browser.find_by_css('.tor-relay-port-name') ]
def _set_default_branch(browser, repo, branch): """Set default branch of the repository.""" functional.nav_to_module(browser, 'gitweb') browser.links.find_by_href( '/plinth/apps/gitweb/{}/edit/'.format(repo)).first.click() browser.find_by_id('id_gitweb-default_branch').select(branch) functional.submit(browser)
def test_list_disks(session_browser): """Test that root disk is shown on storage page.""" if functional.running_inside_container(): pytest.skip('Storage doesn\'t work inside a container') else: functional.nav_to_module(session_browser, 'storage') assert _is_root_disk_shown(session_browser)
def _set_home_page(browser, home_page): if 'plinth' not in home_page and 'apache' not in home_page: home_page = 'shortcut-' + home_page functional.nav_to_module(browser, 'config') drop_down = browser.find_by_id('id_homepage') drop_down.select(home_page) functional.submit(browser)
def _create_user(browser, name, password): functional.nav_to_module(browser, 'users') with functional.wait_for_page_update(browser): browser.find_link_by_href('/plinth/sys/users/create/').first.click() browser.find_by_id('id_username').fill(name) browser.find_by_id('id_password1').fill(password) browser.find_by_id('id_password2').fill(password) functional.submit(browser)
def _publish_key(browser, key_type, domain): """Publish a key of specified type for given domain from monkeysphere.""" functional.nav_to_module(browser, 'monkeysphere') key, _ = _find_domain(browser, key_type, 'imported', domain) with functional.wait_for_page_update(browser): key.find_by_css('.button-publish').click() functional.wait_for_config_update(browser, 'monkeysphere')
def _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] functional.nav_to_module(browser, 'tor') assert browser.find_by_name(element_name).first.checked == enabled
def _delete_user(browser, name): functional.nav_to_module(browser, 'users') delete_link = browser.find_link_by_href('/plinth/sys/users/' + name + '/delete/') if delete_link: with functional.wait_for_page_update(browser): delete_link.first.click() functional.submit(browser)
def _remove_all_passwords(browser): functional.nav_to_module(browser, 'bepasty') while True: remove_button = browser.find_by_css('.password-remove') if remove_button: functional.submit(browser, remove_button) else: break
def _delete_repo(browser, repo, ignore_missing=False): """Delete repository.""" functional.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() functional.submit(browser)
def _assert_client_details(self, browser, key): """Check that the client's details are correct.""" def get_value(key): return browser.find_by_css(f'tr.{key} > td').first.text functional.nav_to_module(browser, 'wireguard') href = browser.links.find_by_href(self._get_client_href(key)) href.first.click() assert get_value('client-public-key') == key
def _configure(browser, host, port, kite_name, kite_secret): """Configure pagekite basic parameters.""" functional.nav_to_module(browser, 'pagekite') # time.sleep(0.250) # Wait for 200ms show animation to complete browser.fill('pagekite-server_domain', host) browser.fill('pagekite-server_port', str(port)) browser.fill('pagekite-kite_name', kite_name) browser.fill('pagekite-kite_secret', kite_secret) functional.submit(browser, form_class='form-configuration')
def _set_home_page(browser, home_page): if 'plinth' not in home_page and 'apache' not in home_page: home_page = 'shortcut-' + home_page functional.nav_to_module(browser, 'config') drop_down = browser.find_by_id('id_homepage') drop_down.select(home_page) update_setup = browser.find_by_css('.btn-primary') functional.submit(browser, element=update_setup)
def _add_introducer(browser, domain): """Add a new introducer into tahoe-lafs.""" functional.nav_to_module(browser, 'tahoe') furl = 'pb://ewe4zdz6kxn7xhuvc7izj2da2gpbgeir@tcp:{}:3456/' \ 'fko4ivfwgqvybppwar3uehkx6spaaou7'.format(domain) browser.fill('pet_name', 'testintroducer') browser.fill('furl', furl) functional.submit(browser, form_class='form-add-introducer')
def openvpn_setup(session_browser): """Setup the OpenVPN application after installation.""" functional.nav_to_module(session_browser, 'openvpn') setup_form = session_browser.find_by_css('.form-setup') if not setup_form: return functional.submit(session_browser, form_class='form-setup') functional.wait_for_config_update(session_browser, 'openvpn')
def _get_introducer(browser, domain, introducer_type): """Return an introducer element with a given type from tahoe-lafs.""" functional.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 _enable_dnssec(browser, enable): """Enable/disable DNSSEC in bind configuration.""" functional.nav_to_module(browser, 'bind') if enable: browser.check('enable_dnssec') else: browser.uncheck('enable_dnssec') functional.submit(browser, form_class='form-configuration')
def _enable_restricted_logins(browser, should_enable): """Enable/disable restricted logins in security module.""" functional.nav_to_module(browser, 'security') if should_enable: browser.check('security-restricted_access') else: browser.uncheck('security-restricted_access') functional.submit(browser)
def _set_all_repos_private(browser): """Set all repositories private""" functional.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: _set_repo_access(browser, repo, 'private')
def _assert_has_config(browser, config): functional.nav_to_module(browser, 'dynamicdns') for key, value in config.items(): if key == 'password': continue if isinstance(value, bool): assert browser.find_by_id(f'id_{key}').checked == value else: assert value == browser.find_by_id(f'id_{key}').value
def _set_repo_access(browser, repo, access): """Set repository as public or private.""" functional.nav_to_module(browser, 'gitweb') browser.links.find_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() functional.submit(browser)
def _add_server(browser, config): """Add a server.""" functional.nav_to_module(browser, 'wireguard') browser.find_by_css('.btn-add-server').first.click() browser.find_by_id('id_peer_endpoint').fill(config['peer_endpoint']) browser.find_by_id('id_peer_public_key').fill( config['peer_public_key']) browser.find_by_id('id_ip_address').fill(config['ip_address']) browser.find_by_id('id_private_key').fill(config['private_key']) browser.find_by_id('id_preshared_key').fill(config['preshared_key']) functional.submit(browser, form_class='form-add-server')
def _upload_and_restore(browser, app_name, downloaded_file_path): functional.nav_to_module(browser, 'backups') browser.find_link_by_href('/plinth/sys/backups/upload/').first.click() fileinput = browser.driver.find_element_by_id('id_backups-file') fileinput.send_keys(downloaded_file_path) # submit upload form functional.submit(browser) # submit restore form with functional.wait_for_page_update(browser, expected_url='/plinth/sys/backups/'): functional.submit(browser)
def _get_configuration(browser): """Return the current configuration for snapshots.""" functional.nav_to_module(browser, 'snapshot') return (int(float(browser.find_by_name('free_space').value) * 100), browser.find_by_name('enable_timeline_snapshots').value == 'yes', browser.find_by_name('enable_software_snapshots').value == 'yes', int(browser.find_by_name('hourly_limit').value), int(browser.find_by_name('daily_limit').value), int(browser.find_by_name('weekly_limit').value), int(browser.find_by_name('monthly_limit').value), int(browser.find_by_name('yearly_limit').value))
def _configure_domain(browser, domain): functional.nav_to_module(browser, 'dynamicdns') browser.find_link_by_href( '/plinth/sys/dynamicdns/configure/').first.click() browser.find_by_id('id_dynamicdns_domain').fill(domain) functional.submit(browser) # After a domain name change, Let's Encrypt will restart the web # server and could cause a connection failure. time.sleep(1) functional.eventually(functional.nav_to_module, [browser, 'dynamicdns'])
def _create_wiki_if_needed(browser): """Create wiki if it does not exist.""" functional.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( functional.config['DEFAULT']['username']) browser.find_by_id('id_ikiwiki-admin_password').fill( functional.config['DEFAULT']['password']) functional.submit(browser)