def _choose_vhost_from_list(self, target_name): # Select a vhost from a list vhost = display_ops.select_vhost(target_name, self.vhosts) if vhost is None: logger.error( "No vhost exists with servername or alias of: %s. " "No vhost was selected. Please specify servernames " "in the Apache config", target_name) raise errors.PluginError("No vhost selected") elif not vhost.ssl: addrs = self._get_proposed_addrs(vhost, "443") # TODO: Conflicts is too conservative if not any(vhost.enabled and vhost.conflicts(addrs) for vhost in self.vhosts): vhost = self.make_vhost_ssl(vhost) else: logger.error( "The selected vhost would conflict with other HTTPS " "VirtualHosts within Apache. Please select another " "vhost or add ServerNames to your configuration.") raise errors.PluginError( "VirtualHost not able to be selected.") self.assoc[target_name] = vhost return vhost
def choose_vhost(self, target_name): """Chooses a virtual host based on the given domain name. If there is no clear virtual host to be selected, the user is prompted with all available choices. :param str target_name: domain name :returns: ssl vhost associated with name :rtype: :class:`~letsencrypt_apache.obj.VirtualHost` :raises .errors.PluginError: If no vhost is available """ # Allows for domain names to be associated with a virtual host # Client isn't using create_dn_server_assoc(self, dn, vh) yet if target_name in self.assoc: return self.assoc[target_name] # Check for servernames/aliases for ssl hosts for vhost in self.vhosts: if vhost.ssl and target_name in vhost.names: self.assoc[target_name] = vhost return vhost # Checking for domain name in vhost address # This technique is not recommended by Apache but is technically valid target_addr = common.Addr((target_name, "443")) for vhost in self.vhosts: if target_addr in vhost.addrs: self.assoc[target_name] = vhost return vhost # Check for non ssl vhosts with servernames/aliases == "name" for vhost in self.vhosts: if not vhost.ssl and target_name in vhost.names: vhost = self.make_vhost_ssl(vhost) self.assoc[target_name] = vhost return vhost vhost = display_ops.select_vhost(target_name, self.vhosts) if vhost is not None: self.assoc[target_name] = vhost else: logger.error( "No vhost exists with servername or alias of: %s. " "No vhost was selected. Please specify servernames " "in the Apache config", target_name) raise errors.PluginError("No vhost selected") # TODO: Ask the user if they would like to add ServerName/Alias to VH return vhost
def _call(cls, vhosts): from letsencrypt_apache.display_ops import select_vhost return select_vhost("example.com", vhosts)