diff --git a/plinth/forms.py b/plinth/forms.py index af56214ea..2d541513a 100644 --- a/plinth/forms.py +++ b/plinth/forms.py @@ -30,7 +30,6 @@ from django.utils.translation import get_language_info from django.utils.translation import ugettext_lazy as _ import plinth -from plinth import utils class AppForm(forms.Form): @@ -46,7 +45,10 @@ class DomainSelectionForm(forms.Form): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - self.fields['domain_name'].choices = utils.get_domain_names() + + from plinth.modules.names.components import DomainName + domains = list(DomainName.list_names()) + self.fields['domain_name'].choices = zip(domains, domains) domain_name = forms.ChoiceField( label=_('Select a domain name to be used with this application'), diff --git a/plinth/modules/api/views.py b/plinth/modules/api/views.py index 6402d36d1..8c89ebb04 100644 --- a/plinth/modules/api/views.py +++ b/plinth/modules/api/views.py @@ -32,9 +32,9 @@ from plinth.modules import names def access_info(request, **kwargs): """API view to return a list of domains and types.""" domains = [{ - 'domain': domain, - 'type': domain_type - } for domain_type, domains in names.domains.items() for domain in domains] + 'domain': domain.name, + 'type': domain.domain_type.component_id + } for domain in names.components.DomainName.list()] response = {'domains': domains} return HttpResponse(json.dumps(response), content_type='application/json') diff --git a/plinth/modules/cockpit/__init__.py b/plinth/modules/cockpit/__init__.py index 48b9bea2c..de9ae7585 100644 --- a/plinth/modules/cockpit/__init__.py +++ b/plinth/modules/cockpit/__init__.py @@ -110,11 +110,9 @@ def init(): def setup(helper, old_version=None): """Install and configure the module.""" helper.install(managed_packages) - domains = [ - domain for domains_of_a_type in names.domains.values() - for domain in domains_of_a_type - ] - helper.call('post', actions.superuser_run, 'cockpit', ['setup'] + domains) + domains = names.components.DomainName.list_names('https') + helper.call('post', actions.superuser_run, 'cockpit', + ['setup'] + list(domains)) helper.call('post', app.enable) diff --git a/plinth/modules/diaspora/views.py b/plinth/modules/diaspora/views.py index b8fcfac6c..751c9780a 100644 --- a/plinth/modules/diaspora/views.py +++ b/plinth/modules/diaspora/views.py @@ -25,8 +25,7 @@ from django.utils.translation import ugettext as _ from django.views.generic import FormView from plinth.forms import DomainSelectionForm -from plinth.modules import diaspora -from plinth.utils import get_domain_names +from plinth.modules import diaspora, names from plinth.views import AppView from .forms import DiasporaAppForm @@ -50,7 +49,8 @@ class DiasporaSetupView(FormView): context = super().get_context_data(**kwargs) context['description'] = self.description context['title'] = self.title - context['domain_names'] = get_domain_names() + context['domain_names'] = names.components.DomainName.list_names( + 'https') return context diff --git a/plinth/modules/letsencrypt/__init__.py b/plinth/modules/letsencrypt/__init__.py index 269ed380e..17a250706 100644 --- a/plinth/modules/letsencrypt/__init__.py +++ b/plinth/modules/letsencrypt/__init__.py @@ -111,12 +111,9 @@ def diagnose(): """Run diagnostics and return the results.""" results = [] - for domain_type, domains in names.domains.items(): - if domain_type == 'hiddenservice': - continue - - for domain in domains: - results.append(action_utils.diagnose_url('https://' + domain)) + for domain in names.components.DomainName.list(): + if domain.domain_type.can_have_certificate: + results.append(action_utils.diagnose_url('https://' + domain.name)) return results @@ -203,13 +200,9 @@ def get_status(): status = actions.superuser_run('letsencrypt', ['get-status']) status = json.loads(status) - for domain_type, domains in names.domains.items(): - # XXX: Remove when Let's Encrypt supports .onion addresses - if domain_type == 'hiddenservice': - continue - - for domain in domains: - status['domains'].setdefault(domain, {}) + for domain in names.components.DomainName.list(): + if domain.domain_type.can_have_certificate: + status['domains'].setdefault(domain.name, {}) return status diff --git a/plinth/modules/matrixsynapse/views.py b/plinth/modules/matrixsynapse/views.py index bea8c3b9d..3d4822a4b 100644 --- a/plinth/modules/matrixsynapse/views.py +++ b/plinth/modules/matrixsynapse/views.py @@ -26,8 +26,7 @@ from django.views.generic import FormView from plinth import actions from plinth.forms import DomainSelectionForm -from plinth.modules import matrixsynapse -from plinth.utils import get_domain_names +from plinth.modules import matrixsynapse, names from plinth.views import AppView from . import get_public_registration_status @@ -51,7 +50,8 @@ class SetupView(FormView): context['title'] = matrixsynapse.name context['description'] = matrixsynapse.description - context['domain_names'] = get_domain_names() + context['domain_names'] = names.components.DomainName.list_names( + 'matrix-synapse-plinth') return context diff --git a/plinth/modules/minetest/views.py b/plinth/modules/minetest/views.py index 0414d6250..12ba4f61f 100644 --- a/plinth/modules/minetest/views.py +++ b/plinth/modules/minetest/views.py @@ -51,10 +51,8 @@ class MinetestAppView(AppView): # pylint: disable=too-many-ancestors def get_context_data(self, *args, **kwargs): """Add service to the context data.""" context = super().get_context_data(*args, **kwargs) - # Filter out onion addresses and get a unique list of domains - domains = set(domain for domains in names.domains.values() - for domain in domains if not domain.endswith('.onion')) - context['domains'] = domains + context['domains'] = names.components.DomainName.list_names( + 'minetest-plinth') return context def form_valid(self, form): diff --git a/plinth/modules/monkeysphere/views.py b/plinth/modules/monkeysphere/views.py index 39d10ad0e..9fcd44064 100644 --- a/plinth/modules/monkeysphere/views.py +++ b/plinth/modules/monkeysphere/views.py @@ -109,10 +109,7 @@ def get_keys(fingerprint=None): ['host-show-keys'] + fingerprint) keys = json.loads(output)['keys'] - domains = [ - domain for domains_of_a_type in names.domains.values() - for domain in domains_of_a_type - ] + domains = names.components.DomainName.list_names() for key in keys.values(): key['imported_domains'] = set(key.get('imported_domains', [])) key['available_domains'] = set(key.get('available_domains', [])) diff --git a/plinth/modules/tahoe/views.py b/plinth/modules/tahoe/views.py index e9612f1b5..185a28296 100644 --- a/plinth/modules/tahoe/views.py +++ b/plinth/modules/tahoe/views.py @@ -22,8 +22,7 @@ from django.urls import reverse_lazy from django.views.generic import FormView from plinth.forms import DomainSelectionForm -from plinth.modules import tahoe -from plinth.utils import get_domain_names +from plinth.modules import names, tahoe from plinth.views import AppView @@ -44,7 +43,8 @@ class TahoeSetupView(FormView): context = super().get_context_data(**kwargs) context['description'] = self.description context['title'] = self.title - context['domain_names'] = get_domain_names() + context['domain_names'] = names.components.DomainName.list_names( + 'tahoe-plinth') return context diff --git a/plinth/utils.py b/plinth/utils.py index aa3a4bcdc..24c1b1176 100644 --- a/plinth/utils.py +++ b/plinth/utils.py @@ -74,21 +74,6 @@ def is_user_admin(request, cached=False): return user_is_admin -def get_domain_names(): - """Return the domain name(s)""" - from plinth.modules import names - - domain_names = [] - - for domain_type, domains in names.domains.items(): - if domain_type == 'hiddenservice': - continue - for domain in domains: - domain_names.append((domain, domain)) - - return domain_names - - class YAMLFile(object): """A context management class for updating YAML files"""