from org.openqa.selenium import By
from org.zaproxy.zap.extension.script import ScriptVars
from java.lang import Thread
from org.apache.commons.httpclient import URI
from org.zaproxy.zap.extension.selenium import ExtensionSelenium
import java.lang.String, jarray
from org.parosproxy.paros.network import HttpRequestHeader
def authenticate(helper, paramsValues, credentials):
print("[ZAP Jython Auth Script] Authenticating via Jython script...")
target = ScriptVars.getGlobalVar("target")
if target is None:
print("[ZAP Jython Auth Script] targetURL parameter is not defined!")
return
username = credentials.getParam("username")
password = credentials.getParam("password")
extSel = control.getExtensionLoader().getExtension(ExtensionSelenium)
wd = extSel.getWebDriverProxyingViaZAP(5, "firefox")
print("[ZAP Jython Auth Script] Navigating to: " + target)
wd.get(target)
Thread.sleep(1000)
print("[ZAP Jython Auth Script] Entering credentials...")
wd.findElement(By.id("username")).sendKeys(username)
wd.findElement(By.id("password")).sendKeys(password)
wd.findElement(By.id("kc-login")).click()
Thread.sleep(5000)
wd.quit()
Thread.sleep(100)
print("[ZAP Jython Auth Script] Authentication finished!")
# Préparation d'un message vide (nécessaire pour compatibilité)
msg = helper.prepareMessage()
requestURI= URI("{}/api/v1/version".format(target))
requestHeader = HttpRequestHeader(HttpRequestHeader.GET, requestURI, HttpRequestHeader.HTTP11)
msg.setRequestHeader(requestHeader)
helper.sendAndReceive(msg)
return msg
def getRequiredParamsNames():
return jarray.array([], java.lang.String)
def getOptionalParamsNames():
return jarray.array([], java.lang.String)
def getCredentialsParamsNames():
return jarray.array(["username", "password"], java.lang.String)
To test the context, I created an automation plan :