diff --git a/actions/tahoe-lafs b/actions/tahoe-lafs deleted file mode 100755 index 23d6d0b9a..000000000 --- a/actions/tahoe-lafs +++ /dev/null @@ -1,228 +0,0 @@ -#!/usr/bin/python3 -# SPDX-License-Identifier: AGPL-3.0-or-later -""" -Configuration helper for Tahoe-LAFS. -""" - -import argparse -import grp -import json -import os -import pwd -import shutil -import subprocess - -import augeas -import ruamel.yaml - -from plinth.modules.tahoe import (introducer_furl_file, introducer_name, - introducers_file, storage_node_name, - tahoe_home) -from plinth.modules.tahoe.errors import TahoeConfigurationError -from plinth.utils import YAMLFile - -domain_name_file = os.path.join(tahoe_home, 'domain_name') - -DEFAULT_FILE = '/etc/default/tahoe-lafs' - - -def parse_arguments(): - """Return parsed command line arguments as dictionary.""" - parser = argparse.ArgumentParser() - subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') - - setup = subparsers.add_parser('setup', - help='Set domain name for Tahoe-LAFS') - setup.add_argument('--domain-name', - help='The domain name to be used by Tahoe-LAFS') - subparsers.add_parser('create-introducer', - help='Create and start the introducer node') - subparsers.add_parser('create-storage-node', - help='Create and start the storage node') - subparsers.add_parser( - 'autostart', help='Automatically start all introducers and ' - 'storage nodes on system startup') - intro_parser_add = subparsers.add_parser( - 'add-introducer', help="Add an introducer to the storage node's list " - 'of introducers.') - intro_parser_add.add_argument( - '--introducer', help="Add an introducer to the storage node's list " - 'of introducers Param introducer must be a tuple ' - 'of (pet_name, furl)') - intro_parser_remove = subparsers.add_parser( - 'remove-introducer', help='Rename the introducer entry in the ' - 'introducers.yaml file specified by the ' - 'param') - intro_parser_remove.add_argument( - '--pet-name', help='The domain name that will be used by ' - 'Tahoe-LAFS') - subparsers.add_parser( - 'get-introducers', help='Return a dictionary of all introducers and ' - 'their furls added to the storage node running ' - 'on this FreedomBox.') - subparsers.add_parser( - 'get-local-introducer', - help='Return the name and furl of the introducer ' - 'created on this FreedomBox') - - return parser.parse_args() - - -def subcommand_setup(arguments): - """Actions to be performed after installing Tahoe-LAFS.""" - # Create tahoe group if needed. - try: - grp.getgrnam('tahoe-lafs') - except KeyError: - subprocess.run(['addgroup', 'tahoe-lafs'], check=True) - - # Create tahoe user if needed. - try: - pwd.getpwnam('tahoe-lafs') - except KeyError: - subprocess.run([ - 'adduser', '--system', '--ingroup', 'tahoe-lafs', '--home', - '/var/lib/tahoe-lafs', '--gecos', - 'Tahoe-LAFS distributed file system', 'tahoe-lafs' - ], check=True) - - if not os.path.exists(tahoe_home): - os.makedirs(tahoe_home, mode=0o755) - - shutil.chown(tahoe_home, user='tahoe-lafs', group='tahoe-lafs') - - if not os.path.exists(domain_name_file): - with open(domain_name_file, 'w') as dnf: - dnf.write(arguments.domain_name) - - -def subcommand_autostart(_): - """Automatically start all introducers and storage nodes on system startup. - """ - aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD + - augeas.Augeas.NO_MODL_AUTOLOAD) - aug.set('/augeas/load/Shellvars/lens', 'Shellvars.lns') - aug.set('/augeas/load/Shellvars/incl[last() + 1]', DEFAULT_FILE) - aug.load() - - aug.set('/files' + DEFAULT_FILE + '/AUTOSTART', 'all') - aug.save() - - -def get_configured_domain_name(): - """Extract and return the domain name from the domain name file. - - Throws TahoeConfigurationError if the domain name file is not found. - """ - if not os.path.exists(domain_name_file): - raise TahoeConfigurationError - else: - with open(domain_name_file) as dnf: - return dnf.read().rstrip() - - -def subcommand_create_introducer(_): - """Create a Tahoe-LAFS introducer on this FreedomBox.""" - os.chdir(tahoe_home) - - if not os.path.exists(os.path.join(tahoe_home, introducer_name)): - subprocess.check_call([ - 'tahoe', 'create-introducer', '--port=3456', - '--location=tcp:{}:3456'.format(get_configured_domain_name()), - introducer_name - ]) - - subprocess.call(['tahoe', 'start', introducer_name]) - - -def subcommand_create_storage_node(_): - """Create a Tahoe-LAFS storage node on this FreedomBox.""" - os.chdir(tahoe_home) - - if not os.path.exists(os.path.join(tahoe_home, storage_node_name)): - subprocess.check_call([ - 'tahoe', 'create-node', '--nickname=\"storage_node\"', - '--webport=1234', - '--hostname={}'.format(get_configured_domain_name()), - storage_node_name - ]) - with open( - os.path.join(tahoe_home, introducer_name, 'private', - introducer_name + '.furl'), 'r') as furl_file: - furl = furl_file.read().rstrip() - conf_dict = {'introducers': {introducer_name: {'furl': furl}}} - conf_yaml = ruamel.yaml.dump(conf_dict, - Dumper=ruamel.yaml.RoundTripDumper) - with open( - os.path.join(tahoe_home, storage_node_name, 'private', - 'introducers.yaml'), 'w') as file_handle: - file_handle.write(conf_yaml) - - subprocess.call(['tahoe', 'start', storage_node_name]) - - -def subcommand_add_introducer(arguments): - """Add an introducer to the storage node's list of introducers. - - Param introducer must be a tuple of (pet_name, furl). - """ - with YAMLFile(introducers_file) as conf: - pet_name, furl = arguments.introducer.split(',') - conf['introducers'][pet_name] = {'furl': furl} - - restart_storage_node() - - -def subcommand_remove_introducer(arguments): - """Rename the introducer entry in the introducers.yaml file specified - by the param pet_name - """ - with YAMLFile(introducers_file) as conf: - del conf['introducers'][arguments.pet_name] - - restart_storage_node() - - -def subcommand_get_introducers(_): - """Return a dictionary of all introducers and their furls. - - The ones added to the storage node running on this FreedomBox. - """ - with open(introducers_file, 'r') as intro_conf: - conf = ruamel.yaml.round_trip_load(intro_conf) - - introducers = [] - for pet_name in conf['introducers'].keys(): - introducers.append((pet_name, conf['introducers'][pet_name]['furl'])) - - print(json.dumps(introducers)) - - -def subcommand_get_local_introducer(_): - """Return the name and furl of the introducer created on this FreedomBox - """ - with open(introducer_furl_file, 'r') as furl_file: - furl = furl_file.read().rstrip() - - print(json.dumps((introducer_name, furl))) - - -def restart_storage_node(): - """Called after exiting context of editing introducers file.""" - try: - subprocess.run(['tahoe', 'restart', 'storage_node'], check=True) - except subprocess.CalledProcessError as err: - print('Failed to restart storage_node with new configuration: %s', err) - - -def main(): - """Parse arguments and perform all duties.""" - arguments = parse_arguments() - - subcommand = arguments.subcommand.replace('-', '_') - subcommand_method = globals()['subcommand_' + subcommand] - subcommand_method(arguments) - - -if __name__ == '__main__': - main() diff --git a/debian/copyright b/debian/copyright index bf5b4de20..af2e62b80 100644 --- a/debian/copyright +++ b/debian/copyright @@ -248,16 +248,6 @@ Copyright: Jakob Borg and the Syncthing project Comment: https://commons.wikimedia.org/wiki/File:SyncthingLogoHorizontal.svg License: MPL-2.0 -Files: static/themes/default/icons/tahoe-lafs.png -Copyright: 2017 Kishan Raval -Comment: https://github.com/thekishanraval/Logos -License: GPL-3+ - -Files: static/themes/default/icons/tahoe-lafs.svg -Copyright: 2006-2018 The Tahoe-LAFS Software Foundation -Comment: https://github.com/tahoe-lafs/tahoe-lafs/blob/master/misc/build_helpers/icons/logo.svg -License: GPL-2+ - Files: static/themes/default/icons/tor.png static/themes/default/icons/tor.svg Copyright: The Tor Project, Inc. diff --git a/debian/freedombox.maintscript b/debian/freedombox.maintscript index 290d29cca..128d02ff6 100644 --- a/debian/freedombox.maintscript +++ b/debian/freedombox.maintscript @@ -15,3 +15,4 @@ rm_conffile /etc/plinth/custom-shortcuts.json 20.12~ rm_conffile /etc/plinth/modules-enabled/coquelicot 20.14~ rm_conffile /etc/plinth/modules-enabled/diaspora 21.16~ rm_conffile /etc/plinth/modules-enabled/monkeysphere 21.16~ +rm_conffile /etc/plinth/modules-enabled/tahoe 21.16~ diff --git a/plinth/modules/tahoe/__init__.py b/plinth/modules/tahoe/__init__.py deleted file mode 100644 index 6c4bbcd1e..000000000 --- a/plinth/modules/tahoe/__init__.py +++ /dev/null @@ -1,194 +0,0 @@ -# SPDX-License-Identifier: AGPL-3.0-or-later -""" -FreedomBox app to configure Tahoe-LAFS. -""" - -import json -import os - -from django.urls import reverse_lazy -from django.utils.translation import gettext_lazy as _ - -from plinth import actions -from plinth import app as app_module -from plinth import cfg, frontpage, menu -from plinth.daemon import Daemon -from plinth.modules.apache.components import Webserver, diagnose_url -from plinth.modules.backups.components import BackupRestore -from plinth.modules.firewall.components import Firewall -from plinth.package import Packages -from plinth.utils import format_lazy - -from . import manifest -from .errors import TahoeConfigurationError - -_description = [ - _('Tahoe-LAFS is a decentralized secure file storage system. ' - 'It uses provider independent security to store files over a ' - 'distributed network of storage nodes. Even if some of the nodes fail, ' - 'your files can be retrieved from the remaining nodes.'), - format_lazy( - _('This {box_name} hosts a storage node and an introducer by default. ' - 'Additional introducers can be added, which will introduce this ' - 'node to the other storage nodes.'), box_name=_(cfg.box_name)), -] - -tahoe_home = '/var/lib/tahoe-lafs' -introducer_name = 'introducer' -storage_node_name = 'storage_node' -domain_name_file = os.path.join(tahoe_home, 'domain_name') -introducers_file = os.path.join( - tahoe_home, '{}/private/introducers.yaml'.format(storage_node_name)) -introducer_furl_file = os.path.join( - tahoe_home, '{0}/private/{0}.furl'.format(introducer_name)) - -app = None - - -class TahoeApp(app_module.App): - """FreedomBox app for Tahoe LAFS.""" - - app_id = 'tahoe' - - _version = 1 - - def __init__(self): - """Create components for the app.""" - super().__init__() - - info = app_module.Info(app_id=self.app_id, version=self._version, - name=_('Tahoe-LAFS'), - icon_filename='tahoe-lafs', - short_description=_('Distributed File Storage'), - description=_description) - - self.add(info) - - menu_item = menu.Menu('menu-tahoe', info.name, info.short_description, - info.icon_filename, 'tahoe:index', - parent_url_name='apps', advanced=True) - self.add(menu_item) - - shortcut = frontpage.Shortcut( - 'shortcut-tahoe', info.name, - short_description=info.short_description, icon=info.icon_filename, - description=info.description, url=None, - configure_url=reverse_lazy('tahoe:index'), login_required=True) - self.add(shortcut) - - packages = Packages('packages-tahoe', ['tahoe-lafs']) - self.add(packages) - - firewall = Firewall('firewall-tahoe', info.name, - ports=['tahoe-plinth'], is_external=True) - self.add(firewall) - - webserver = Webserver('webserver-tahoe', 'tahoe-plinth') - self.add(webserver) - - daemon = Daemon('daemon-tahoe', 'tahoe-lafs') - self.add(daemon) - - backup_restore = BackupRestore('backup-restore-tahoe', - **manifest.backup) - self.add(backup_restore) - - def is_enabled(self): - """Return whether all the leader components are enabled. - - Return True when there are no leader components and - domain name is setup. - """ - return super().is_enabled() and is_setup() - - def diagnose(self): - """Run diagnostics and return the results.""" - results = super().diagnose() - results.extend([ - diagnose_url('http://localhost:5678', kind='4', - check_certificate=False), - diagnose_url('http://localhost:5678', kind='6', - check_certificate=False), - diagnose_url('http://{}:5678'.format(get_configured_domain_name()), - kind='4', check_certificate=False) - ]) - return results - - -class Shortcut(frontpage.Shortcut): - """Frontpage shortcut to use configured domain name for URL.""" - - def enable(self): - """Set the proper shortcut URL when enabled.""" - super().enable() - self.url = 'https://{}:5678'.format(get_configured_domain_name()) - - -def is_setup(): - """Check whether Tahoe-LAFS is setup""" - return os.path.exists(domain_name_file) - - -def get_configured_domain_name(): - """Extract and return the domain name from the domain name file. - Throws TahoeConfigurationError if the domain name file is not found. - """ - if not os.path.exists(domain_name_file): - raise TahoeConfigurationError - else: - with open(domain_name_file) as dnf: - return dnf.read().rstrip() - - -def setup(helper, old_version=None): - """Install and configure the module.""" - app.setup(old_version) - - -def post_setup(configured_domain_name): - """Actions to be performed after installing tahoe-lafs package.""" - actions.superuser_run('tahoe-lafs', - ['setup', '--domain-name', configured_domain_name]) - actions.run_as_user('tahoe-lafs', ['create-introducer'], - become_user='tahoe-lafs') - actions.run_as_user('tahoe-lafs', ['create-storage-node'], - become_user='tahoe-lafs') - actions.superuser_run('tahoe-lafs', ['autostart']) - app.enable() - - -def add_introducer(introducer): - """Add an introducer to the storage node's list of introducers. - Param introducer must be a tuple of (pet_name, furl) - """ - actions.run_as_user( - 'tahoe-lafs', ['add-introducer', "--introducer", ",".join(introducer)], - become_user='tahoe-lafs') - - -def remove_introducer(pet_name): - """Rename the introducer entry in the introducers.yaml file specified by - the param pet_name. - """ - actions.run_as_user('tahoe-lafs', - ['remove-introducer', '--pet-name', pet_name], - become_user='tahoe-lafs') - - -def get_introducers(): - """Return a dictionary of all introducers and their furls added to the - storage node running on this FreedomBox. - """ - introducers = actions.run_as_user('tahoe-lafs', ['get-introducers'], - become_user='tahoe-lafs') - - return json.loads(introducers) - - -def get_local_introducer(): - """Return the name and furl of the introducer created on this FreedomBox. - """ - introducer = actions.run_as_user('tahoe-lafs', ['get-local-introducer'], - become_user='tahoe-lafs') - - return json.loads(introducer) diff --git a/plinth/modules/tahoe/data/etc/apache2/conf-available/tahoe-plinth.conf b/plinth/modules/tahoe/data/etc/apache2/conf-available/tahoe-plinth.conf deleted file mode 100644 index 80e5c5fdd..000000000 --- a/plinth/modules/tahoe/data/etc/apache2/conf-available/tahoe-plinth.conf +++ /dev/null @@ -1,14 +0,0 @@ -# Tahoe-LAFS Storage Node web interface - -Listen 5678 - -# XXX: SSL is not configured? -# TODO: Use subdomain? - - - Include includes/freedombox-auth-ldap.conf - Require ldap-group cn=admin,ou=groups,dc=thisbox - - ProxyPass http://localhost:1234/ - - diff --git a/plinth/modules/tahoe/data/etc/plinth/modules-enabled/tahoe b/plinth/modules/tahoe/data/etc/plinth/modules-enabled/tahoe deleted file mode 100644 index 2379a52f4..000000000 --- a/plinth/modules/tahoe/data/etc/plinth/modules-enabled/tahoe +++ /dev/null @@ -1 +0,0 @@ -#plinth.modules.tahoe diff --git a/plinth/modules/tahoe/data/usr/lib/firewalld/services/tahoe-plinth.xml b/plinth/modules/tahoe/data/usr/lib/firewalld/services/tahoe-plinth.xml deleted file mode 100644 index e745d9636..000000000 --- a/plinth/modules/tahoe/data/usr/lib/firewalld/services/tahoe-plinth.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - Tahoe-LAFS - Tahoe-LAFS is a distributed file storage system - - - diff --git a/plinth/modules/tahoe/errors.py b/plinth/modules/tahoe/errors.py deleted file mode 100644 index e767d9221..000000000 --- a/plinth/modules/tahoe/errors.py +++ /dev/null @@ -1,11 +0,0 @@ -# SPDX-License-Identifier: AGPL-3.0-or-later -""" -Errors for Tahoe-LAFS module -""" - -from plinth.errors import PlinthError - - -class TahoeConfigurationError(PlinthError): - """Tahoe-LAFS has not been configured for domain name.""" - pass diff --git a/plinth/modules/tahoe/manifest.py b/plinth/modules/tahoe/manifest.py deleted file mode 100644 index 22fb0dbeb..000000000 --- a/plinth/modules/tahoe/manifest.py +++ /dev/null @@ -1,11 +0,0 @@ -# SPDX-License-Identifier: AGPL-3.0-or-later -""" -Application manfiest for tahoe-lafs. -""" - -backup = { - 'secrets': { - 'directories': ['/var/lib/tahoe-lafs/'] - }, - 'services': ['tahoe-lafs'] -} diff --git a/plinth/modules/tahoe/templates/tahoe-post-setup.html b/plinth/modules/tahoe/templates/tahoe-post-setup.html deleted file mode 100644 index e59011e5d..000000000 --- a/plinth/modules/tahoe/templates/tahoe-post-setup.html +++ /dev/null @@ -1,91 +0,0 @@ -{% extends "app.html" %} -{% comment %} -# SPDX-License-Identifier: AGPL-3.0-or-later -{% endcomment %} - -{% load i18n %} -{% load bootstrap %} - -{% block description %} - -{% for paragraph in description %} -

{{ paragraph|safe }}

-{% endfor %} - -

- {% url 'config:index' as index_url %} - {% blocktrans trimmed with domain_name=domain_name %} - The Tahoe-LAFS server domain is set to {{ domain_name }}. - Changing the FreedomBox domain name needs a reinstall of - Tahoe-LAFS and you WILL LOSE DATA. You can access Tahoe-LAFS at - https://{{domain_name}}:5678. - {% endblocktrans %} -

-{% endblock %} - -{% block configuration %} - {{ block.super }} - -

{% trans "Local introducer" %}

-
- - - - - - - - - - - -
{% trans "Pet Name" %} furl
{{ local_introducer.0 }}{{ local_introducer.1 }}
-
- -
- {% csrf_token %} -

{% trans "Add new introducer" %}

- -
- - -
-
- - -
- -
- -
- -

{% trans "Connected introducers" %}

-
- - - - - - - - {% for introducer, furl in introducers %} - - - - - - {% endfor %} -
{% trans "Pet Name" %} furl
{{ introducer }}{{ furl }} -
- {% csrf_token %} - -
-
-
- -{% endblock %} diff --git a/plinth/modules/tahoe/templates/tahoe-pre-setup.html b/plinth/modules/tahoe/templates/tahoe-pre-setup.html deleted file mode 100644 index 3249ab6a3..000000000 --- a/plinth/modules/tahoe/templates/tahoe-pre-setup.html +++ /dev/null @@ -1,47 +0,0 @@ -{% extends "base.html" %} -{% comment %} -# SPDX-License-Identifier: AGPL-3.0-or-later -{% endcomment %} - -{% load bootstrap %} -{% load i18n %} - -{% block content %} - {% block pagetitle %} -

{{ title }}

- {% endblock %} - - {% block description %} - {% for paragraph in description %} -

{{ paragraph|safe }}

- {% endfor %} - {% endblock %} - -

- {% url 'config:index' as index_url %} - {% if domain_names|length == 0 %} - No domain(s) are set. You can setup your domain on the system at - {% trans "Configure" %} page. - {% endif %} -

- - {% block status %} - {% endblock %} - - {% block diagnostics %} - {% endblock %} - - {% block configuration %} - {% if domain_names|length > 0 %} -

{% trans Configuration %}

-
- {% csrf_token %} - - {{ form|bootstrap }} - - -
- {% endif %} - {% endblock %} -{% endblock %} diff --git a/plinth/modules/tahoe/tests/__init__.py b/plinth/modules/tahoe/tests/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/plinth/modules/tahoe/tests/test_functional.py b/plinth/modules/tahoe/tests/test_functional.py deleted file mode 100644 index 3adf10e85..000000000 --- a/plinth/modules/tahoe/tests/test_functional.py +++ /dev/null @@ -1,92 +0,0 @@ -# SPDX-License-Identifier: AGPL-3.0-or-later -""" -Functional, browser based tests for tahoe app. -""" - -import pytest -from plinth.tests import functional - -pytestmark = [pytest.mark.apps, pytest.mark.tahoe, pytest.mark.skip] - -# TODO: When tahoe-lafs is restarted, it leaves a .gnupg folder in -# /var/lib/tahoe-lafs and failes to start in the next run. Enable tests after -# this is fixed. - - -class TestTahoeApp(functional.BaseAppTests): - app_name = 'tahoe' - has_service = True - has_web = True - - @pytest.fixture(scope='class', autouse=True) - def fixture_setup(self, session_browser): - """Setup the app.""" - functional.login(session_browser) - functional.set_advanced_mode(session_browser, True) - functional.set_domain_name(session_browser, 'mydomain.example') - functional.install(session_browser, self.app_name) - functional.app_select_domain_name(session_browser, self.app_name, - 'mydomain.example') - - def test_default_introducers(self, session_browser): - """Test default introducers.""" - assert _get_introducer(session_browser, 'mydomain.example', 'local') - assert _get_introducer(session_browser, 'mydomain.example', - 'connected') - - def test_add_remove_introducers(self, session_browser): - """Test add and remove introducers.""" - if _get_introducer(session_browser, 'anotherdomain.example', - 'connected'): - _remove_introducer(session_browser, 'anotherdomain.example') - - _add_introducer(session_browser, 'anotherdomain.example') - assert _get_introducer(session_browser, 'anotherdomain.example', - 'connected') - - _remove_introducer(session_browser, 'anotherdomain.example') - assert not _get_introducer(session_browser, 'anotherdomain.example', - 'connected') - - @pytest.mark.backups - def test_backup_restore(self, session_browser): - """Test backup and restore of app data.""" - if not _get_introducer(session_browser, 'backupdomain.example', - 'connected'): - _add_introducer(session_browser, 'backupdomain.example') - functional.backup_create(session_browser, self.app_name, 'test_tahoe') - - _remove_introducer(session_browser, 'backupdomain.example') - functional.backup_restore(session_browser, self.app_name, 'test_tahoe') - - assert functional.service_is_running(session_browser, self.app_name) - assert _get_introducer(session_browser, 'backupdomain.example', - 'connected') - - -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 _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 _remove_introducer(browser, domain): - """Remove an introducer from tahoe-lafs.""" - introducer = _get_introducer(browser, domain, 'connected') - functional.submit(browser, element=introducer.find_by_css('.form-remove')) diff --git a/plinth/modules/tahoe/urls.py b/plinth/modules/tahoe/urls.py deleted file mode 100644 index e076a5a95..000000000 --- a/plinth/modules/tahoe/urls.py +++ /dev/null @@ -1,18 +0,0 @@ -# SPDX-License-Identifier: AGPL-3.0-or-later -""" -URLs for the Tahoe-LAFS module. -""" - -from django.urls import re_path - -from . import views -from .views import TahoeAppView, TahoeSetupView - -urlpatterns = [ - re_path(r'^apps/tahoe/setup/$', TahoeSetupView.as_view(), name='setup'), - re_path(r'^apps/tahoe/add_introducer/$', views.add_introducer, - name='add-introducer'), - re_path(r'^apps/tahoe/remove_introducer/(?P[0-9a-zA-Z_]+)/$', - views.remove_introducer, name='remove-introducer'), - re_path(r'^apps/tahoe/$', TahoeAppView.as_view(), name='index') -] diff --git a/plinth/modules/tahoe/views.py b/plinth/modules/tahoe/views.py deleted file mode 100644 index 82bfd6510..000000000 --- a/plinth/modules/tahoe/views.py +++ /dev/null @@ -1,64 +0,0 @@ -# SPDX-License-Identifier: AGPL-3.0-or-later -""" -Views for the Tahoe-LAFS module -""" -from django.shortcuts import redirect -from django.urls import reverse_lazy -from django.views.generic import FormView - -from plinth.forms import DomainSelectionForm -from plinth.modules import names, tahoe -from plinth.views import AppView - - -class TahoeSetupView(FormView): - """Show tahoe-lafs setup page.""" - template_name = 'tahoe-pre-setup.html' - form_class = DomainSelectionForm - success_url = reverse_lazy('tahoe:index') - - def form_valid(self, form): - domain_name = form.cleaned_data['domain_name'] - tahoe.post_setup(domain_name) - return super().form_valid(form) - - def get_context_data(self, *args, **kwargs): - context = super().get_context_data(**kwargs) - context['description'] = tahoe.app.info.description - context['title'] = tahoe.app.info.name - context['domain_names'] = names.components.DomainName.list_names( - 'tahoe-plinth') - - return context - - -class TahoeAppView(AppView): - """Show tahoe-lafs service page.""" - app_id = 'tahoe' - template_name = 'tahoe-post-setup.html' - - def dispatch(self, request, *args, **kwargs): - if not tahoe.is_setup(): - return redirect('tahoe:setup') - - return super().dispatch(request, *args, **kwargs) - - def get_context_data(self, *args, **kwargs): - context = super().get_context_data(**kwargs) - context['domain_name'] = tahoe.get_configured_domain_name() - context['introducers'] = tahoe.get_introducers() - context['local_introducer'] = tahoe.get_local_introducer() - - return context - - -def add_introducer(request): - if request.method == 'POST': - tahoe.add_introducer((request.POST['pet_name'], request.POST['furl'])) - return redirect('tahoe:index') - - -def remove_introducer(request, introducer): - if request.method == 'POST': - tahoe.remove_introducer(introducer) - return redirect('tahoe:index') diff --git a/pyproject.toml b/pyproject.toml index d0d36c748..0ad41f90b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -59,7 +59,6 @@ markers = [ "storage", "syncthing", "system", - "tahoe", "tor", "transmission", "ttrss", diff --git a/setup.py b/setup.py index 2d82edf1d..9855f177a 100755 --- a/setup.py +++ b/setup.py @@ -47,6 +47,7 @@ DISABLED_APPS_TO_REMOVE = [ 'udiskie', 'restore', 'repro', + 'tahoe', ] REMOVED_FILES = [ diff --git a/static/themes/default/icons/tahoe-lafs.png b/static/themes/default/icons/tahoe-lafs.png deleted file mode 100644 index bdac72e3a..000000000 Binary files a/static/themes/default/icons/tahoe-lafs.png and /dev/null differ diff --git a/static/themes/default/icons/tahoe-lafs.svg b/static/themes/default/icons/tahoe-lafs.svg deleted file mode 100644 index 3a132539e..000000000 --- a/static/themes/default/icons/tahoe-lafs.svg +++ /dev/null @@ -1,170 +0,0 @@ - - - - - - image/svg+xml - - Tahoe-LAFS logo - - - - - - Tahoe-LAFS logo - - A proposed logo for the Tahoe-LAFS Project. - - - - -Tahoe-LAFS Logo - - by Kevin Reid - - is licensed under a Creative Commons Attribution 3.0 Unported License - -. - - - - - - - - - - - - - - - -