From 2e06939fecfc8adca85b1ad28c27dd390e7e33b0 Mon Sep 17 00:00:00 2001 From: Brad Warren Date: Thu, 19 Nov 2015 21:15:54 -0800 Subject: [PATCH 1/6] Disable selection of misconfigured plugins --- letsencrypt/display/ops.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/letsencrypt/display/ops.py b/letsencrypt/display/ops.py index 37ce66b62..a240bf847 100644 --- a/letsencrypt/display/ops.py +++ b/letsencrypt/display/ops.py @@ -34,7 +34,14 @@ def choose_plugin(prepared, question): question, opts, help_label="More Info") if code == display_util.OK: - return prepared[index] + if plugin_ep.misconfigured: + util(interfaces.IDisplay).notification( + "The selected plugin encountered an error while parsing " + "your server configuration and cannot be used. The error " + "was: {0}".format(prepared[index].prepare()) + height=display_util.HEIGHT) + else: + return prepared[index] elif code == display_util.HELP: if prepared[index].misconfigured: msg = "Reported Error: %s" % prepared[index].prepare() From 279c0d9ddf49233d14f976852998cc07d8d562f4 Mon Sep 17 00:00:00 2001 From: Brad Warren Date: Thu, 19 Nov 2015 21:16:44 -0800 Subject: [PATCH 2/6] Comma --- letsencrypt/display/ops.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/letsencrypt/display/ops.py b/letsencrypt/display/ops.py index a240bf847..663db9307 100644 --- a/letsencrypt/display/ops.py +++ b/letsencrypt/display/ops.py @@ -38,7 +38,7 @@ def choose_plugin(prepared, question): util(interfaces.IDisplay).notification( "The selected plugin encountered an error while parsing " "your server configuration and cannot be used. The error " - "was: {0}".format(prepared[index].prepare()) + "was: {0}".format(prepared[index].prepare()), height=display_util.HEIGHT) else: return prepared[index] From 2bdc60dfef139dd9bd4e319bb61aea758ead7c0a Mon Sep 17 00:00:00 2001 From: Brad Warren Date: Thu, 19 Nov 2015 21:21:42 -0800 Subject: [PATCH 3/6] Scoping rules are frustrating --- letsencrypt/display/ops.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/letsencrypt/display/ops.py b/letsencrypt/display/ops.py index 663db9307..5724cc542 100644 --- a/letsencrypt/display/ops.py +++ b/letsencrypt/display/ops.py @@ -34,14 +34,15 @@ def choose_plugin(prepared, question): question, opts, help_label="More Info") if code == display_util.OK: + plugin_ep = prepared[index] if plugin_ep.misconfigured: util(interfaces.IDisplay).notification( "The selected plugin encountered an error while parsing " "your server configuration and cannot be used. The error " - "was: {0}".format(prepared[index].prepare()), + "was: {0}".format(plugin_ep.prepare()), height=display_util.HEIGHT) else: - return prepared[index] + return plugin_ep elif code == display_util.HELP: if prepared[index].misconfigured: msg = "Reported Error: %s" % prepared[index].prepare() From 489e79d77763c07ac8ec0e0f19852f876e896594 Mon Sep 17 00:00:00 2001 From: Brad Warren Date: Thu, 19 Nov 2015 22:13:04 -0800 Subject: [PATCH 4/6] spacing --- letsencrypt/display/ops.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/letsencrypt/display/ops.py b/letsencrypt/display/ops.py index 5724cc542..224a701fb 100644 --- a/letsencrypt/display/ops.py +++ b/letsencrypt/display/ops.py @@ -39,7 +39,7 @@ def choose_plugin(prepared, question): util(interfaces.IDisplay).notification( "The selected plugin encountered an error while parsing " "your server configuration and cannot be used. The error " - "was: {0}".format(plugin_ep.prepare()), + "was:\n\n{0}".format(plugin_ep.prepare()), height=display_util.HEIGHT) else: return plugin_ep From 52361cc7305147ec624d3d225ace944c62ae981d Mon Sep 17 00:00:00 2001 From: Brad Warren Date: Thu, 19 Nov 2015 22:18:48 -0800 Subject: [PATCH 5/6] Added tests --- letsencrypt/tests/display/ops_test.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/letsencrypt/tests/display/ops_test.py b/letsencrypt/tests/display/ops_test.py index 9d4a3a933..7427a1dc0 100644 --- a/letsencrypt/tests/display/ops_test.py +++ b/letsencrypt/tests/display/ops_test.py @@ -41,9 +41,11 @@ class ChoosePluginTest(unittest.TestCase): return choose_plugin(self.plugins, "Question?") @mock.patch("letsencrypt.display.ops.util") - def test_successful_choice(self, mock_util): - mock_util().menu.return_value = (display_util.OK, 0) - self.assertEqual(self.mock_apache, self._call()) + def test_selection(self, mock_util): + mock_util().menu.side_effect = [(display_util.OK, 0), + (display_util.OK, 1)] + self.assertEqual(self.mock_stand, self._call()) + self.assertEqual(mock_util().notification.call_count, 1) @mock.patch("letsencrypt.display.ops.util") def test_more_info(self, mock_util): From 350a07086f653158fc9592de7df1b625bffc7ec8 Mon Sep 17 00:00:00 2001 From: Brad Warren Date: Thu, 19 Nov 2015 22:35:28 -0800 Subject: [PATCH 6/6] Remove confirmation in text display --- letsencrypt/display/ops.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/letsencrypt/display/ops.py b/letsencrypt/display/ops.py index 224a701fb..dc5904cda 100644 --- a/letsencrypt/display/ops.py +++ b/letsencrypt/display/ops.py @@ -40,7 +40,7 @@ def choose_plugin(prepared, question): "The selected plugin encountered an error while parsing " "your server configuration and cannot be used. The error " "was:\n\n{0}".format(plugin_ep.prepare()), - height=display_util.HEIGHT) + height=display_util.HEIGHT, pause=False) else: return plugin_ep elif code == display_util.HELP: