diff --git a/data/etc/plinth/plinth.config b/data/etc/plinth/plinth.config index 2b874c152..4b0ca66ea 100644 --- a/data/etc/plinth/plinth.config +++ b/data/etc/plinth/plinth.config @@ -34,12 +34,3 @@ secure_proxy_ssl_header = HTTP_X_FORWARDED_PROTO [Misc] box_name = FreedomBox -# The danube_edition changes the firstboot process and offers entering a -# voucher for a freedombox.me sub-domain. This functionality requires -# additional debian packages to be installed: -# -# pagekite, python3-requests -# -# They are not added as dependencies to keep the normal installation images -# lean, but make sure to add them if you want to build danube-edition images. -danube_edition = False diff --git a/plinth.config b/plinth.config index 340e92f53..738da7ed9 100644 --- a/plinth.config +++ b/plinth.config @@ -34,12 +34,3 @@ secure_proxy_ssl_header = HTTP_X_FORWARDED_PROTO [Misc] box_name = FreedomBox -# The danube_edition changes the firstboot process and offers entering a -# voucher for a freedombox.me sub-domain. This functionality requires -# additional debian packages to be installed: -# -# pagekite, python3-requests -# -# They are not added as dependencies to keep the normal installation images -# lean, but make sure to add them if you want to build danube-edition images. -danube_edition = False diff --git a/plinth/cfg.py b/plinth/cfg.py index 95630da6a..329dd92e6 100644 --- a/plinth/cfg.py +++ b/plinth/cfg.py @@ -37,7 +37,6 @@ use_x_forwarded_host = False secure_proxy_ssl_header = None develop = False server_dir = '/' -danube_edition = False config_file = None @@ -102,7 +101,6 @@ def read(config_path=None, root_directory=None): ('Network', 'use_x_forwarded_for', 'bool'), ('Network', 'use_x_forwarded_host', 'bool'), ('Misc', 'box_name', 'string'), - ('Misc', 'danube_edition', 'bool'), ) for section, name, datatype in config_items: diff --git a/plinth/errors.py b/plinth/errors.py index 57168eb5b..93adb8fcd 100644 --- a/plinth/errors.py +++ b/plinth/errors.py @@ -14,7 +14,6 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . # - """ Project specific errors """ @@ -30,11 +29,6 @@ class ActionError(PlinthError): pass -class DomainRegistrationError(PlinthError): - """Domain registration failed""" - pass - - class PackageNotInstalledError(PlinthError): """Could not complete module setup due to missing package.""" pass diff --git a/plinth/modules/pagekite/__init__.py b/plinth/modules/pagekite/__init__.py index ff00c6b49..e84d6f2f3 100644 --- a/plinth/modules/pagekite/__init__.py +++ b/plinth/modules/pagekite/__init__.py @@ -36,14 +36,6 @@ managed_services = ['pagekite'] managed_packages = ['pagekite'] -first_boot_steps = [ - { - 'id': 'pagekite_firstboot', - 'url': 'pagekite:firstboot', - 'order': 5, - }, -] - name = _('PageKite') short_description = _('Public Visibility') diff --git a/plinth/modules/pagekite/forms.py b/plinth/modules/pagekite/forms.py index 2b3a13b4a..f73980faa 100644 --- a/plinth/modules/pagekite/forms.py +++ b/plinth/modules/pagekite/forms.py @@ -23,13 +23,9 @@ from django.core.exceptions import ValidationError from django.utils.translation import ugettext as _, ugettext_lazy import json import logging -import requests from . import utils -from plinth import cfg -from plinth.errors import ActionError, DomainRegistrationError -from plinth.modules.pagekite.utils import PREDEFINED_SERVICES, run -from plinth.utils import format_lazy +from plinth.errors import ActionError LOGGER = logging.getLogger(__name__) @@ -261,101 +257,3 @@ class AddCustomServiceForm(BaseCustomServiceForm): messages.error(request, _('This service already exists')) else: raise - - -class FirstBootForm(forms.Form): - """Set up freedombox.me pagekite subdomain""" - DOMAIN_APPENDIX = '.freedombox.me' - # Webservice url for domain validation and registration - service_url = 'http://freedombox.me/cgi-bin/freedomkite.pl' - - code_help_text = format_lazy( - ugettext_lazy('The voucher you received with your {box_name} Danube ' - 'Edition'), box_name=ugettext_lazy(cfg.box_name)) - - code = forms.CharField(help_text=code_help_text) - - domain = forms.SlugField(label=_('Subdomain'), - widget=SubdomainWidget(domain=DOMAIN_APPENDIX), - help_text=_('The subdomain you want to register')) - - def __init__(self, *args, **kwargs): - """Initialize the form.""" - super().__init__(*args, **kwargs) - self.fields['code'].widget.attrs.update({'autofocus': 'autofocus'}) - - def clean_domain(self): - """Append the domain to the users' subdomain""" - return self.cleaned_data['domain'] + self.DOMAIN_APPENDIX - - def clean(self): - """Validate user input (subdomain and code)""" - cleaned_data = super().clean() - - # If the subdomain is wrong, don't look if the domain is - # available - if self.errors: - return cleaned_data - - self.domain_already_registered = False - code = cleaned_data.get('code') - domain = cleaned_data.get('domain') - - response = requests.get(self.service_url, params={'code': code}).json() - - # 1. Code is invalid: {} - if 'domain' not in response: - raise ValidationError(_('This code is not valid'), code='invalid') - # 2. Code is valid, domain registered: {'domain': 'xx.freedombox.me'} - elif response['domain']: - if response['domain'] == domain: - self.domain_already_registered = True - else: - message = _('This code is bound to the domain {domain}.') \ - .format(domain=response['domain']) - raise ValidationError(message, code='invalid') - # 3. Code is valid, no domain registered: {'domain': None} - elif response['domain'] is None: - # Make sure that the desired domain is available - data = {'domain': domain} - domain_response = requests.get(self.service_url, params=data) - registered_domain = domain_response.json()['domain'] - if registered_domain is not None: - message = _('The requested domain is already registered.') - raise ValidationError(message, code='invalid') - - return cleaned_data - - def register_domain(self): - """Register a domain (only if it's not already registered)""" - if self.domain_already_registered: - return - - data = {'domain': self.cleaned_data['domain'], - 'code': self.cleaned_data['code']} - response = requests.post(self.service_url, data) - if not response.ok: - message = _('Domain registration failed: {response}.').format( - response=response.text) - LOGGER.error(message) - raise DomainRegistrationError(message) - - def setup_pagekite(self): - """Configure and enable PageKite service.""" - # Set kite name and secret - run(['set-kite', '--kite-name', self.cleaned_data['domain']], - input=self.cleaned_data['code'].encode()) - - # Set frontend - run(['set-frontend', '%s:80' % self.cleaned_data['domain']]) - - # Enable PageKite HTTP + HTTPS service - for service_name in ['http', 'https']: - service = PREDEFINED_SERVICES[service_name]['params'] - try: - run(['add-service', '--service', json.dumps(service)]) - except ActionError as err: - if 'already exists' not in str(err): - raise - - run(['start-and-enable']) diff --git a/plinth/modules/pagekite/urls.py b/plinth/modules/pagekite/urls.py index 8f2c196ea..3dc4bf949 100644 --- a/plinth/modules/pagekite/urls.py +++ b/plinth/modules/pagekite/urls.py @@ -20,8 +20,8 @@ URLs for the PageKite module from django.conf.urls import url -from .views import StandardServiceView, CustomServiceView, ConfigurationView, \ - DeleteServiceView, FirstBootView, first_boot_skip +from .views import (ConfigurationView, CustomServiceView, DeleteServiceView, + StandardServiceView) urlpatterns = [ url(r'^sys/pagekite/$', ConfigurationView.as_view(), name='index'), @@ -31,8 +31,4 @@ urlpatterns = [ name='custom-services'), url(r'^sys/pagekite/services/custom/delete/$', DeleteServiceView.as_view(), name='delete-custom-service'), - url(r'^sys/pagekite/firstboot/$', FirstBootView.as_view(), - name='firstboot'), - url(r'^sys/pagekite/firstboot/skip/$', first_boot_skip, - name='firstboot-skip'), ] diff --git a/plinth/modules/pagekite/views.py b/plinth/modules/pagekite/views.py index 342c146be..eef3bac41 100644 --- a/plinth/modules/pagekite/views.py +++ b/plinth/modules/pagekite/views.py @@ -15,21 +15,17 @@ # along with this program. If not, see . # -from django.contrib import messages from django.http import HttpResponseRedirect from django.urls import reverse, reverse_lazy from django.utils.translation import ugettext_lazy as _ from django.views.generic import TemplateView, View from django.views.generic.edit import FormView -from plinth import cfg -from plinth.errors import DomainRegistrationError -from plinth.modules import first_boot, pagekite +from plinth.modules import pagekite from . import utils from .forms import (AddCustomServiceForm, ConfigurationForm, - DeleteCustomServiceForm, FirstBootForm, - StandardServiceForm) + DeleteCustomServiceForm, StandardServiceForm) subsubmenu = [{ 'url': reverse_lazy('pagekite:index'), @@ -131,37 +127,3 @@ class ConfigurationView(ContextMixin, FormView): def form_valid(self, form): form.save(self.request) return super(ConfigurationView, self).form_valid(form) - - -class FirstBootView(FormView): - """First boot (optional) setup of the Pagekite subdomain.""" - template_name = 'pagekite_firstboot.html' - form_class = FirstBootForm - - def get(self, request, *args, **kwargs): - """Skip this first boot step if it is not relevant.""" - if not cfg.danube_edition: - return first_boot_skip(request) - - return super().get(request, *args, **kwargs) - - def form_valid(self, form): - """Act on valid form submission.""" - try: - form.register_domain() - except DomainRegistrationError as error: - messages.error(self.request, error) - return self.form_invalid(form) - - form.setup_pagekite() - first_boot.mark_step_done('pagekite_firstboot') - message = _('Pagekite setup finished. The HTTP and HTTPS services ' - 'are activated now.') - messages.success(self.request, message) - return HttpResponseRedirect(reverse(first_boot.next_step())) - - -def first_boot_skip(request): - """Skip the first boot step.""" - first_boot.mark_step_done('pagekite_firstboot') - return HttpResponseRedirect(reverse(first_boot.next_step())) diff --git a/plinth/tests/data/etc/plinth/plinth.config b/plinth/tests/data/etc/plinth/plinth.config index 340e92f53..738da7ed9 100644 --- a/plinth/tests/data/etc/plinth/plinth.config +++ b/plinth/tests/data/etc/plinth/plinth.config @@ -34,12 +34,3 @@ secure_proxy_ssl_header = HTTP_X_FORWARDED_PROTO [Misc] box_name = FreedomBox -# The danube_edition changes the firstboot process and offers entering a -# voucher for a freedombox.me sub-domain. This functionality requires -# additional debian packages to be installed: -# -# pagekite, python3-requests -# -# They are not added as dependencies to keep the normal installation images -# lean, but make sure to add them if you want to build danube-edition images. -danube_edition = False diff --git a/plinth/tests/data/plinth.config.with_missing_sections b/plinth/tests/data/plinth.config.with_missing_sections index bd73a0097..fbb473246 100644 --- a/plinth/tests/data/plinth.config.with_missing_sections +++ b/plinth/tests/data/plinth.config.with_missing_sections @@ -1,3 +1,2 @@ [Misc] box_name = FreedomBox -danube_edition = False diff --git a/plinth/tests/test_cfg.py b/plinth/tests/test_cfg.py index c01146f56..6f478b497 100644 --- a/plinth/tests/test_cfg.py +++ b/plinth/tests/test_cfg.py @@ -141,6 +141,5 @@ def compare_configurations(parser): assert isinstance(cfg.use_x_forwarded_host, bool) assert parser.get('Network', 'use_x_forwarded_host') == \ str(cfg.use_x_forwarded_host) - assert len(parser.items('Misc')) == 3 - assert parser.get('Misc', 'danube_edition') == str(cfg.danube_edition) + assert len(parser.items('Misc')) == 2 assert parser.get('Misc', 'box_name') == cfg.box_name