def test_mod_config(self):
        self.sni.add_chall(self.achalls[0])
        self.sni.add_chall(self.achalls[2])

        v_addr1 = [obj.Addr("69.50.225.155", "9000", True, False),
                   obj.Addr("127.0.0.1", "", False, False)]
        v_addr2 = [obj.Addr("myhost", "", False, True)]
        ll_addr = [v_addr1, v_addr2]
        self.sni._mod_config(ll_addr)  # pylint: disable=protected-access

        self.sni.configurator.save()

        self.sni.configurator.parser.load()

        http = self.sni.configurator.parser.parsed[
            self.sni.configurator.parser.loc["root"]][-1]
        self.assertTrue(['include', self.sni.challenge_conf] in http[1])

        vhosts = self.sni.configurator.parser.get_vhosts()
        vhs = [vh for vh in vhosts if vh.filep == self.sni.challenge_conf]

        for vhost in vhs:
            if vhost.addrs == set(v_addr1):
                response = self.achalls[0].response(self.account_key)
            else:
                response = self.achalls[2].response(self.account_key)
                self.assertEqual(vhost.addrs, set(v_addr2))
            self.assertEqual(vhost.names, set([response.z_domain]))

        self.assertEqual(len(vhs), 2)
Beispiel #2
0
    def _make_server_ssl(self, vhost):
        """Make a server SSL.

        Make a server SSL based on server_name and filename by adding a
        ``listen IConfig.dvsni_port ssl`` directive to the server block.

        .. todo:: Maybe this should create a new block instead of modifying
            the existing one?

        :param vhost: The vhost to add SSL to.
        :type vhost: :class:`~letsencrypt_nginx.obj.VirtualHost`

        """
        snakeoil_cert, snakeoil_key = self._get_snakeoil_paths()
        ssl_block = [
            ['listen', '{0} ssl'.format(self.config.dvsni_port)],
            # access and error logs necessary for integration
            # testing (non-root)
            ['access_log',
             os.path.join(self.config.work_dir, 'access.log')],
            ['error_log',
             os.path.join(self.config.work_dir, 'error.log')],
            ['ssl_certificate', snakeoil_cert],
            ['ssl_certificate_key', snakeoil_key],
            ['include', self.parser.loc["ssl_options"]]
        ]
        self.parser.add_server_directives(vhost.filep, vhost.names, ssl_block)
        vhost.ssl = True
        vhost.raw.extend(ssl_block)
        vhost.addrs.add(obj.Addr('', str(self.config.dvsni_port), True, False))
Beispiel #3
0
    def _make_server_ssl(self, vhost):
        """Make a server SSL.

        Make a server SSL based on server_name and filename by adding a
        ``listen IConfig.tls_sni_01_port ssl`` directive to the server block.

        .. todo:: Maybe this should create a new block instead of modifying
            the existing one?

        :param vhost: The vhost to add SSL to.
        :type vhost: :class:`~letsencrypt_nginx.obj.VirtualHost`

        """
        snakeoil_cert, snakeoil_key = self._get_snakeoil_paths()
        ssl_block = [['listen', '{0} ssl'.format(self.config.tls_sni_01_port)],
                     ['ssl_certificate', snakeoil_cert],
                     ['ssl_certificate_key', snakeoil_key],
                     ['include', self.parser.loc["ssl_options"]]]
        self.parser.add_server_directives(vhost.filep,
                                          vhost.names,
                                          ssl_block,
                                          replace=False)
        vhost.ssl = True
        vhost.raw.extend(ssl_block)
        vhost.addrs.add(
            obj.Addr('', str(self.config.tls_sni_01_port), True, False))
Beispiel #4
0
    def _make_server_ssl(self, vhost):
        """Makes a server SSL based on server_name and filename by adding
        a 'listen 443 ssl' directive to the server block.

        .. todo:: Maybe this should create a new block instead of modifying
            the existing one?

        :param vhost: The vhost to add SSL to.
        :type vhost: :class:`~letsencrypt_nginx.obj.VirtualHost`

        """
        ssl_block = [
            ['listen', '443 ssl'],
            ['ssl_certificate', '/etc/ssl/certs/ssl-cert-snakeoil.pem'],
            ['ssl_certificate_key', '/etc/ssl/private/ssl-cert-snakeoil.key'],
            ['include', self.parser.loc["ssl_options"]]
        ]
        self.parser.add_server_directives(vhost.filep, vhost.names, ssl_block)
        vhost.ssl = True
        vhost.raw.extend(ssl_block)
        vhost.addrs.add(obj.Addr('', '443', True, False))
Beispiel #5
0
    def test_get_vhosts(self):
        nparser = parser.NginxParser(self.config_path, self.ssl_options)
        vhosts = nparser.get_vhosts()

        vhost1 = obj.VirtualHost(nparser.abs_path('nginx.conf'),
                                 [obj.Addr('', '8080', False, False)],
                                 False, True,
                                 set(['localhost',
                                      r'~^(www\.)?(example|bar)\.']),
                                 [])
        vhost2 = obj.VirtualHost(nparser.abs_path('nginx.conf'),
                                 [obj.Addr('somename', '8080', False, False),
                                  obj.Addr('', '8000', False, False)],
                                 False, True,
                                 set(['somename', 'another.alias', 'alias']),
                                 [])
        vhost3 = obj.VirtualHost(nparser.abs_path('sites-enabled/example.com'),
                                 [obj.Addr('69.50.225.155', '9000',
                                           False, False),
                                  obj.Addr('127.0.0.1', '', False, False)],
                                 False, True,
                                 set(['.example.com', 'example.*']), [])
        vhost4 = obj.VirtualHost(nparser.abs_path('sites-enabled/default'),
                                 [obj.Addr('myhost', '', False, True)],
                                 False, True, set(['www.example.org']), [])
        vhost5 = obj.VirtualHost(nparser.abs_path('foo.conf'),
                                 [obj.Addr('*', '80', True, True)],
                                 True, True, set(['*.www.foo.com',
                                                  '*.www.example.com']), [])

        self.assertEqual(5, len(vhosts))
        example_com = [x for x in vhosts if 'example.com' in x.filep][0]
        self.assertEqual(vhost3, example_com)
        default = [x for x in vhosts if 'default' in x.filep][0]
        self.assertEqual(vhost4, default)
        fooconf = [x for x in vhosts if 'foo.conf' in x.filep][0]
        self.assertEqual(vhost5, fooconf)
        localhost = [x for x in vhosts if 'localhost' in x.names][0]
        self.assertEquals(vhost1, localhost)
        somename = [x for x in vhosts if 'somename' in x.names][0]
        self.assertEquals(vhost2, somename)