From 81072bd43c3fec5605bac68c25a96d30a8f56720 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pekka=20Pietik=C3=A4inen?= Date: Mon, 15 Aug 2016 13:47:14 +0300 Subject: [PATCH 1/5] Initial attempt at selenium stub for testing browsers, very much WIP --- stubs/python-selenium/run.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 stubs/python-selenium/run.py diff --git a/stubs/python-selenium/run.py b/stubs/python-selenium/run.py new file mode 100644 index 0000000..56b0f0b --- /dev/null +++ b/stubs/python-selenium/run.py @@ -0,0 +1,20 @@ +from selenium import webdriver +from selenium.webdriver.common.keys import Keys + +driver = webdriver.Firefox() +driver.get_log('browser') + +import sys + +host = sys.argv[1] +port = sys.argv[2] + +driver.get("https://" + host + ":" + port) +if 'Problem loading page' or 'Insecure connection' in driver.title: + logs=driver.get_log('browser') + print(''.join([x.get('message','') for x in logs])) + print("VERIFY FAILURE") +else: + print("VERIFY SUCCESS") + +driver.close() From 0950f8d3fd98d9ae5b2e7895cd587bd7a294be81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pekka=20Pietik=C3=A4inen?= Date: Mon, 15 Aug 2016 14:11:39 +0300 Subject: [PATCH 2/5] Use new-style responses --- stubs/python-selenium/run.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/stubs/python-selenium/run.py b/stubs/python-selenium/run.py index 56b0f0b..1eae96b 100644 --- a/stubs/python-selenium/run.py +++ b/stubs/python-selenium/run.py @@ -1,20 +1,28 @@ from selenium import webdriver -from selenium.webdriver.common.keys import Keys +import re +import sys driver = webdriver.Firefox() driver.get_log('browser') -import sys - host = sys.argv[1] port = sys.argv[2] +failing_titles = ('Problem loading page', + 'Insecure connection', + 'failed to load') + driver.get("https://" + host + ":" + port) -if 'Problem loading page' or 'Insecure connection' in driver.title: - logs=driver.get_log('browser') - print(''.join([x.get('message','') for x in logs])) - print("VERIFY FAILURE") + +for t in failing_titles: + if t in driver.title: + logs = [x.get('message', '') for x in driver.get_log('browser')] + ssl_logs = filter(lambda x: re.search( + '(ssl|tls|https)', x, re.IGNORECASE), logs) + print(''.join(logs)) + print("REJECT") + break else: - print("VERIFY SUCCESS") + print("ACCEPT") driver.close() From a37d3ce72e6d2a44bb12bae881c804a2f4f98953 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pekka=20Pietik=C3=A4inen?= Date: Mon, 15 Aug 2016 14:38:12 +0300 Subject: [PATCH 3/5] Enable SSL certificate checks, fix page titles that result in failure --- stubs/python-selenium/run.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/stubs/python-selenium/run.py b/stubs/python-selenium/run.py index 1eae96b..2985993 100644 --- a/stubs/python-selenium/run.py +++ b/stubs/python-selenium/run.py @@ -2,15 +2,17 @@ import re import sys -driver = webdriver.Firefox() +driver = webdriver.Firefox(capabilities={'acceptSslCerts': False}) +#driver = webdriver.Chrome(desired_capabilities={'acceptSslCerts': False}) driver.get_log('browser') host = sys.argv[1] port = sys.argv[2] failing_titles = ('Problem loading page', - 'Insecure connection', - 'failed to load') + 'Insecure Connection', + 'failed to load', + 'is not private') driver.get("https://" + host + ":" + port) From 8d5cf8284421e76bc50da6321e19d54f806bee00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pekka=20Pietik=C3=A4inen?= Date: Mon, 15 Aug 2016 15:53:10 +0300 Subject: [PATCH 4/5] Split code to support different browsers --- stubs/python-selenium/chrome.py | 16 +++++++++++++ stubs/python-selenium/common.py | 40 ++++++++++++++++++++++++++++++++ stubs/python-selenium/firefox.py | 15 ++++++++++++ stubs/python-selenium/run.py | 30 ------------------------ 4 files changed, 71 insertions(+), 30 deletions(-) create mode 100644 stubs/python-selenium/chrome.py create mode 100644 stubs/python-selenium/common.py create mode 100644 stubs/python-selenium/firefox.py delete mode 100644 stubs/python-selenium/run.py diff --git a/stubs/python-selenium/chrome.py b/stubs/python-selenium/chrome.py new file mode 100644 index 0000000..d4c6065 --- /dev/null +++ b/stubs/python-selenium/chrome.py @@ -0,0 +1,16 @@ +from common import SeleniumSSLTest +from selenium import webdriver + + +class ChromeSSLTest(SeleniumSSLTest): + failing_titles = ('Problem loading page', + 'Insecure Connection', + 'failed to load', + 'is not private') + + def init_driver(self): + self.driver = webdriver.Chrome( + desired_capabilities={'acceptSslCerts': False}) + + +ChromeSSLTest() diff --git a/stubs/python-selenium/common.py b/stubs/python-selenium/common.py new file mode 100644 index 0000000..dd92a75 --- /dev/null +++ b/stubs/python-selenium/common.py @@ -0,0 +1,40 @@ + +import re +import sys + + +class SeleniumSSLTest(object): + driver = None + failing_titles = () + + def __init__(self): + if len(sys.argv) < 3: + exit("Usage: %s " % sys.argv[0]) + elif len(sys.argv) > 3: + print("UNSUPPORTED") + exit(0) + + host = sys.argv[1] + port = sys.argv[2] + url = "https://" + host + ":" + port + self.init_driver() + self.run_test(url) + + def run_test(self, url): + if self.driver is None: + exit("No driver") + self.driver.get_log('browser') + self.driver.get(url) + + for t in self.failing_titles: + if t in self.driver.title: + logs = [x.get('message', '') + for x in self.driver.get_log('browser')] + ssl_logs = filter(lambda x: re.search( + '(ssl|tls|https)', x, re.IGNORECASE), logs) + print(''.join(ssl_logs)) + print("REJECT") + break + else: + print("ACCEPT") + self.driver.close() diff --git a/stubs/python-selenium/firefox.py b/stubs/python-selenium/firefox.py new file mode 100644 index 0000000..061bc57 --- /dev/null +++ b/stubs/python-selenium/firefox.py @@ -0,0 +1,15 @@ +from common import SeleniumSSLTest +from selenium import webdriver + + +class FirefoxSSLTest(SeleniumSSLTest): + failing_titles = ('Problem loading page', + 'Insecure Connection', + 'failed to load', + 'is not private') + + def init_driver(self): + self.driver = webdriver.Firefox(capabilities={'acceptSslCerts': False}) + + +FirefoxSSLTest() diff --git a/stubs/python-selenium/run.py b/stubs/python-selenium/run.py deleted file mode 100644 index 2985993..0000000 --- a/stubs/python-selenium/run.py +++ /dev/null @@ -1,30 +0,0 @@ -from selenium import webdriver -import re -import sys - -driver = webdriver.Firefox(capabilities={'acceptSslCerts': False}) -#driver = webdriver.Chrome(desired_capabilities={'acceptSslCerts': False}) -driver.get_log('browser') - -host = sys.argv[1] -port = sys.argv[2] - -failing_titles = ('Problem loading page', - 'Insecure Connection', - 'failed to load', - 'is not private') - -driver.get("https://" + host + ":" + port) - -for t in failing_titles: - if t in driver.title: - logs = [x.get('message', '') for x in driver.get_log('browser')] - ssl_logs = filter(lambda x: re.search( - '(ssl|tls|https)', x, re.IGNORECASE), logs) - print(''.join(logs)) - print("REJECT") - break -else: - print("ACCEPT") - -driver.close() From 549ed9d1101bfd3fb1c77996552c0c2e9974aee7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pekka=20Pietik=C3=A4inen?= Date: Mon, 15 Aug 2016 15:55:37 +0300 Subject: [PATCH 5/5] Add README.md --- stubs/python-selenium/README.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 stubs/python-selenium/README.md diff --git a/stubs/python-selenium/README.md b/stubs/python-selenium/README.md new file mode 100644 index 0000000..de9187c --- /dev/null +++ b/stubs/python-selenium/README.md @@ -0,0 +1,17 @@ +# How to run: + +``` +python firefox.py +python chrome.py + +``` + +# Dependencies: + +Python 2.7 +selenium installed (`pip install selenium` to command line) +Chromium webdriver (https://sites.google.com/a/chromium.org/chromedriver/downloads) + +Tested on MacOS 10.11.6 + +Note: It looks like Chrome has SSL checks always disabled