From eecc1d84ef5220a56bfa35de2d1cc8464573965f Mon Sep 17 00:00:00 2001 From: Jesus Serrano Date: Wed, 23 Feb 2022 20:49:33 -0800 Subject: [PATCH 1/2] Modify http headers on GEB to bypass crowdsegment authentication --- build.gradle | 2 + src/test/resources/GebConfig.groovy | 105 +++++++++++++++++++++++----- 2 files changed, 88 insertions(+), 19 deletions(-) diff --git a/build.gradle b/build.gradle index 9028dfe..f4986b4 100644 --- a/build.gradle +++ b/build.gradle @@ -43,6 +43,8 @@ dependencies { // JSON simple for MuukReport implementation group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1' + //implementation group: 'net.lightbody.bmp', name: 'browsermob-proxy', version: '2.1.5' + compile group: 'net.lightbody.bmp', name: 'browsermob-core', version: '2.1.5' } webdriverBinaries { diff --git a/src/test/resources/GebConfig.groovy b/src/test/resources/GebConfig.groovy index 5fe535f..039fefd 100644 --- a/src/test/resources/GebConfig.groovy +++ b/src/test/resources/GebConfig.groovy @@ -1,12 +1,20 @@ // This is the Geb configuration file. // See: http://www.gebish.org/manual/current/#configuration - -import org.openqa.selenium.chrome.ChromeDriver -import org.openqa.selenium.chrome.ChromeOptions -import org.openqa.selenium.firefox.FirefoxDriver -import org.openqa.selenium.remote.DesiredCapabilities -import org.openqa.selenium.remote.CapabilityType +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.chrome.ChromeOptions; +import org.openqa.selenium.firefox.FirefoxDriver; +import io.netty.handler.codec.http.DefaultHttpHeaders; +import io.netty.handler.codec.http.HttpRequest; +import io.netty.handler.codec.http.HttpResponse; +import net.lightbody.bmp.BrowserMobProxy; +import net.lightbody.bmp.BrowserMobProxyServer; +import net.lightbody.bmp.client.ClientUtil; +import net.lightbody.bmp.filters.RequestFilter; +import net.lightbody.bmp.util.HttpMessageContents; +import net.lightbody.bmp.util.HttpMessageInfo; +import org.openqa.selenium.remote.CapabilityType; +import org.openqa.selenium.firefox.FirefoxOptions; waiting { timeout = 20 @@ -16,17 +24,43 @@ environments { // run via “./gradlew chromeTest” // See: http://code.google.com/p/selenium/wiki/ChromeDriver chrome { - driver = { - ChromeOptions o = new ChromeOptions() - o.addArguments('--no-sandbox'); - o.addArguments('--disable-dev-shm-usage'); - o.addArguments("--ignore-certificate-errors"); - DesiredCapabilities cap=DesiredCapabilities.chrome(); - cap.setCapability(ChromeOptions.CAPABILITY, o); - cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true); - cap.setCapability(CapabilityType.ACCEPT_INSECURE_CERTS, true); - new ChromeDriver(cap); - } + + /* + BrowserMob Proxy allows you to manipulate HTTP requests and responses. + This proxy help us to add ClinetID and Secret to bypass cloudflare + authentication on Steppingblocks tests. + */ + BrowserMobProxyServer browserMobProxy = new BrowserMobProxyServer(); + browserMobProxy.setTrustAllServers(true); + browserMobProxy.start(0); + browserMobProxy.addRequestFilter(new RequestFilter() { + @Override + public HttpResponse filterRequest(HttpRequest httpRequest, HttpMessageContents httpMessageContents, HttpMessageInfo httpMessageInfo) { + if(httpMessageInfo.getUrl().toString().contains("qa.crowdsegment.com/login")){ + DefaultHttpHeaders httpHeaders = new DefaultHttpHeaders(); + httpHeaders.add("CF-Access-Client-ID", "CLIENT_VALUE"); + httpHeaders.add("CF-Access-Client-Secret", "SECRET_VALUE"); + httpRequest.headers().add(httpHeaders); + } + else if(httpMessageInfo.getUrl().toString().contains("staging.crowdsegment.com/login")){ + DefaultHttpHeaders httpHeaders = new DefaultHttpHeaders(); + httpHeaders.add("CF-Access-Client-ID", "CLIENT_VALUE"); + httpHeaders.add("CF-Access-Client-Secret", "SECRET_VALUE"); + httpRequest.headers().add(httpHeaders); + } + return null; + } + }); + + ChromeOptions o = new ChromeOptions() + o.addArguments('--no-sandbox'); + o.addArguments('--disable-dev-shm-usage'); + + // Set proxy on chrome options. + o.setCapability(CapabilityType.PROXY, ClientUtil.createSeleniumProxy(browserMobProxy)); + o.addArguments("--ignore-certificate-errors"); + + driver = { new ChromeDriver(o) } } // run via “./gradlew chromeHeadlessTest” @@ -38,14 +72,47 @@ environments { new ChromeDriver(o) } } - + // run via “./gradlew firefoxTest” // See: http://code.google.com/p/selenium/wiki/FirefoxDriver firefox { + + /* + BrowserMob Proxy allows you to manipulate HTTP requests and responses. + This proxy help us to add ClinetID and Secret to bypass cloudflare + authentication on Steppingblocks tests. + */ + BrowserMobProxyServer browserMobProxy = new BrowserMobProxyServer(); + browserMobProxy.setTrustAllServers(true); + browserMobProxy.start(0); + browserMobProxy.addRequestFilter(new RequestFilter() { + @Override + public HttpResponse filterRequest(HttpRequest httpRequest, HttpMessageContents httpMessageContents, HttpMessageInfo httpMessageInfo) { + if(httpMessageInfo.getUrl().toString().contains("qa.crowdsegment.com/login")){ + DefaultHttpHeaders httpHeaders = new DefaultHttpHeaders(); + httpHeaders.add("CF-Access-Client-ID", "CLIENT_VALUE"); + httpHeaders.add("CF-Access-Client-Secret", "SECRET_VALUE"); + httpRequest.headers().add(httpHeaders); + } + else if(httpMessageInfo.getUrl().toString().contains("staging.crowdsegment.com/login")){ + DefaultHttpHeaders httpHeaders = new DefaultHttpHeaders(); + httpHeaders.add("CF-Access-Client-ID", "CLIENT_VALUE"); + httpHeaders.add("CF-Access-Client-Secret", "SECRET_VALUE"); + httpRequest.headers().add(httpHeaders); + } + return null; + } + }); + atCheckWaiting = 1 - driver = { new FirefoxDriver() } + + // Set proxy on firefox options. + FirefoxOptions firefoxOptions = new FirefoxOptions(); + firefoxOptions.setCapability(CapabilityType.PROXY, ClientUtil.createSeleniumProxy(browserMobProxy)); + driver = { new FirefoxDriver(firefoxOptions) } } } // To run the tests with all browsers just run “./gradlew test” baseUrl = "http://gebish.org" + From 83e9f3cd64a799ac02a2bf60342d8d45205281a6 Mon Sep 17 00:00:00 2001 From: Jesus Serrano Date: Wed, 9 Mar 2022 19:35:22 -0800 Subject: [PATCH 2/2] Add staging for stepingblocks --- src/test/resources/GebConfig.groovy | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/test/resources/GebConfig.groovy b/src/test/resources/GebConfig.groovy index 039fefd..d2c1daa 100644 --- a/src/test/resources/GebConfig.groovy +++ b/src/test/resources/GebConfig.groovy @@ -48,6 +48,12 @@ environments { httpHeaders.add("CF-Access-Client-Secret", "SECRET_VALUE"); httpRequest.headers().add(httpHeaders); } + else if(httpMessageInfo.getUrl().toString().contains("staging.steppingblocks.com/login")){ + DefaultHttpHeaders httpHeaders = new DefaultHttpHeaders(); + httpHeaders.add("CF-Access-Client-ID", "CLIENT_VALUE"); + httpHeaders.add("CF-Access-Client-Secret", "SECRET_VALUE"); + httpRequest.headers().add(httpHeaders); + } return null; } }); @@ -100,6 +106,12 @@ environments { httpHeaders.add("CF-Access-Client-Secret", "SECRET_VALUE"); httpRequest.headers().add(httpHeaders); } + else if(httpMessageInfo.getUrl().toString().contains("staging.steppingblocks.com/login")){ + DefaultHttpHeaders httpHeaders = new DefaultHttpHeaders(); + httpHeaders.add("CF-Access-Client-ID", "CLIENT_VALUE"); + httpHeaders.add("CF-Access-Client-Secret", "SECRET_VALUE"); + httpRequest.headers().add(httpHeaders); + } return null; } }); @@ -114,5 +126,4 @@ environments { } // To run the tests with all browsers just run “./gradlew test” -baseUrl = "http://gebish.org" - +baseUrl = "http://gebish.org" \ No newline at end of file