parameters:
  jenkins:
    client:
      approved_scripts:
        - field java.lang.String value
        - field java.util.ArrayList size
        - method com.cloudbees.jenkins.plugins.sshcredentials.SSHUserPrivateKey getPrivateKey
        - method com.cloudbees.plugins.credentials.common.IdCredentials getId
        - method com.cloudbees.plugins.credentials.common.PasswordCredentials getPassword
        - method com.cloudbees.plugins.credentials.common.UsernameCredentials getUsername
        - method groovy.json.JsonBuilder toPrettyString
        - method groovy.json.JsonSlurperClassic parseText java.lang.String
        - method groovy.lang.GString getBytes
        - method groovy.lang.GroovyObject getProperty java.lang.String
        - method groovy.util.Node attributes
        - method groovy.util.XmlParser parse java.io.File
        - method groovy.util.XmlParser parseText java.lang.String
        - method hudson.PluginManager getPlugins
        - method hudson.PluginWrapper getShortName
        - method hudson.model.Hudson getSlaves
        - method hudson.model.Item getName
        - method hudson.model.ItemGroup getItem java.lang.String
        - method hudson.model.ItemGroup getItems
        - method hudson.model.Job getBuildByNumber int
        - method hudson.model.Job getBuilds
        - method hudson.model.Job getLastBuild
        - method hudson.model.Node getLabelString
        - method hudson.model.Node getNodeName
        - method hudson.model.Run getEnvironment
        - method hudson.model.Run getId
        - method hudson.model.Run getNumber
        - method hudson.model.Run getResult
        - method hudson.model.Run getTimeInMillis
        - method hudson.model.Run isBuilding
        - method java.io.File getAbsolutePath
        - method java.io.File getName
        - method java.io.File getParent
        - method java.io.Writer write java.lang.String
        - method java.lang.AutoCloseable close
        - method java.lang.Class isInstance java.lang.Object
        - method java.lang.Iterable iterator
        - method java.lang.Throwable printStackTrace
        - method java.net.HttpURLConnection getResponseCode
        - method java.net.HttpURLConnection setRequestMethod java.lang.String
        - method java.net.URI getHost
        - method java.net.URI getPort
        - method java.net.URL openConnection
        - method java.net.URLConnection getHeaderField java.lang.String
        - method java.net.URLConnection getInputStream
        - method java.net.URLConnection getOutputStream
        - method java.net.URLConnection setDoOutput boolean
        - method java.net.URLConnection setRequestProperty java.lang.String java.lang.String
        - method java.util.Collection remove java.lang.Object
        - method java.util.Collection stream
        - method java.util.Date getTime
        - method java.util.LinkedHashMap$LinkedHashIterator hasNext
        - method java.util.List subList int int
        - method java.util.Map remove java.lang.Object
        - method java.util.Map size
        - method java.util.regex.MatchResult group int
        - method java.util.regex.MatchResult groupCount
        - method java.util.regex.Matcher find
        - method java.util.regex.Matcher matches
        - method java.util.regex.Pattern matcher java.lang.CharSequence
        - method java.util.stream.Stream collect java.util.stream.Collector
        - method java.util.Calendar add int int
        - method java.util.Calendar getTime
        - method java.util.Date before java.util.Date
        - method jenkins.model.Jenkins getItemByFullName java.lang.String
        - method jenkins.model.Jenkins getPluginManager
        - method org.jenkinsci.plugins.workflow.job.WorkflowRun doStop
        - method org.jenkinsci.plugins.workflow.job.WorkflowRun finish hudson.model.Result java.lang.Throwable
        - method org.jenkinsci.plugins.workflow.support.actions.EnvironmentAction getEnvironment
        - method org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper build
        - new groovy.json.JsonBuilder
        - new groovy.json.JsonBuilder java.lang.Object
        - new groovy.json.JsonSlurperClassic
        - new groovy.util.XmlParser
        - new java.io.File java.lang.String
        - new java.io.IOException java.lang.String
        - new java.io.OutputStreamWriter java.io.OutputStream
        - new java.lang.Exception java.lang.String
        - new java.lang.InterruptedException
        - new java.lang.RuntimeException java.lang.String
        - new java.lang.StringBuilder
        - new java.lang.StringBuilder int
        - new java.net.URI java.lang.String
        - new java.util.ArrayList
        - new java.util.Date
        - new java.util.HashMap
        - staticField groovy.io.FileType FILES
        - staticMethod com.cloudbees.plugins.credentials.CredentialsProvider lookupCredentials java.lang.Class hudson.model.ItemGroup
        - staticMethod java.lang.Double parseDouble java.lang.String
        - staticMethod java.lang.Integer valueOf int
        - staticMethod java.lang.Integer valueOf java.lang.String
        - staticMethod java.lang.Math min int int
        - staticMethod java.lang.String format java.lang.String java.lang.Object[]
        - staticMethod java.lang.String valueOf int
        - staticMethod java.lang.System exit int
        - staticMethod java.lang.System getProperty java.lang.String
        - staticMethod java.lang.System getenv java.lang.String
        - staticMethod java.util.regex.Pattern compile java.lang.String
        - staticMethod java.util.regex.Pattern quote java.lang.String
        - staticMethod java.util.stream.Collectors joining java.lang.CharSequence
        - staticMethod jenkins.model.Jenkins getInstance
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods asBoolean java.util.regex.Matcher
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods collect java.util.Map groovy.lang.Closure
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods eachFile java.io.File groovy.io.FileType groovy.lang.Closure
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods find java.util.Collection groovy.lang.Closure
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods findAll java.util.List groovy.lang.Closure
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods get java.util.Map java.lang.Object java.lang.Object
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getAt java.lang.Iterable int
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getAt java.lang.String int
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getAt java.util.List groovy.lang.Range
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getBytes java.io.File
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getText java.io.InputStream
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods hasProperty java.lang.Object java.lang.String
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods iterator java.lang.Object
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods iterator java.lang.Object[]
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods leftShift java.lang.StringBuffer java.lang.Object
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods plus java.util.List java.lang.Iterable
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods plus java.util.List java.lang.Object
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods plus java.util.List java.util.Collection
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods println java.lang.Object java.lang.Object
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods putAt java.lang.Object java.lang.String java.lang.Object
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods sort java.util.Collection
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods split java.lang.String
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods takeRight java.util.List int
        - staticMethod org.codehaus.groovy.runtime.EncodingGroovyMethods encodeBase64 byte[]
        - staticMethod org.codehaus.groovy.runtime.ScriptBytecodeAdapter bitwiseNegate java.lang.Object
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods toBoolean java.lang.Boolean
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods getAt java.lang.Object java.lang.String
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods multiply java.lang.String java.lang.Number
        - method java.io.File listFiles
        - method java.lang.String concat java.lang.String
        - method org.jenkinsci.plugins.workflow.steps.FlowInterruptedException getCauses
        - method org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper getRawBuild
        - method hudson.model.Actionable getAction java.lang.Class
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods toSorted java.lang.Iterable
        - staticMethod org.codehaus.groovy.runtime.DefaultGroovyMethods intersect java.util.List java.lang.Iterable
