From 548c6b98f34a0340e986296aa30be8a2c6e54e05 Mon Sep 17 00:00:00 2001 From: "J. Carlos Romero" Date: Wed, 23 Jan 2019 00:26:47 +0100 Subject: [PATCH] mldonkey: Add new module for the eDonkey network Reviewed-by: Sunil Mohan Adapa --- actions/mldonkey | 70 ++++++++++ .../conf-available/mldonkey-freedombox.conf | 23 +++ data/etc/plinth/modules-enabled/mldonkey | 1 + functional_tests/features/mldonkey.feature | 50 +++++++ plinth/modules/mldonkey/__init__.py | 131 ++++++++++++++++++ plinth/modules/mldonkey/manifest.py | 36 +++++ plinth/modules/mldonkey/urls.py | 35 +++++ static/themes/default/icons/mldonkey.png | Bin 0 -> 33782 bytes 8 files changed, 346 insertions(+) create mode 100755 actions/mldonkey create mode 100644 data/etc/apache2/conf-available/mldonkey-freedombox.conf create mode 100644 data/etc/plinth/modules-enabled/mldonkey create mode 100644 functional_tests/features/mldonkey.feature create mode 100644 plinth/modules/mldonkey/__init__.py create mode 100644 plinth/modules/mldonkey/manifest.py create mode 100644 plinth/modules/mldonkey/urls.py create mode 100644 static/themes/default/icons/mldonkey.png diff --git a/actions/mldonkey b/actions/mldonkey new file mode 100755 index 000000000..c4ea9f885 --- /dev/null +++ b/actions/mldonkey @@ -0,0 +1,70 @@ +#!/usr/bin/python3 +# -*- mode: python -*- +# +# This file is part of FreedomBox. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +""" +Configuration helper for mldonkey. +""" + +import argparse +import subprocess + +from plinth import action_utils + +def parse_arguments(): + """Return parsed command line arguments as dictionary.""" + parser = argparse.ArgumentParser() + subparsers = parser.add_subparsers(dest='subcommand', help='Sub command') + + subparsers.add_parser('pre-install', help='Perform pre-install operations') + subparsers.add_parser('enable', help='Enable mldonkey') + subparsers.add_parser('disable', help='Disable mldonkey') + + subparsers.required = True + return parser.parse_args() + + +def subcommand_pre_install(_): + """Preseed debconf values before packages are installed.""" + subprocess.check_output( + ['debconf-set-selections'], + input=b'mldonkey-server mldonkey-server/launch_at_startup boolean true') + + +def subcommand_enable(_): + """Enable web configuration and reload.""" + action_utils.service_enable('mldonkey-server') + action_utils.webserver_enable('mldonkey-freedombox') + + +def subcommand_disable(_): + """Disable web configuration and reload.""" + action_utils.webserver_disable('mldonkey-freedombox') + action_utils.service_disable('mldonkey-server') + + +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/data/etc/apache2/conf-available/mldonkey-freedombox.conf b/data/etc/apache2/conf-available/mldonkey-freedombox.conf new file mode 100644 index 000000000..29873dc40 --- /dev/null +++ b/data/etc/apache2/conf-available/mldonkey-freedombox.conf @@ -0,0 +1,23 @@ +## +## On all sites, provide mldonkey web interface on a path: /mldonkey +## + +# Redirect /mldonkey to /mldonkey/ as the MLdonkey server web interface does not +# work without a slash at the end. + + + + RewriteEngine On + RewriteCond %{REQUEST_URI} ^/mldonkey$ + RewriteRule .* /mldonkey/ [R=301,L] + + + + + + Include includes/freedombox-single-sign-on.conf + ProxyPass http://localhost:4080/ + + TKTAuthToken "admin" "ed2k" + + diff --git a/data/etc/plinth/modules-enabled/mldonkey b/data/etc/plinth/modules-enabled/mldonkey new file mode 100644 index 000000000..71bd026a0 --- /dev/null +++ b/data/etc/plinth/modules-enabled/mldonkey @@ -0,0 +1 @@ +plinth.modules.mldonkey diff --git a/functional_tests/features/mldonkey.feature b/functional_tests/features/mldonkey.feature new file mode 100644 index 000000000..09d6831b2 --- /dev/null +++ b/functional_tests/features/mldonkey.feature @@ -0,0 +1,50 @@ +# +# This file is part of FreedomBox. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +@apps @mldonkey @sso +Feature: MLDonkey eDonkey Network Client + Run the eDonkey Network client. + +Background: + Given I'm a logged in user + Given the mldonkey application is installed + +Scenario: Enable mldonkey application + Given the mldonkey application is disabled + When I enable the mldonkey application + Then the mldonkey site should be available + +Scenario: Disable mldonkey application + Given the mldonkey application is enabled + When I disable the mldonkey application + Then the mldonkey site should not be available + +# Scenario: Upload an ed2k file to mldonkey +# Given the mldonkey application is enabled +# When all ed2k files are removed from mldonkey +# And I upload a sample ed2k file to mldonkey +# Then there should be 1 ed2k file listed in mldonkey +# +# Scenario: Backup and restore mldonkey +# Given the mldonkey application is enabled +# When all ed2k files are removed from mldonkey +# And I upload a sample ed2k file to mldonkey +# And I create a backup of the mldonkey app data +# And all ed2k files are removed from mldonkey +# And I restore the mldonkey app data backup +# Then the mldonkey service should be running +# And there should be 1 torrents listed in mldonkey diff --git a/plinth/modules/mldonkey/__init__.py b/plinth/modules/mldonkey/__init__.py new file mode 100644 index 000000000..b9052f6b6 --- /dev/null +++ b/plinth/modules/mldonkey/__init__.py @@ -0,0 +1,131 @@ +# +# This file is part of FreedomBox. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +""" +FreedomBox app for mldonkey. +""" + +from django.utils.translation import ugettext_lazy as _ + +from plinth import service as service_module +from plinth import action_utils, actions, cfg, frontpage +from plinth.menu import main_menu +from plinth.modules.users import register_group + +from .manifest import clients + +version = 1 + +service = None + +managed_services = ['mldonkey-server'] + +managed_packages = ['mldonkey-server'] + +name = _('MLDonkey') + +short_description = _('Door to the eDonkey network') + +description = [ + _('MLDonkey is a door to the eDonkey network, a decentralized network ' + 'used to exchange big files on the Internet.'), +] + +clients = clients + +reserved_usernames = ['mldonkey'] + +group = ('ed2k', _('Download files using eDonkey applications')) + +manual_page = 'MLDonkey' + +def init(): + """Intialize the MLDonkey module.""" + menu = main_menu.get('apps') + menu.add_urlname(name, 'mldonkey', 'mldonkey:index', + short_description) + register_group(group) + + global service + setup_helper = globals()['setup_helper'] + if setup_helper.get_state() != 'needs-setup': + service = service_module.Service(managed_services[0], name, ports=[ + 'http', 'https' + ], is_external=True, is_enabled=is_enabled, enable=enable, + disable=disable, + is_running=is_running) + + if is_enabled(): + add_shortcut() + + +def setup(helper, old_version=None): + """Install and configure the module.""" + helper.call('pre', actions.superuser_run, 'mldonkey', ['pre-install']) + helper.install(managed_packages) + helper.call('post', actions.superuser_run, 'mldonkey', ['enable']) + global service + if service is None: + service = service_module.Service(managed_services[0], name, ports=[ + 'http', 'https' + ], is_external=True, is_enabled=is_enabled, enable=enable, + disable=disable, + is_running=is_running) + helper.call('post', service.notify_enabled, None, True) + helper.call('post', add_shortcut) + + +def add_shortcut(): + """Helper method to add a shortcut to the frontpage.""" + frontpage.add_shortcut('mldonkey', name, short_description=short_description, + url='/mldonkey', login_required=True, + allowed_groups=[group[0]]) + + +def is_running(): + """Return whether the service is running.""" + return action_utils.service_is_running('mldonkey-server') + + +def is_enabled(): + """Return whether the module is enabled.""" + return (action_utils.service_is_enabled('mldonkey-server') and + action_utils.webserver_is_enabled('mldonkey-freedombox')) + + +def enable(): + """Enable the module.""" + actions.superuser_run('mldonkey', ['enable']) + add_shortcut() + + +def disable(): + """Disable the module.""" + actions.superuser_run('mldonkey', ['disable']) + frontpage.remove_shortcut('mldonkey') + + +def diagnose(): + """Run diagnostics and return the results.""" + results = [] + + results.append(action_utils.diagnose_port_listening(4080, 'tcp4')) + results.append(action_utils.diagnose_port_listening(4080, 'tcp6')) + results.extend( + action_utils.diagnose_url_on_all('https://{host}/mldonkey/', + check_certificate=False)) + + return results diff --git a/plinth/modules/mldonkey/manifest.py b/plinth/modules/mldonkey/manifest.py new file mode 100644 index 000000000..12a4d67fb --- /dev/null +++ b/plinth/modules/mldonkey/manifest.py @@ -0,0 +1,36 @@ +# +# This file is part of FreedomBox. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# + +from django.utils.translation import ugettext_lazy as _ + +from plinth.clients import validate +from plinth.modules.backups.api import validate as validate_backup + +clients = validate([{ + 'name': _('MLDonkey'), + 'platforms': [{ + 'type': 'web', + 'url': '/mldonkey/' + }] +}]) + +backup = validate_backup({ + 'config': { + 'files': ['/var/lib/mldonkey/*.ini'] + }, + 'services': ['mldonkey-server'] +}) diff --git a/plinth/modules/mldonkey/urls.py b/plinth/modules/mldonkey/urls.py new file mode 100644 index 000000000..5e610c58f --- /dev/null +++ b/plinth/modules/mldonkey/urls.py @@ -0,0 +1,35 @@ +# +# This file is part of FreedomBox. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +""" +URLs for the mldonkey module. +""" + +from django.conf.urls import url + +from plinth.views import ServiceView +from plinth.modules import mldonkey + +urlpatterns = [ + url(r'^apps/mldonkey/$', + ServiceView.as_view( + service_id=mldonkey.managed_services[0], + diagnostics_module_name='mldonkey', + description=mldonkey.description, + clients=mldonkey.clients, + show_status_block=True), + name='index'), +] diff --git a/static/themes/default/icons/mldonkey.png b/static/themes/default/icons/mldonkey.png new file mode 100644 index 0000000000000000000000000000000000000000..32bf32ce06b28c065e690ffc134072f19517543e GIT binary patch literal 33782 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